Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r135b431 r1efa1e1  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Aug 23 14:53:20 2017
    13 // Update Count     : 2702
     12// Last Modified On : Wed Aug 23 21:08:08 2017
     13// Update Count     : 2704
    1414//
    1515
     
    9797        DeclarationNode::TypeClass tclass;
    9898        StatementNode * sn;
    99         WaitForStmt * wfs;
    10099        ConstantExpr * constant;
    101100        IfCtl * ifctl;
     
    120119%token RESTRICT                                                                                 // C99
    121120%token ATOMIC                                                                                   // C11
    122 %token FORALL LVALUE MUTEX VIRTUAL                                              // CFA
     121%token FORALL MUTEX VIRTUAL                                             // CFA
    123122%token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED
    124123%token BOOL COMPLEX IMAGINARY                                                   // C99
     
    188187%type<flag> asm_volatile_opt
    189188%type<en> handler_predicate_opt
    190 %type<en> when_clause_opt timeout
    191189
    192190// statements
     
    194192%type<sn> iteration_statement                   jump_statement
    195193%type<sn> with_statement                                exception_statement                     asm_statement
    196 %type<sn> waitfor_statement
     194%type<sn> when_clause_opt                               waitfor_statement                       waitfor_clause                          waitfor                         timeout
    197195%type<sn> fall_through_opt                              fall_through
    198196%type<sn> statement                                             statement_list
     
    204202%type<sn> handler_clause                                finally_clause
    205203%type<catch_kind> handler_key
    206 %type<wfs> waitfor_clause
    207 %type<en> waitfor
    208204
    209205// declarations
     
    307303// Similar issues exit with the waitfor statement.
    308304
    309 // Order of these lines matters. THEN is left associative over WOR/TIMEOUT/ELSE, WOR is left associative over
    310 // TIMEOUT/ELSE, and TIMEOUT is left associative over ELSE.
     305// Order of these lines matters (low-to-high precedence). THEN is left associative over WOR/TIMEOUT/ELSE, WOR is left
     306// associative over TIMEOUT/ELSE, and TIMEOUT is left associative over ELSE.
    311307%precedence THEN        // rule precedence for IF/WAITFOR statement
    312308%precedence WOR         // token precedence for start of WOR in WAITFOR statement
     
    569565        | '&'                                                                           { $$ = OperKinds::AddressOf; }
    570566                // GCC, address of label must be handled by semantic check for ref,ref,label
    571 //      | ANDAND                                                                        { $$ = OperKinds::And; }
     567        | ANDAND                                                                        { $$ = OperKinds::And; }
    572568        ;
    573569
     
    691687        conditional_expression
    692688        | unary_expression assignment_operator assignment_expression
    693                 { $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); }
     689                { $$ = new ExpressionNode( build_binary_val( $2, $1, $3 ) ); }
    694690        ;
    695691
     
    983979when_clause_opt:
    984980        // empty
    985                 { $$ = nullptr; }
     981                { $$ = nullptr; }                                                               // FIX ME
    986982        | WHEN '(' comma_expression ')'
    987                 { $$ = $3; }
     983                { $$ = nullptr; }                                                               // FIX ME
    988984        ;
    989985
    990986waitfor:
    991987        WAITFOR '(' identifier ')'
    992                 {
    993                         $$ = new ExpressionNode( new NameExpr( *$3 ) );
    994                         delete $3;
    995                 }
     988                { $$ = nullptr; }                                                               // FIX ME
    996989        | WAITFOR '(' identifier ',' argument_expression_list ')'
    997                 {
    998                         $$ = new ExpressionNode( new NameExpr( *$3 ) );
    999                         $$->set_last( $5 );
    1000                         delete $3;
    1001                 }
     990                { $$ = nullptr; }                                                               // FIX ME
    1002991        ;
    1003992
    1004993timeout:
    1005994        TIMEOUT '(' comma_expression ')'
    1006                 { $$ = $3; }
     995                { $$ = nullptr; }                                                               // FIX ME
    1007996        ;
    1008997
    1009998waitfor_clause:
    1010999        when_clause_opt waitfor statement %prec THEN
    1011                 { $$ = build_waitfor( $2, $3, $1 ); }
     1000                { $$ = nullptr; }                                                               // FIX ME
    10121001        | when_clause_opt waitfor statement WOR waitfor_clause
    1013                 { $$ = build_waitfor( $2, $3, $1, $5 ); }
     1002                { $$ = nullptr; }                                                               // FIX ME
    10141003        | when_clause_opt timeout statement %prec THEN
    1015                 { $$ = build_waitfor_timeout( $2, $3, $1 ); }
     1004                { $$ = nullptr; }                                                               // FIX ME
    10161005        | when_clause_opt ELSE statement
    1017                 { $$ = build_waitfor_timeout( nullptr, $3, $1 ); }
     1006                { $$ = nullptr; }                                                               // FIX ME
    10181007        | when_clause_opt timeout statement WOR when_clause_opt ELSE statement
    1019                 { $$ = build_waitfor_timeout( $2, $3, $1, $7, $5 ); }
     1008                { $$ = nullptr; }                                                               // FIX ME
    10201009        ;
    10211010
    10221011waitfor_statement:
    10231012        when_clause_opt waitfor statement %prec THEN
    1024                 { $$ = new StatementNode( build_waitfor( $2, $3, $1 ) ); }
     1013                { $$ = nullptr; }                                                               // FIX ME
    10251014        | when_clause_opt waitfor statement WOR waitfor_clause
    1026                 { $$ = new StatementNode( build_waitfor( $2, $3, $1, $5 ) ); }
     1015                { $$ = nullptr; }                                                               // FIX ME
    10271016        ;
    10281017
     
    14941483        | VOLATILE
    14951484                { $$ = DeclarationNode::newTypeQualifier( Type::Volatile ); }
    1496         | LVALUE                                                                                        // CFA
    1497                 { $$ = DeclarationNode::newTypeQualifier( Type::Lvalue ); }
    14981485        | MUTEX
    14991486                { $$ = DeclarationNode::newTypeQualifier( Type::Mutex ); }
     
    24772464variable_ptr:
    24782465        ptrref_operator variable_declarator
    2479                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2466                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    24802467        | ptrref_operator type_qualifier_list variable_declarator
    2481                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2468                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    24822469        | '(' variable_ptr ')' attribute_list_opt
    24832470                { $$ = $2->addQualifiers( $4 ); }                               // redundant parenthesis
     
    25252512function_ptr:
    25262513        ptrref_operator function_declarator
    2527                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2514                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    25282515        | ptrref_operator type_qualifier_list function_declarator
    2529                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2516                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    25302517        | '(' function_ptr ')'
    25312518                { $$ = $2; }
     
    25652552KR_function_ptr:
    25662553        ptrref_operator KR_function_declarator
    2567                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2554                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    25682555        | ptrref_operator type_qualifier_list KR_function_declarator
    2569                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2556                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    25702557        | '(' KR_function_ptr ')'
    25712558                { $$ = $2; }
     
    26092596type_ptr:
    26102597        ptrref_operator variable_type_redeclarator
    2611                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2598                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    26122599        | ptrref_operator type_qualifier_list variable_type_redeclarator
    2613                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2600                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    26142601        | '(' type_ptr ')' attribute_list_opt
    26152602                { $$ = $2->addQualifiers( $4 ); }
     
    26532640identifier_parameter_ptr:
    26542641        ptrref_operator identifier_parameter_declarator
    2655                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2642                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    26562643        | ptrref_operator type_qualifier_list identifier_parameter_declarator
    2657                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2644                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    26582645        | '(' identifier_parameter_ptr ')' attribute_list_opt
    26592646                { $$ = $2->addQualifiers( $4 ); }
     
    27132700type_parameter_ptr:
    27142701        ptrref_operator type_parameter_redeclarator
    2715                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2702                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    27162703        | ptrref_operator type_qualifier_list type_parameter_redeclarator
    2717                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2704                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    27182705        | '(' type_parameter_ptr ')' attribute_list_opt
    27192706                { $$ = $2->addQualifiers( $4 ); }
     
    27562743abstract_ptr:
    27572744        ptrref_operator
    2758                 { $$ = DeclarationNode::newPointer( 0 ); }
     2745                { $$ = DeclarationNode::newPointer( 0, $1 ); }
    27592746        | ptrref_operator type_qualifier_list
    2760                 { $$ = DeclarationNode::newPointer( $2 ); }
     2747                { $$ = DeclarationNode::newPointer( $2, $1 ); }
    27612748        | ptrref_operator abstract_declarator
    2762                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2749                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    27632750        | ptrref_operator type_qualifier_list abstract_declarator
    2764                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2751                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    27652752        | '(' abstract_ptr ')' attribute_list_opt
    27662753                { $$ = $2->addQualifiers( $4 ); }
     
    28452832abstract_parameter_ptr:
    28462833        ptrref_operator
    2847                 { $$ = DeclarationNode::newPointer( nullptr ); }
     2834                { $$ = DeclarationNode::newPointer( nullptr, $1 ); }
    28482835        | ptrref_operator type_qualifier_list
    2849                 { $$ = DeclarationNode::newPointer( $2 ); }
     2836                { $$ = DeclarationNode::newPointer( $2, $1 ); }
    28502837        | ptrref_operator abstract_parameter_declarator
    2851                 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr ) ); }
     2838                { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr, $1 ) ); }
    28522839        | ptrref_operator type_qualifier_list abstract_parameter_declarator
    2853                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2840                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    28542841        | '(' abstract_parameter_ptr ')' attribute_list_opt
    28552842                { $$ = $2->addQualifiers( $4 ); }
     
    29242911variable_abstract_ptr:
    29252912        ptrref_operator
    2926                 { $$ = DeclarationNode::newPointer( 0 ); }
     2913                { $$ = DeclarationNode::newPointer( 0, $1 ); }
    29272914        | ptrref_operator type_qualifier_list
    2928                 { $$ = DeclarationNode::newPointer( $2 ); }
     2915                { $$ = DeclarationNode::newPointer( $2, $1 ); }
    29292916        | ptrref_operator variable_abstract_declarator
    2930                 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
     2917                { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    29312918        | ptrref_operator type_qualifier_list variable_abstract_declarator
    2932                 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
     2919                { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); }
    29332920        | '(' variable_abstract_ptr ')' attribute_list_opt
    29342921                { $$ = $2->addQualifiers( $4 ); }
     
    29702957                // No SUE declaration in parameter list.
    29712958        ptrref_operator type_specifier_nobody
    2972                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     2959                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    29732960        | type_qualifier_list ptrref_operator type_specifier_nobody
    2974                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     2961                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    29752962        | ptrref_operator cfa_abstract_function
    2976                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     2963                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    29772964        | type_qualifier_list ptrref_operator cfa_abstract_function
    2978                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     2965                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    29792966        | ptrref_operator cfa_identifier_parameter_declarator_tuple
    2980                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     2967                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    29812968        | type_qualifier_list ptrref_operator cfa_identifier_parameter_declarator_tuple
    2982                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     2969                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    29832970        ;
    29842971
     
    30583045cfa_abstract_ptr:                                                                               // CFA
    30593046        ptrref_operator type_specifier
    3060                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     3047                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    30613048        | type_qualifier_list ptrref_operator type_specifier
    3062                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     3049                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    30633050        | ptrref_operator cfa_abstract_function
    3064                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     3051                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    30653052        | type_qualifier_list ptrref_operator cfa_abstract_function
    3066                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     3053                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    30673054        | ptrref_operator cfa_abstract_declarator_tuple
    3068                 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     3055                { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); }
    30693056        | type_qualifier_list ptrref_operator cfa_abstract_declarator_tuple
    3070                 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
     3057                { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); }
    30713058        ;
    30723059
Note: See TracChangeset for help on using the changeset viewer.