table: Drop support for -1 as style to table_hline(), table_vline().
[pspp] / src / language / lexer / variable-parser.h
index 5ccb7b3d7f2d2bc1533cb525cdcd25c6f6447802..8fd4824671e8062aa1e33fea6b3453bf79cea6e9 100644 (file)
@@ -31,7 +31,7 @@ struct var_set *var_set_create_from_dict (const struct dictionary *d);
 struct var_set *var_set_create_from_array (struct variable *const *var,
                                            size_t);
 
-size_t var_set_get_cnt (const struct var_set *vs);
+size_t var_set_get_n (const struct var_set *vs);
 
 void var_set_destroy (struct var_set *vs);
 
@@ -40,16 +40,16 @@ void var_set_destroy (struct var_set *vs);
 
 enum
   {
-    PV_NONE = 0,               /* No options. */
-    PV_SINGLE = 0001,          /* Restrict to a single name or TO use. */
-    PV_DUPLICATE = 0002,       /* Don't merge duplicates. */
-    PV_APPEND = 0004,          /* Append to existing list. */
-    PV_NO_DUPLICATE = 0010,    /* Error on duplicates. */
-    PV_NUMERIC = 0020,         /* Vars must be numeric. */
-    PV_STRING = 0040,          /* Vars must be string. */
-    PV_SAME_TYPE = 00100,      /* All vars must be the same type. */
-    PV_SAME_WIDTH = 00200,     /* All vars must be the same type and width. */
-    PV_NO_SCRATCH = 00400      /* Disallow scratch variables. */
+    PV_NONE = 0,                /* No options. */
+    PV_SINGLE = 1 << 0,         /* Restrict to a single name or TO use. */
+    PV_DUPLICATE = 1 << 1,      /* Don't merge duplicates. */
+    PV_APPEND = 1 << 2,         /* Append to existing list. */
+    PV_NO_DUPLICATE = 1 << 3,   /* Error on duplicates. */
+    PV_NUMERIC = 1 << 4,        /* Vars must be numeric. */
+    PV_STRING = 1 << 5,         /* Vars must be string. */
+    PV_SAME_TYPE = 1 << 6,      /* All vars must be the same type. */
+    PV_SAME_WIDTH = 1 << 7,     /* All vars must be the same type and width. */
+    PV_NO_SCRATCH = 1 << 8,     /* Disallow scratch variables. */
   };
 
 struct variable *parse_variable (struct lexer *, const struct dictionary *);
@@ -62,15 +62,15 @@ bool parse_var_set_vars (struct lexer *, const struct var_set *, struct variable
 
 char *parse_DATA_LIST_var (struct lexer *, const struct dictionary *);
 bool parse_DATA_LIST_vars (struct lexer *, const struct dictionary *,
-                           char ***names, size_t *cnt, int opts);
+                           char ***names, size_t *n, int opts);
 bool parse_DATA_LIST_vars_pool (struct lexer *, const struct dictionary *,
                                 struct pool *,
-                                char ***names, size_t *cnt, int opts);
+                                char ***names, size_t *n, int opts);
 bool parse_mixed_vars (struct lexer *, const struct dictionary *dict,
-                      char ***names, size_t *cnt, int opts);
+                      char ***names, size_t *n, int opts);
 bool parse_mixed_vars_pool (struct lexer *, const struct dictionary *dict,
                            struct pool *,
-                           char ***names, size_t *cnt, int opts);
+                           char ***names, size_t *n, int opts);
 \f
 /* This variable parser supports the unusual situation where set of variables
    has to be parsed before the associated dictionary is available.  Thus,
@@ -82,11 +82,20 @@ struct var_syntax
   {
     char *first;                /* Always nonnull. */
     char *last;                 /* Nonnull for var ranges (e.g. "a TO b"). */
+
+    /* For error reporting.
+
+      This only works if var_syntax_parse() and var_syntax_evaluate() are
+      called while we're parsing the same source file.  That matches the
+      current use case in MATRIX; if that changes, then this will need to
+      switch to use struct msg_location instead. */
+    int first_ofs;
+    int last_ofs;
   };
 void var_syntax_destroy (struct var_syntax *, size_t n);
 
 bool var_syntax_parse (struct lexer *, struct var_syntax **, size_t *);
-bool var_syntax_evaluate (const struct var_syntax *, size_t,
+bool var_syntax_evaluate (struct lexer *, const struct var_syntax *, size_t,
                           const struct dictionary *,
                           struct variable ***, size_t *, int opts);
 
@@ -150,16 +159,4 @@ const_var_set_destroy (struct const_var_set *vs)
 bool
 lex_match_variable (struct lexer *lexer, const struct dictionary *dict, const struct variable **var);
 
-struct interaction;
-
-/* Parse an interaction.
-   If not successful return false.
-   Otherwise, a newly created interaction will be placed in IACT.
-   It is the caller's responsibility to destroy this interaction.
- */
-bool
-parse_design_interaction (struct lexer *lexer, const struct dictionary *dict, struct interaction **iact);
-
-
-
 #endif /* variable-parser.h */