macro: Continue expanding macro even in face of errors in call.
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 24 Jul 2021 06:17:48 +0000 (23:17 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sat, 24 Jul 2021 06:30:38 +0000 (23:30 -0700)
In practice, it was more confusing not to expand it than to expand it.

src/language/lexer/macro.c
tests/language/control/define.at

index 270cae50fabf9c586898eebad17e9adbad0e015e..977436a6041b32a7dc39f31d57daebc7262ceb9b 100644 (file)
@@ -498,9 +498,6 @@ macro_set_add (struct macro_set *set, struct macro *m)
 
 enum mc_state
   {
-    /* Error state. */
-    MC_ERROR,
-
     /* Accumulating tokens in mc->params toward the end of any type of
        argument. */
     MC_ARG,
@@ -696,20 +693,19 @@ mc_expected (struct macro_call *mc, const struct macro_token *actual,
             mc->param->name, mc->macro->name);
   free (expected_s);
 
-  mc->state = MC_ERROR;
-  return -1;
+  return mc_finished (mc);
 }
 
 static int
 mc_enclose (struct macro_call *mc, const struct macro_token *mt,
             const struct msg_location *loc)
 {
-  mc->n_tokens++;
-
   const struct token *token = &mt->token;
   const struct macro_param *p = mc->param;
   if (token_equal (&p->start, token))
     {
+      mc->n_tokens++;
+
       struct macro_tokens **argp = &mc->args[p - mc->macro->params];
       *argp = xzalloc (sizeof **argp);
       mc->state = MC_ARG;
@@ -754,13 +750,9 @@ mc_keyword (struct macro_call *mc, const struct macro_token *mt,
     {
       struct macro_tokens **argp = &mc->args[p - mc->macro->params];
       if (*argp)
-        {
-          mc_error (mc, loc,
-                    _("Argument %s multiply specified in call to macro %s."),
-                    p->name, mc->macro->name);
-          mc->state = MC_ERROR;
-          return -1;
-        }
+        mc_error (mc, loc,
+                  _("Argument %s multiply specified in call to macro %s."),
+                  p->name, mc->macro->name);
 
       *argp = xzalloc (sizeof **argp);
       mc->param = p;
@@ -776,11 +768,9 @@ static int
 mc_equals (struct macro_call *mc, const struct macro_token *mt,
            const struct msg_location *loc)
 {
-  const struct token *token = &mt->token;
-  mc->n_tokens++;
-
-  if (token->type == T_EQUALS)
+  if (mt->token.type == T_EQUALS)
     {
+      mc->n_tokens++;
       mc->state = mc->param->arg_type == ARG_ENCLOSE ? MC_ENCLOSE : MC_ARG;
       return 0;
     }
@@ -879,9 +869,6 @@ macro_call_add (struct macro_call *mc, const struct macro_token *mt,
 {
   switch (mc->state)
     {
-    case MC_ERROR:
-      return -1;
-
     case MC_ARG:
       return mc_add_arg (mc, mt, loc);
 
index 876d650130185e96b368c5da985747b5d9d36120..3c940c151380149e252bb4a7af7c17884f90b6f2 100644 (file)
@@ -505,9 +505,7 @@ AT_CHECK([pspp --testing-mode define.sps], [1], [dnl
 define.sps:3.8: error: DEBUG EXPAND: Found `.' while expecting `=' reading
 argument !arg1 to macro !k.
 
-note: unexpanded token "!k"
-
-note: unexpanded token "arg1"
+k( )
 
 define.sps:4.9: error: DEBUG EXPAND: Reached end of command expecting 1 more
 token in argument !arg1 to macro !k.
@@ -559,9 +557,7 @@ AT_CHECK([pspp --testing-mode define.sps], [1], [dnl
 define.sps:6.8: error: DEBUG EXPAND: Found `.' while expecting `=' reading
 argument !arg1 to macro !k.
 
-note: unexpanded token "!k"
-
-note: unexpanded token "arg1"
+k(, )
 
 define.sps:7.9: error: DEBUG EXPAND: Reached end of command expecting "/" in
 argument !arg1 to macro !k.
@@ -627,27 +623,17 @@ AT_CHECK([pspp --testing-mode define.sps], [1], [dnl
 define.sps:6.8: error: DEBUG EXPAND: Found `.' while expecting `=' reading
 argument !arg1 to macro !k.
 
-note: unexpanded token "!k"
-
-note: unexpanded token "arg1"
+k(, )
 
 define.sps:7.9: error: DEBUG EXPAND: Found `.' while expecting `@{:@' reading
 argument !arg1 to macro !k.
 
-note: unexpanded token "!k"
-
-note: unexpanded token "arg1"
-
-note: unexpanded token "="
+k(, )
 
 define.sps:8.9: error: DEBUG EXPAND: Found `x' while expecting `@{:@' reading
 argument !arg1 to macro !k.
 
-note: unexpanded token "!k"
-
-note: unexpanded token "arg1"
-
-note: unexpanded token "="
+k(, )
 
 note: unexpanded token "x"
 
@@ -659,78 +645,24 @@ k(x, )
 define.sps:10.17: error: DEBUG EXPAND: Found `.' while expecting `=' reading
 argument !arg2 to macro !k.
 
-note: unexpanded token "!k"
-
-note: unexpanded token "arg1"
-
-note: unexpanded token "="
-
-note: unexpanded token "@{:@"
-
-note: unexpanded token "x"
-
-note: unexpanded token "@:}@"
-
-note: unexpanded token "arg2"
+k(x, )
 
 define.sps:11.18: error: DEBUG EXPAND: Found `.' while expecting `{' reading
 argument !arg2 to macro !k.
 
-note: unexpanded token "!k"
-
-note: unexpanded token "arg1"
-
-note: unexpanded token "="
-
-note: unexpanded token "@{:@"
-
-note: unexpanded token "x"
-
-note: unexpanded token "@:}@"
-
-note: unexpanded token "arg2"
-
-note: unexpanded token "="
+k(x, )
 
 define.sps:12.18: error: DEBUG EXPAND: Found `y' while expecting `{' reading
 argument !arg2 to macro !k.
 
-note: unexpanded token "!k"
-
-note: unexpanded token "arg1"
-
-note: unexpanded token "="
-
-note: unexpanded token "@{:@"
-
-note: unexpanded token "x"
-
-note: unexpanded token "@:}@"
-
-note: unexpanded token "arg2"
-
-note: unexpanded token "="
+k(x, )
 
 note: unexpanded token "y"
 
 define.sps:13.18: error: DEBUG EXPAND: Found `@{:@' while expecting `{' reading
 argument !arg2 to macro !k.
 
-note: unexpanded token "!k"
-
-note: unexpanded token "arg1"
-
-note: unexpanded token "="
-
-note: unexpanded token "@{:@"
-
-note: unexpanded token "x"
-
-note: unexpanded token "@:}@"
-
-note: unexpanded token "arg2"
-
-note: unexpanded token "="
+k(x, )
 
 note: unexpanded token "@{:@"