From 966f97ad7c92f559ae54d0214db90c370e3b48eb Mon Sep 17 00:00:00 2001
From: Kimplul <kimi.h.kuparinen@gmail.com>
Date: Fri, 26 Apr 2024 21:08:13 +0300
Subject: add check against proc calls as statements

---
 gen/gen_parser.c | 236 +++++++++++++++++++++++--------------------------------
 1 file changed, 100 insertions(+), 136 deletions(-)

(limited to 'gen')

diff --git a/gen/gen_parser.c b/gen/gen_parser.c
index 7d6e67d..1d07254 100644
--- a/gen/gen_parser.c
+++ b/gen/gen_parser.c
@@ -79,44 +79,8 @@
 #include <posthaste/date.h>
 #include <posthaste/ast.h>
 
-#define FOREACH_TOKEN(M) \
-	M(LPAREN)	\
-	M(RPAREN)	\
-	M(LSQUARE)	\
-	M(RSQUARE)	\
-	M(LCURLY)	\
-	M(RCURLY)	\
-	M(APOSTROPHE)	\
-	M(AMPERSAND)	\
-	M(COMMA)	\
-	M(DOT)		\
-	M(EQ)		\
-	M(LT)		\
-	M(PLUS)		\
-	M(MINUS)	\
-	M(MULT)		\
-	M(DIV)		\
-	M(VAR)		\
-	M(IS)		\
-	M(UNLESS)	\
-	M(OTHERWISE)	\
-	M(UNTIL)	\
-	M(DO)		\
-	M(DONE)		\
-	M(PROCEDURE)	\
-	M(FUNCTION)	\
-	M(RETURN)	\
-	M(PRINT)	\
-	M(END)		\
-	M(STRING)	\
-	M(DATE_LITERAL)	\
-	M(INT_LITERAL)	\
-	M(IDENT)	\
-	M(FUNC_IDENT)	\
-	M(PROC_IDENT)
-
-
-#line 120 "gen/gen_parser.c"
+
+#line 84 "gen/gen_parser.c"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -199,14 +163,14 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 60 "src/parser.y"
+#line 24 "src/parser.y"
 
 	struct ast *node;
 	ph_date_t num;
 	int64_t snum;
 	char *str;
 
-#line 210 "gen/gen_parser.c"
+#line 174 "gen/gen_parser.c"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -317,7 +281,7 @@ typedef enum yysymbol_kind_t yysymbol_kind_t;
 
 
 /* Second part of user prologue.  */
-#line 143 "src/parser.y"
+#line 107 "src/parser.y"
 
 
 /** Modifies the signature of yylex to fit our parser better. */
@@ -357,7 +321,7 @@ static void yyerror(YYLTYPE *yylloc, void *lexer,
 		struct parser *parser, const char *msg);
 
 
-#line 361 "gen/gen_parser.c"
+#line 325 "gen/gen_parser.c"
 
 
 #ifdef short
@@ -746,14 +710,14 @@ static const yytype_int8 yytranslate[] =
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   187,   187,   188,   191,   192,   195,   196,   197,   200,
-     205,   206,   209,   210,   213,   216,   217,   220,   232,   244,
-     245,   248,   249,   252,   257,   262,   263,   266,   267,   270,
-     275,   280,   281,   284,   285,   288,   291,   292,   295,   296,
-     299,   300,   301,   302,   303,   304,   307,   312,   315,   320,
-     321,   324,   329,   330,   333,   338,   339,   342,   347,   350,
-     353,   356,   357,   360,   363,   366,   367,   368,   371,   376,
-     381,   382,   385,   396
+       0,   151,   151,   152,   155,   156,   159,   160,   161,   164,
+     169,   170,   173,   174,   177,   180,   181,   184,   196,   208,
+     209,   212,   213,   216,   221,   226,   227,   230,   231,   234,
+     239,   244,   245,   248,   249,   252,   255,   256,   259,   260,
+     263,   264,   265,   266,   267,   268,   271,   276,   279,   284,
+     285,   288,   293,   294,   297,   302,   303,   306,   311,   314,
+     317,   320,   321,   324,   327,   330,   331,   332,   335,   340,
+     345,   346,   349,   360
 };
 #endif
 
