@@ -180,6 +180,7 @@ void yyerror(YYLTYPE *yyloc, LFortran::Parser &p, const std::string &msg)
180
180
%type <ast> id
181
181
%type <ast> expr
182
182
%type <vec_ast> expr_list
183
+ %type <vec_ast> func_call_expr_list
183
184
%type <vec_ast> expr_list_opt
184
185
%type <ast> tuple_list
185
186
%type <ast> statement
@@ -314,6 +315,7 @@ statements
314
315
315
316
sep_statements
316
317
: sep statements { $$ = $2; }
318
+ | type_ignore_sep statements { $$ = $2; }
317
319
;
318
320
319
321
body_stmts
@@ -345,10 +347,17 @@ single_line_multi_statements_opt
345
347
| single_line_statement ";" { LIST_NEW($$); LIST_ADD($$, $1); }
346
348
;
347
349
350
+ type_ignore_sep
351
+ : TK_TYPE_IGNORE sep { extract_type_comment(p, @$, $1); }
352
+ | sep TK_TYPE_IGNORE sep { extract_type_comment(p, @$, $2); }
353
+ ;
354
+
348
355
statement
349
356
: single_line_statement sep { $$ = $1; }
357
+ | single_line_statement type_ignore_sep { $$ = $1; }
350
358
| multi_line_statement
351
359
| multi_line_statement sep { $$ = $1; }
360
+ | multi_line_statement type_ignore_sep { $$ = $1; }
352
361
;
353
362
354
363
single_line_statement
@@ -419,7 +428,8 @@ target_list
419
428
420
429
assignment_statement
421
430
: target_list tuple_list { $$ = ASSIGNMENT($1, $2, @$); }
422
- | target_list expr type_comment { $$ = ASSIGNMENT2($1, $2, $3, @$); }
431
+ | target_list tuple_list TK_TYPE_COMMENT {
432
+ $$ = ASSIGNMENT2($1, $2, $3, @$); }
423
433
;
424
434
425
435
augassign_statement
@@ -469,6 +479,8 @@ module_as_id
469
479
470
480
module_item_list
471
481
: module_item_list "," module_as_id { $$ = $1; PLIST_ADD($$, $3); }
482
+ | module_item_list "," TK_TYPE_IGNORE module_as_id { $$ = $1;
483
+ PLIST_ADD($$, $4); extract_type_comment(p, @$, $3); }
472
484
| module_as_id { LIST_NEW($$); PLIST_ADD($$, $1); }
473
485
;
474
486
@@ -479,22 +491,26 @@ dot_list
479
491
| "..." { DOT_COUNT_02(); }
480
492
;
481
493
494
+ type_ignore_opt
495
+ : TK_TYPE_IGNORE { extract_type_comment(p, @$, $1); }
496
+ | "," TK_TYPE_IGNORE { extract_type_comment(p, @$, $2); }
497
+ | comma_opt
498
+ ;
499
+
482
500
import_statement
483
501
: KW_IMPORT module_item_list { $$ = IMPORT_01($2, @$); }
484
- | KW_IMPORT module_item_list TK_TYPE_IGNORE { $$ = IMPORT_01($2, @$);
485
- extract_type_comment(p, @$, $3); }
486
502
| KW_FROM module KW_IMPORT module_item_list {
487
503
$$ = IMPORT_02($2, $4, @$); }
488
- | KW_FROM module KW_IMPORT "(" module_item_list comma_opt ")" {
504
+ | KW_FROM module KW_IMPORT "(" module_item_list type_ignore_opt ")" {
489
505
$$ = IMPORT_02($2, $5, @$); }
490
506
| KW_FROM dot_list KW_IMPORT module_item_list {
491
507
$$ = IMPORT_03($4, @$); }
492
508
| KW_FROM dot_list module KW_IMPORT module_item_list {
493
509
$$ = IMPORT_04($3, $5, @$); }
494
- | KW_FROM dot_list KW_IMPORT "(" module_item_list comma_opt ")" {
510
+ | KW_FROM dot_list KW_IMPORT "(" module_item_list type_ignore_opt ")" {
495
511
$$ = IMPORT_03($5, @$); }
496
- | KW_FROM dot_list module KW_IMPORT "(" module_item_list comma_opt ")" {
497
- $$ = IMPORT_04($3, $6, @$); }
512
+ | KW_FROM dot_list module KW_IMPORT "(" module_item_list type_ignore_opt ")"
513
+ { $$ = IMPORT_04($3, $6, @$); }
498
514
;
499
515
500
516
global_statement
@@ -542,9 +558,9 @@ for_statement
542
558
$$ = FOR_01($2, $4, $6, @$); }
543
559
| KW_FOR for_target_list KW_IN tuple_list ":" body_stmts KW_ELSE ":"
544
560
body_stmts { $$ = FOR_02($2, $4, $6, $9, @$); }
545
- | KW_FOR for_target_list KW_IN tuple_list ":" type_comment TK_NEWLINE
561
+ | KW_FOR for_target_list KW_IN tuple_list ":" TK_TYPE_COMMENT sep
546
562
statements { $$ = FOR_03($2, $4, $6, $8, @$); }
547
- | KW_FOR for_target_list KW_IN tuple_list ":" type_comment TK_NEWLINE
563
+ | KW_FOR for_target_list KW_IN tuple_list ":" TK_TYPE_COMMENT sep
548
564
statements KW_ELSE ":" body_stmts {
549
565
$$ = FOR_04($2, $4, $8, $11, $6, @$); }
550
566
;
@@ -591,10 +607,10 @@ with_as_items
591
607
with_statement
592
608
: KW_WITH expr_list ":" body_stmts { $$ = WITH($2, $4, @$); }
593
609
| KW_WITH with_as_items ":" body_stmts { $$ = WITH_02($2, $4, @$); }
594
- | KW_WITH expr_list ":" type_comment TK_NEWLINE
595
- statements { $$ = WITH_01($2, $6, $4, @$); }
596
- | KW_WITH with_as_items ":" type_comment TK_NEWLINE
597
- statements { $$ = WITH_03($2, $6, $4, @$); }
610
+ | KW_WITH expr_list ":" TK_TYPE_COMMENT sep statements {
611
+ $$ = WITH_01($2, $6, $4, @$); }
612
+ | KW_WITH with_as_items ":" TK_TYPE_COMMENT sep statements {
613
+ $$ = WITH_03($2, $6, $4, @$); }
598
614
;
599
615
600
616
decorators_opt
@@ -605,13 +621,9 @@ decorators_opt
605
621
decorators
606
622
: decorators "@" expr sep { $$ = $1; LIST_ADD($$, $3); }
607
623
| "@" expr sep { LIST_NEW($$); LIST_ADD($$, $2); }
608
- | decorators "@" expr TK_TYPE_IGNORE TK_NEWLINE { $$ = $1;
609
- LIST_ADD($$, $3); extract_type_comment(p, @$, $4); }
610
- | "@" expr TK_TYPE_IGNORE TK_NEWLINE { LIST_NEW($$); LIST_ADD($$, $2);
611
- extract_type_comment(p, @$, $3); }
612
- | decorators "@" expr TK_TYPE_IGNORE TK_NEWLINE sep { $$ = $1;
624
+ | decorators "@" expr TK_TYPE_IGNORE sep { $$ = $1;
613
625
LIST_ADD($$, $3); extract_type_comment(p, @$, $4); }
614
- | "@" expr TK_TYPE_IGNORE TK_NEWLINE sep { LIST_NEW($$); LIST_ADD($$, $2);
626
+ | "@" expr TK_TYPE_IGNORE sep { LIST_NEW($$); LIST_ADD($$, $2);
615
627
extract_type_comment(p, @$, $3); }
616
628
;
617
629
@@ -677,16 +689,16 @@ function_def
677
689
| decorators_opt KW_DEF id "(" parameter_list_opt ")" "->" expr ":"
678
690
body_stmts { $$ = FUNCTION_02($1, $3, $5, $8, $10, @$); }
679
691
| decorators_opt KW_DEF id "(" parameter_list_opt ")" ":"
680
- type_comment TK_NEWLINE statements {
692
+ TK_TYPE_COMMENT sep statements {
681
693
$$ = FUNCTION_03($1, $3, $5, $10, $8, @$); }
682
694
| decorators_opt KW_DEF id "(" parameter_list_opt ")" "->" expr ":"
683
- type_comment TK_NEWLINE statements {
695
+ TK_TYPE_COMMENT sep statements {
684
696
$$ = FUNCTION_04($1, $3, $5, $8, $12, $10, @$); }
685
697
| decorators_opt KW_DEF id "(" parameter_list_opt ")" ":"
686
- TK_NEWLINE type_comment TK_NEWLINE statements {
698
+ sep TK_TYPE_COMMENT sep statements {
687
699
$$ = FUNCTION_03($1, $3, $5, $11, $9, @$); }
688
700
| decorators_opt KW_DEF id "(" parameter_list_opt ")" "->" expr ":"
689
- TK_NEWLINE type_comment TK_NEWLINE statements {
701
+ sep TK_TYPE_COMMENT sep statements {
690
702
$$ = FUNCTION_04($1, $3, $5, $8, $13, $11, @$); }
691
703
;
692
704
@@ -701,18 +713,6 @@ class_def
701
713
":" body_stmts { $$ = CLASS_03($1, $3, $7, $5, $10, @$); }
702
714
| decorators_opt KW_CLASS id "(" keyword_items ")" ":" body_stmts {
703
715
$$ = CLASS_04($1, $3, $5, $8, @$); }
704
- | decorators_opt KW_CLASS id "(" expr_list_opt ")" ":"
705
- type_comment TK_NEWLINE statements {
706
- $$ = CLASS_05($1, $3, $5, $8, $10, @$); }
707
- | decorators_opt KW_CLASS id "(" expr_list "," keyword_items ")"
708
- ":" type_comment TK_NEWLINE statements {
709
- $$ = CLASS_06($1, $3, $5, $7, $10, $12, @$); }
710
- | decorators_opt KW_CLASS id "(" keyword_items "," expr_list ")"
711
- ":" type_comment TK_NEWLINE statements {
712
- $$ = CLASS_06($1, $3, $7, $5, $10, $12, @$); }
713
- | decorators_opt KW_CLASS id "(" keyword_items ")" ":"
714
- type_comment TK_NEWLINE statements {
715
- $$ = CLASS_07($1, $3, $5, $8, $10, @$); }
716
716
;
717
717
718
718
async_func_def
@@ -725,16 +725,16 @@ async_func_def
725
725
| KW_ASYNC KW_DEF id "(" parameter_list_opt ")" "->" expr ":"
726
726
body_stmts { $$ = ASYNC_FUNCTION_04($3, $5, $8, $10, @$); }
727
727
| decorators KW_ASYNC KW_DEF id "(" parameter_list_opt ")" ":"
728
- type_comment TK_NEWLINE statements {
728
+ TK_TYPE_COMMENT sep statements {
729
729
$$ = ASYNC_FUNCTION_05($1, $4, $6, $11, $9, @$); }
730
730
| decorators KW_ASYNC KW_DEF id "(" parameter_list_opt ")" "->" expr ":"
731
- type_comment TK_NEWLINE statements {
731
+ TK_TYPE_COMMENT sep statements {
732
732
$$ = ASYNC_FUNCTION_06($1, $4, $6, $9, $13, $11, @$); }
733
733
| KW_ASYNC KW_DEF id "(" parameter_list_opt ")" ":"
734
- type_comment TK_NEWLINE statements {
734
+ TK_TYPE_COMMENT sep statements {
735
735
$$ = ASYNC_FUNCTION_07($3, $5, $10, $8, @$); }
736
736
| KW_ASYNC KW_DEF id "(" parameter_list_opt ")" "->" expr ":"
737
- type_comment TK_NEWLINE statements {
737
+ TK_TYPE_COMMENT sep statements {
738
738
$$ = ASYNC_FUNCTION_08($3, $5, $8, $12, $10, @$); }
739
739
;
740
740
@@ -745,10 +745,10 @@ async_for_stmt
745
745
KW_ELSE ":" body_stmts {
746
746
$$ = ASYNC_FOR_02($3, $5, $7, $10, @$); }
747
747
| KW_ASYNC KW_FOR expr KW_IN expr ":"
748
- type_comment TK_NEWLINE statements {
748
+ TK_TYPE_COMMENT sep statements {
749
749
$$ = ASYNC_FOR_03($3, $5, $9, $7, @$); }
750
750
| KW_ASYNC KW_FOR expr KW_IN expr ":"
751
- type_comment TK_NEWLINE statements KW_ELSE ":" body_stmts {
751
+ TK_TYPE_COMMENT sep statements KW_ELSE ":" body_stmts {
752
752
$$ = ASYNC_FOR_04($3, $5, $9, $12, $7, @$); }
753
753
;
754
754
@@ -757,10 +757,10 @@ async_with_stmt
757
757
$$ = ASYNC_WITH($3, $5, @$); }
758
758
| KW_ASYNC KW_WITH with_as_items ":" body_stmts {
759
759
$$ = ASYNC_WITH_02($3, $5, @$); }
760
- | KW_ASYNC KW_WITH expr_list ":" type_comment
761
- TK_NEWLINE statements { $$ = ASYNC_WITH_01($3, $7, $5, @$); }
762
- | KW_ASYNC KW_WITH with_as_items ":" type_comment
763
- TK_NEWLINE statements { $$ = ASYNC_WITH_03($3, $7, $5, @$); }
760
+ | KW_ASYNC KW_WITH expr_list ":" TK_TYPE_COMMENT sep statements {
761
+ $$ = ASYNC_WITH_01($3, $7, $5, @$); }
762
+ | KW_ASYNC KW_WITH with_as_items ":" TK_TYPE_COMMENT sep statements {
763
+ $$ = ASYNC_WITH_03($3, $7, $5, @$); }
764
764
;
765
765
766
766
while_statement
@@ -840,31 +840,40 @@ comp_for_items
840
840
| comp_for { LIST_NEW($$); PLIST_ADD($$, $1); }
841
841
;
842
842
843
+ func_call_expr_list
844
+ : func_call_expr_list "," expr { $$ = $1; LIST_ADD($$, $3); }
845
+ | func_call_expr_list "," TK_TYPE_IGNORE expr { $$ = $1; LIST_ADD($$, $4);
846
+ extract_type_comment(p, @$, $3); }
847
+ | expr { LIST_NEW($$); LIST_ADD($$, $1); }
848
+ ;
849
+
843
850
call_arguement_list
844
- : expr_list_opt { $$ = $1 ; }
845
- | expr_list "," { $$ = $1; }
851
+ : %empty { LIST_NEW($$) ; }
852
+ | func_call_expr_list type_ignore_opt { $$ = $1; }
846
853
| expr comp_for_items { $$ = A2LIST(p.m_a, GENERATOR_EXPR($1, $2, @$)); }
847
854
;
848
855
849
856
function_call
850
857
: primary "(" call_arguement_list ")" { $$ = CALL_01($1, $3, @$); }
851
- | primary "(" expr_list "," keyword_items comma_opt ")" {
858
+ | primary "(" func_call_expr_list "," keyword_items type_ignore_opt ")" {
852
859
$$ = CALL_02($1, $3, $5, @$); }
853
- | primary "(" keyword_items "," expr_list comma_opt ")" {
860
+ | primary "(" keyword_items "," func_call_expr_list type_ignore_opt ")" {
854
861
$$ = CALL_02($1, $5, $3, @$); }
855
- | primary "(" keyword_items comma_opt ")" { $$ = CALL_03($1, $3, @$); }
862
+ | primary "(" keyword_items type_ignore_opt ")" { $$ = CALL_03($1, $3, @$); }
856
863
| function_call "(" call_arguement_list ")" { $$ = CALL_01($1, $3, @$); }
857
- | function_call "(" expr_list "," keyword_items comma_opt ")" {
858
- $$ = CALL_02($1, $3, $5, @$); }
859
- | function_call "(" keyword_items "," expr_list comma_opt ")" {
860
- $$ = CALL_02($1, $5, $3, @$); }
861
- | function_call "(" keyword_items comma_opt ")" { $$ = CALL_03($1, $3, @$); }
864
+ | function_call "(" func_call_expr_list "," keyword_items type_ignore_opt ")"
865
+ { $$ = CALL_02($1, $3, $5, @$); }
866
+ | function_call "(" keyword_items "," func_call_expr_list type_ignore_opt ")"
867
+ { $$ = CALL_02($1, $5, $3, @$); }
868
+ | function_call "(" keyword_items type_ignore_opt ")" {
869
+ $$ = CALL_03($1, $3, @$); }
862
870
| subscript "(" call_arguement_list ")" { $$ = CALL_01($1, $3, @$); }
863
- | subscript "(" expr_list "," keyword_items comma_opt ")" {
871
+ | subscript "(" func_call_expr_list "," keyword_items type_ignore_opt ")" {
864
872
$$ = CALL_02($1, $3, $5, @$); }
865
- | subscript "(" keyword_items "," expr_list comma_opt ")" {
873
+ | subscript "(" keyword_items "," func_call_expr_list type_ignore_opt ")" {
866
874
$$ = CALL_02($1, $5, $3, @$); }
867
- | subscript "(" keyword_items comma_opt ")" { $$ = CALL_03($1, $3, @$); }
875
+ | subscript "(" keyword_items type_ignore_opt ")" {
876
+ $$ = CALL_03($1, $3, @$); }
868
877
| "(" expr ")" "(" call_arguement_list ")" { $$ = CALL_01($2, $5, @$); }
869
878
;
870
879
0 commit comments