+ 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,
+ parsing proceeds in two phases: first, the variables are parsed in a vector
+ of "struct var_syntax"; second, when the dictionary becomes available, the
+ structs are turned into "struct variable"s. */
+
+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);