@@ -1809,51 +1773,51 @@ yyreduce:
   switch (yyn)
     {
   case 2: /* statement_list: statement "," statement_list  */
-#line 187 "src/parser.y"
+#line 151 "src/parser.y"
                                        { (yyval.node) = (yyvsp[-2].node); (yyval.node)->n = (yyvsp[0].node); }
-#line 1815 "gen/gen_parser.c"
+#line 1779 "gen/gen_parser.c"
     break;
 
   case 4: /* definitions: definition definitions  */
-#line 191 "src/parser.y"
+#line 155 "src/parser.y"
                                  { (yyval.node) = (yyvsp[-1].node); (yyval.node)->n = (yyvsp[0].node); }
-#line 1821 "gen/gen_parser.c"
+#line 1785 "gen/gen_parser.c"
     break;
 
   case 9: /* variable_definition: "var" IDENT "=" expression  */
-#line 200 "src/parser.y"
+#line 164 "src/parser.y"
                                      {
 		(yyval.node) = gen_var_def((yyvsp[-2].str), (yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 1829 "gen/gen_parser.c"
+#line 1793 "gen/gen_parser.c"
     break;
 
   case 10: /* variable_definitions: variable_definition variable_definitions  */
-#line 205 "src/parser.y"
+#line 169 "src/parser.y"
                                                    { (yyval.node) = (yyvsp[-1].node); (yyval.node)->n = (yyvsp[0].node); }
-#line 1835 "gen/gen_parser.c"
+#line 1799 "gen/gen_parser.c"
     break;
 
   case 13: /* opt_variable_definitions: %empty  */
-#line 210 "src/parser.y"
+#line 174 "src/parser.y"
           { (yyval.node) = NULL; }
-#line 1841 "gen/gen_parser.c"
+#line 1805 "gen/gen_parser.c"
     break;
 
   case 14: /* return: "return" IDENT  */
-#line 213 "src/parser.y"
+#line 177 "src/parser.y"
                          { (yyval.str) = (yyvsp[0].str); }
-#line 1847 "gen/gen_parser.c"
+#line 1811 "gen/gen_parser.c"
     break;
 
   case 16: /* opt_return: %empty  */
-#line 217 "src/parser.y"
+#line 181 "src/parser.y"
           { (yyval.str) = NULL; }
-#line 1853 "gen/gen_parser.c"
+#line 1817 "gen/gen_parser.c"
     break;
 
   case 17: /* function_definition: "function" FUNC_IDENT "{" opt_formals "}" return opt_variable_definitions "is" rvalue "end" "function"  */
-#line 221 "src/parser.y"
+#line 185 "src/parser.y"
                                                                      {
 		struct ast *ret = gen_return((yyvsp[-2].node), (yyvsp[-2].node)->loc);
 		(yyval.node) = gen_func_def((yyvsp[-9].str),
@@ -1863,11 +1827,11 @@ yyreduce:
 				  ret,
 				  src_loc((yyloc)));
 	}
-#line 1867 "gen/gen_parser.c"
+#line 1831 "gen/gen_parser.c"
     break;
 
   case 18: /* procedure_definition: "procedure" PROC_IDENT "{" opt_formals "}" opt_return opt_variable_definitions "is" statement_list "end" "procedure"  */
-#line 234 "src/parser.y"
+#line 198 "src/parser.y"
                           {
 		(yyval.node) = gen_proc_def((yyvsp[-9].str),
 				(yyvsp[-5].str),
@@ -1876,237 +1840,237 @@ yyreduce:
 				(yyvsp[-2].node),
 				src_loc((yyloc)));
 	}
-#line 1880 "gen/gen_parser.c"
+#line 1844 "gen/gen_parser.c"
     break;
 
   case 19: /* formals: formal_arg "," formals  */
-#line 244 "src/parser.y"
+#line 208 "src/parser.y"
                                  { (yyval.node) = (yyvsp[-2].node); (yyval.node)->n = (yyvsp[0].node); }
-#line 1886 "gen/gen_parser.c"
+#line 1850 "gen/gen_parser.c"
     break;
 
   case 22: /* opt_formals: %empty  */
-#line 249 "src/parser.y"
+#line 213 "src/parser.y"
           { (yyval.node) = NULL; }
-#line 1892 "gen/gen_parser.c"
+#line 1856 "gen/gen_parser.c"
     break;
 
   case 23: /* formal_arg: IDENT "[" IDENT "]"  */
-#line 252 "src/parser.y"
+#line 216 "src/parser.y"
                               {
 		(yyval.node) = gen_formal_def((yyvsp[-3].str), (yyvsp[-1].str), src_loc((yyloc)));
 	}
-#line 1900 "gen/gen_parser.c"
+#line 1864 "gen/gen_parser.c"
     break;
 
   case 24: /* procedure_call: PROC_IDENT "(" opt_arguments ")"  */
-#line 257 "src/parser.y"
+#line 221 "src/parser.y"
                                            {
 		(yyval.node) = gen_proc_call((yyvsp[-3].str), (yyvsp[-1].node), src_loc((yyloc)));
 	}
-#line 1908 "gen/gen_parser.c"
+#line 1872 "gen/gen_parser.c"
     break;
 
   case 25: /* arguments: expression "," arguments  */
-#line 262 "src/parser.y"
+#line 226 "src/parser.y"
                                    { (yyval.node) = (yyvsp[-2].node); (yyval.node)->n = (yyvsp[0].node); }
-#line 1914 "gen/gen_parser.c"
+#line 1878 "gen/gen_parser.c"
     break;
 
   case 28: /* opt_arguments: %empty  */
-#line 267 "src/parser.y"
+#line 231 "src/parser.y"
           { (yyval.node) = NULL; }
-#line 1920 "gen/gen_parser.c"
+#line 1884 "gen/gen_parser.c"
     break;
 
   case 29: /* assignment: lvalue "=" rvalue  */
-#line 270 "src/parser.y"
+#line 234 "src/parser.y"
                             {
 		(yyval.node) = gen_assign((yyvsp[-2].node), (yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 1928 "gen/gen_parser.c"
+#line 1892 "gen/gen_parser.c"
     break;
 
   case 30: /* ident: IDENT  */
-#line 275 "src/parser.y"
+#line 239 "src/parser.y"
                 {
 		(yyval.node) = gen_id((yyvsp[0].str), src_loc((yyloc)));
 	}
-#line 1936 "gen/gen_parser.c"
+#line 1900 "gen/gen_parser.c"
     break;
 
   case 32: /* lvalue: ident "." IDENT  */
-#line 281 "src/parser.y"
+#line 245 "src/parser.y"
                           { (yyval.node) = gen_dot((yyvsp[-2].node), (yyvsp[0].str), src_loc((yyloc))); }
-#line 1942 "gen/gen_parser.c"
+#line 1906 "gen/gen_parser.c"
     break;
 
   case 35: /* print_statement: "print" print_items  */
-#line 288 "src/parser.y"
+#line 252 "src/parser.y"
                               { (yyval.node) = gen_print((yyvsp[0].node), src_loc((yyloc))); }
-#line 1948 "gen/gen_parser.c"
+#line 1912 "gen/gen_parser.c"
     break;
 
   case 36: /* print_items: print_item "&" print_items  */
-#line 291 "src/parser.y"
+#line 255 "src/parser.y"
                                      { (yyval.node) = (yyvsp[-2].node); (yyval.node)->n = (yyvsp[0].node); }
-#line 1954 "gen/gen_parser.c"
+#line 1918 "gen/gen_parser.c"
     break;
 
   case 38: /* print_item: STRING  */
-#line 295 "src/parser.y"
+#line 259 "src/parser.y"
                  { (yyval.node) = gen_const_string((yyvsp[0].str), src_loc((yyloc))); }
-#line 1960 "gen/gen_parser.c"
+#line 1924 "gen/gen_parser.c"
     break;
 
   case 45: /* statement: "return" expression  */
-#line 304 "src/parser.y"
+#line 268 "src/parser.y"
                               { (yyval.node) = gen_return((yyvsp[0].node), src_loc((yyloc))); }
-#line 1966 "gen/gen_parser.c"
+#line 1930 "gen/gen_parser.c"
     break;
 
   case 46: /* until_statement: "do" statement_list "until" expression  */
-#line 307 "src/parser.y"
+#line 271 "src/parser.y"
                                                  {
 		(yyval.node) = gen_until((yyvsp[-2].node), (yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 1974 "gen/gen_parser.c"
+#line 1938 "gen/gen_parser.c"
     break;
 
   case 47: /* unless_statement: "do" statement_list "unless" expression "done"  */
-#line 312 "src/parser.y"
+#line 276 "src/parser.y"
                                                          {
 		(yyval.node) = gen_unless((yyvsp[-3].node), (yyvsp[-1].node), NULL, src_loc((yyloc)));
 	}
-#line 1982 "gen/gen_parser.c"
+#line 1946 "gen/gen_parser.c"
     break;
 
   case 48: /* unless_statement: "do" statement_list "unless" expression "otherwise" statement_list "done"  */
-#line 315 "src/parser.y"
+#line 279 "src/parser.y"
                                                                                     {
 		(yyval.node) = gen_unless((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node), src_loc((yyloc)));
 	}
-#line 1990 "gen/gen_parser.c"
+#line 1954 "gen/gen_parser.c"
     break;
 
   case 50: /* expression: expression "=" simple_expr  */
-#line 321 "src/parser.y"
+#line 285 "src/parser.y"
                                      {
 		(yyval.node) = gen_eq((yyvsp[-2].node), (yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 1998 "gen/gen_parser.c"
+#line 1962 "gen/gen_parser.c"
     break;
 
   case 51: /* expression: expression "<" simple_expr  */
-#line 324 "src/parser.y"
+#line 288 "src/parser.y"
                                      {
 		(yyval.node) = gen_lt((yyvsp[-2].node), (yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 2006 "gen/gen_parser.c"
+#line 1970 "gen/gen_parser.c"
     break;
 
   case 53: /* simple_expr: simple_expr "+" term  */
-#line 330 "src/parser.y"
+#line 294 "src/parser.y"
                                {
 		(yyval.node) = gen_add((yyvsp[-2].node), (yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 2014 "gen/gen_parser.c"
+#line 1978 "gen/gen_parser.c"
     break;
 
   case 54: /* simple_expr: simple_expr "-" term  */
-#line 333 "src/parser.y"
+#line 297 "src/parser.y"
                                {
 		(yyval.node) = gen_sub((yyvsp[-2].node), (yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 2022 "gen/gen_parser.c"
+#line 1986 "gen/gen_parser.c"
     break;
 
   case 56: /* term: term "*" factor  */
-#line 339 "src/parser.y"
+#line 303 "src/parser.y"
                           {
 		(yyval.node) = gen_mul((yyvsp[-2].node), (yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 2030 "gen/gen_parser.c"
+#line 1994 "gen/gen_parser.c"
     break;
 
   case 57: /* term: term "/" factor  */
-#line 342 "src/parser.y"
+#line 306 "src/parser.y"
                           {
 		(yyval.node) = gen_div((yyvsp[-2].node), (yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 2038 "gen/gen_parser.c"
+#line 2002 "gen/gen_parser.c"
     break;
 
   case 58: /* factor: "+" atom  */
-#line 347 "src/parser.y"
+#line 311 "src/parser.y"
                    {
 		(yyval.node) = gen_pos((yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 2046 "gen/gen_parser.c"
+#line 2010 "gen/gen_parser.c"
     break;
 
   case 59: /* factor: "-" atom  */
-#line 350 "src/parser.y"
+#line 314 "src/parser.y"
                    {
 		(yyval.node) = gen_neg((yyvsp[0].node), src_loc((yyloc)));
 	}
-#line 2054 "gen/gen_parser.c"
+#line 2018 "gen/gen_parser.c"
     break;
 
   case 62: /* atom: ident "'" IDENT  */
-#line 357 "src/parser.y"
+#line 321 "src/parser.y"
                           {
 		(yyval.node) = gen_attr((yyvsp[-2].node), (yyvsp[0].str), src_loc((yyloc)));
 	}
-#line 2062 "gen/gen_parser.c"
+#line 2026 "gen/gen_parser.c"
     break;
 
   case 63: /* atom: INT_LITERAL  */
-#line 360 "src/parser.y"
+#line 324 "src/parser.y"
                       {
 		(yyval.node) = gen_const_int((yyvsp[0].snum), src_loc((yyloc)));
 	}
-#line 2070 "gen/gen_parser.c"
+#line 2034 "gen/gen_parser.c"
     break;
 
   case 64: /* atom: DATE_LITERAL  */
-#line 363 "src/parser.y"
+#line 327 "src/parser.y"
                        {
 		(yyval.node) = gen_const_date((yyvsp[0].num), src_loc((yyloc)));
 	}
-#line 2078 "gen/gen_parser.c"
+#line 2042 "gen/gen_parser.c"
     break;
 
   case 67: /* atom: "(" expression ")"  */
-#line 368 "src/parser.y"
+#line 332 "src/parser.y"
                              { (yyval.node) = (yyvsp[-1].node); }
-#line 2084 "gen/gen_parser.c"
+#line 2048 "gen/gen_parser.c"
     break;
 
   case 68: /* function_call: FUNC_IDENT "(" opt_arguments ")"  */
-#line 371 "src/parser.y"
+#line 335 "src/parser.y"
                                            {
 		(yyval.node) = gen_func_call((yyvsp[-3].str), (yyvsp[-1].node), src_loc((yyloc)));
 	}
-#line 2092 "gen/gen_parser.c"
+#line 2056 "gen/gen_parser.c"
     break;
 
   case 69: /* unless_expression: "do" expression "unless" expression "otherwise" expression "done"  */
-#line 376 "src/parser.y"
+#line 340 "src/parser.y"
                                                                             {
 		(yyval.node) = gen_unless_expr((yyvsp[-5].node), (yyvsp[-3].node), (yyvsp[-1].node), src_loc((yyloc)));
 	}
-#line 2100 "gen/gen_parser.c"
+#line 2064 "gen/gen_parser.c"
     break;
 
   case 71: /* opt_definitions: %empty  */
-#line 382 "src/parser.y"
+#line 346 "src/parser.y"
           { (yyval.node) = NULL; }
-#line 2106 "gen/gen_parser.c"
+#line 2070 "gen/gen_parser.c"
     break;
 
   case 72: /* program: opt_definitions statement_list  */
-#line 385 "src/parser.y"
+#line 349 "src/parser.y"
                                          {
 		if ((yyvsp[-1].node)) {
 			ast_last((yyvsp[-1].node))->n = (yyvsp[0].node);
@@ -2118,20 +2082,20 @@ yyreduce:
 
 		parser->tree = (yyval.node);
 	}
-#line 2122 "gen/gen_parser.c"
+#line 2086 "gen/gen_parser.c"
     break;
 
   case 73: /* program: error  */
-#line 396 "src/parser.y"
+#line 360 "src/parser.y"
                 {
 		/* make sure to catch parse errors */
 		parser->failed = true;
 	}
-#line 2131 "gen/gen_parser.c"
+#line 2095 "gen/gen_parser.c"
     break;
 
 
-#line 2135 "gen/gen_parser.c"
+#line 2099 "gen/gen_parser.c"
 
       default: break;
     }
@@ -2360,7 +2324,7 @@ yyreturnlab:
   return yyresult;
 }
 
-#line 401 "src/parser.y"
+#line 365 "src/parser.y"
 
 
 #include "gen_lexer.inc"
-- 
cgit v1.2.3