Fix parsing totals.
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 15 Jan 2022 06:08:52 +0000 (22:08 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Sat, 15 Jan 2022 06:08:52 +0000 (22:08 -0800)
src/language/stats/ctables.c

index a6de212483c92547f5ea5acd867d4322fe30e823..99efc09c5a2c339644b2981920fef47659d8f454 100644 (file)
@@ -901,7 +901,7 @@ ctables_axis_parse_postfix (struct ctables_axis_parse_ctx *ctx)
   if (!sub || !lex_match (ctx->lexer, T_LBRACK))
     return sub;
 
-  bool totals = false;
+  enum ctables_summary_variant sv = CSV_CELL;
   for (;;)
     {
       int start_ofs = lex_ofs (ctx->lexer);
@@ -950,23 +950,20 @@ ctables_axis_parse_postfix (struct ctables_axis_parse_ctx *ctx)
 
       struct msg_location *loc = lex_ofs_location (ctx->lexer, start_ofs,
                                                    lex_ofs (ctx->lexer) - 1);
-      add_summary_spec (sub, function, percentile, label, formatp, loc,
-                        totals);
+      add_summary_spec (sub, function, percentile, label, formatp, loc, sv);
       free (label);
       msg_location_destroy (loc);
 
-      if (lex_match (ctx->lexer, T_COMMA))
+      lex_match (ctx->lexer, T_COMMA);
+      if (sv == CSV_CELL && lex_match_id (ctx->lexer, "TOTALS"))
         {
-          if (!totals && lex_match_id (ctx->lexer, "TOTALS"))
-            {
-              if (!lex_force_match (ctx->lexer, T_LBRACK))
-                goto error;
-              totals = true;
-            }
+          if (!lex_force_match (ctx->lexer, T_LBRACK))
+            goto error;
+          sv = CSV_TOTAL;
         }
       else if (lex_force_match (ctx->lexer, T_RBRACK))
         {
-          if (totals && !lex_force_match (ctx->lexer, T_RBRACK))
+          if (sv == CSV_TOTAL && !lex_force_match (ctx->lexer, T_RBRACK))
             goto error;
           return sub;
         }