@@ -288,11 +288,9 @@ void yyerror(YYLTYPE *yyloc, LFortran::Parser &p, const std::string &msg)
288
288
%type <ast> var_decl
289
289
%type <decl> var_sym_decl
290
290
%type <vec_dim> array_comp_decl_list
291
- %type <dim> fnarray_arg
292
- %type <vec_dim> fnarray_arg_list
293
- %type <vec_dim> fnarray_arg_list_opt
291
+ %type <fnarg> fnarray_arg
292
+ %type <vec_fnarg> fnarray_arg_list_opt
294
293
%type <dim> array_comp_decl
295
- %type <dim> array_comp_call
296
294
%type <var_type> var_type
297
295
%type <ast> fn_mod
298
296
%type <vec_ast> fn_mod_plus
@@ -861,27 +859,13 @@ array_comp_decl_list
861
859
;
862
860
863
861
array_comp_decl
864
- : expr { $$ = ARRAY_COMP_DECL1($1, @$); }
865
- | expr ":" expr { $$ = ARRAY_COMP_DECL2($1, $3, @$); }
866
- | expr ":" { $$ = ARRAY_COMP_DECL3($1, @$); }
867
- | ":" expr { $$ = ARRAY_COMP_DECL4($2, @$); }
868
- | ":" { $$ = ARRAY_COMP_DECL5(@$); }
869
- | "*" { $$ = ARRAY_COMP_DECL5(@$); } // TODO
870
- | expr ":" "*" { $$ = ARRAY_COMP_DECL5(@$); } // TODO
871
- ;
872
-
873
- array_comp_call
874
- : expr { $$ = ARRAY_COMP_DECL1($1, @$); }
875
- | expr ":" expr { $$ = ARRAY_COMP_DECL2($1, $3, @$); }
876
- | expr ":" { $$ = ARRAY_COMP_DECL3($1, @$); }
877
- | ":" expr { $$ = ARRAY_COMP_DECL4($2, @$); }
878
- | ":" { $$ = ARRAY_COMP_DECL5(@$); }
879
- | expr ":" expr ":" expr { $$ = ARRAY_COMP_DECL2($1, $3, @$); } // TODO
880
- | expr "::" expr { $$ = ARRAY_COMP_DECL3($1, @$); } // TODO
881
- | expr ":" ":" expr { $$ = ARRAY_COMP_DECL3($1, @$); } // TODO
882
- | ":" expr ":" expr { $$ = ARRAY_COMP_DECL4($2, @$); } // TODO
883
- | "::" expr { $$ = ARRAY_COMP_DECL5(@$); } // TODO
884
- | ":" ":" expr { $$ = ARRAY_COMP_DECL5(@$); } // TODO
862
+ : expr { $$ = ARRAY_COMP_DECL1d($1, @$); }
863
+ | expr ":" expr { $$ = ARRAY_COMP_DECL2d($1, $3, @$); }
864
+ | expr ":" { $$ = ARRAY_COMP_DECL3d($1, @$); }
865
+ | ":" expr { $$ = ARRAY_COMP_DECL4d($2, @$); }
866
+ | ":" { $$ = ARRAY_COMP_DECL5d(@$); }
867
+ | "*" { $$ = ARRAY_COMP_DECL5d(@$); } // TODO
868
+ | expr ":" "*" { $$ = ARRAY_COMP_DECL5d(@$); } // TODO
885
869
;
886
870
887
871
@@ -1362,21 +1346,27 @@ struct_member
1362
1346
;
1363
1347
1364
1348
fnarray_arg_list_opt
1365
- : fnarray_arg_list
1349
+ : fnarray_arg_list_opt "," fnarray_arg { $$ = $1; PLIST_ADD($$, $3); }
1350
+ | fnarray_arg { LIST_NEW($$); PLIST_ADD($$, $1); }
1366
1351
| %empty { LIST_NEW($$); }
1367
1352
;
1368
1353
1369
- fnarray_arg_list
1370
- : fnarray_arg_list "," fnarray_arg {$$ = $1; LIST_ADD($$, $3); }
1371
- | fnarray_arg { LIST_NEW($$); LIST_ADD($$, $1); }
1372
- ;
1373
-
1374
1354
fnarray_arg
1375
- : array_comp_call
1376
- // TODO: extend "dim" to also include the keyword argument "id"
1377
- // This can be done by adding a flag "keyword",
1378
- // and encoding start=id, end=expr
1379
- | id "=" expr { $$ = ARRAY_COMP_DECL1($3, @$); }
1355
+ // array element / function argument
1356
+ : expr { $$ = ARRAY_COMP_DECL_0i0($1, @$); }
1357
+ // array section
1358
+ | ":" { $$ = ARRAY_COMP_DECL_001(@$); }
1359
+ | expr ":" { $$ = ARRAY_COMP_DECL_a01($1, @$); }
1360
+ | ":" expr { $$ = ARRAY_COMP_DECL_0b1($2, @$); }
1361
+ | expr ":" expr { $$ = ARRAY_COMP_DECL_ab1($1, $3, @$); }
1362
+ | "::" expr { $$ = ARRAY_COMP_DECL_00c($2, @$); }
1363
+ | ":" ":" expr { $$ = ARRAY_COMP_DECL_00c($3, @$); }
1364
+ | expr "::" expr { $$ = ARRAY_COMP_DECL_a0c($1, $3, @$); }
1365
+ | expr ":" ":" expr { $$ = ARRAY_COMP_DECL_a0c($1, $4, @$); }
1366
+ | ":" expr ":" expr { $$ = ARRAY_COMP_DECL_0bc($2, $4, @$); }
1367
+ | expr ":" expr ":" expr { $$ = ARRAY_COMP_DECL_abc($1, $3, $5, @$); }
1368
+ // keyword function argument
1369
+ | id "=" expr { $$ = ARRAY_COMP_DECL1k($1, $3, @$); }
1380
1370
;
1381
1371
1382
1372
id_list_opt
0 commit comments