lexer: New function lex_force_int_range().
[pspp] / src / language / dictionary / attributes.c
index c7598d1c45b37899ecba1d7a375e3dbaea3d9987..88832fd501f641ebcc041c1558fa3d214047c454 100644 (file)
@@ -52,7 +52,7 @@ cmd_variable_attribute (struct lexer *lexer, struct dataset *ds)
   struct dictionary *dict = dataset_dict (ds);
   const char *dict_encoding = dict_get_encoding (dict);
 
-  do 
+  do
     {
       struct variable **vars;
       struct attrset **sets;
@@ -97,13 +97,8 @@ parse_attribute_name (struct lexer *lexer, const char *dict_encoding,
 
   if (lex_match (lexer, T_LBRACK))
     {
-      if (!lex_force_int (lexer))
+      if (!lex_force_int_range (lexer, NULL, 1, 65535))
         goto error;
-      if (lex_integer (lexer) < 1 || lex_integer (lexer) > 65535)
-        {
-          msg (SE, _("Attribute array index must be between 1 and 65535."));
-          goto error;
-        }
       *index = lex_integer (lexer);
       lex_get (lexer);
       if (!lex_force_match (lexer, T_RBRACK))
@@ -120,7 +115,7 @@ error:
 
 static bool
 add_attribute (struct lexer *lexer, const char *dict_encoding,
-               struct attrset **sets, size_t n) 
+               struct attrset **sets, size_t n)
 {
   const char *value;
   size_t index, i;
@@ -139,10 +134,10 @@ add_attribute (struct lexer *lexer, const char *dict_encoding,
   for (i = 0; i < n; i++)
     {
       struct attribute *attr = attrset_lookup (sets[i], name);
-      if (attr == NULL) 
+      if (attr == NULL)
         {
           attr = attribute_create (name);
-          attrset_add (sets[i], attr); 
+          attrset_add (sets[i], attr);
         }
       attribute_set_value (attr, index ? index - 1 : 0, value);
     }
@@ -154,7 +149,7 @@ add_attribute (struct lexer *lexer, const char *dict_encoding,
 
 static bool
 delete_attribute (struct lexer *lexer, const char *dict_encoding,
-                  struct attrset **sets, size_t n) 
+                  struct attrset **sets, size_t n)
 {
   size_t index, i;
   char *name;
@@ -163,7 +158,7 @@ delete_attribute (struct lexer *lexer, const char *dict_encoding,
   if (name == NULL)
     return false;
 
-  for (i = 0; i < n; i++) 
+  for (i = 0; i < n; i++)
     {
       struct attrset *set = sets[i];
       if (index == 0)
@@ -171,11 +166,11 @@ delete_attribute (struct lexer *lexer, const char *dict_encoding,
       else
         {
           struct attribute *attr = attrset_lookup (set, name);
-          if (attr != NULL) 
+          if (attr != NULL)
             {
               attribute_del_value (attr, index - 1);
               if (attribute_get_n_values (attr) == 0)
-                attrset_delete (set, name); 
+                attrset_delete (set, name);
             }
         }
     }
@@ -186,10 +181,10 @@ delete_attribute (struct lexer *lexer, const char *dict_encoding,
 
 static enum cmd_result
 parse_attributes (struct lexer *lexer, const char *dict_encoding,
-                  struct attrset **sets, size_t n) 
+                  struct attrset **sets, size_t n)
 {
   enum { UNKNOWN, ADD, DELETE } command = UNKNOWN;
-  do 
+  do
     {
       if (lex_match_phrase (lexer, "ATTRIBUTE="))
         command = ADD;
@@ -197,7 +192,7 @@ parse_attributes (struct lexer *lexer, const char *dict_encoding,
         command = DELETE;
       else if (command == UNKNOWN)
         {
-          lex_error (lexer, _("expecting %s or %s"), "ATTRIBUTE=", "DELETE=");
+          lex_error_expecting (lexer, "ATTRIBUTE=", "DELETE=");
           return CMD_FAILURE;
         }