Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/parser.yy

    r9853d9b0 re307e12  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Dec 12 17:54:22 2019
    13 // Update Count     : 4404
     12// Last Modified On : Sat Dec  7 10:43:44 2019
     13// Update Count     : 4394
    1414//
    1515
     
    5151using namespace std;
    5252
    53 #include "SynTree/Declaration.h"
    5453#include "ParseNode.h"
    5554#include "TypedefTable.h"
     
    212211} // forCtrl
    213212
     213KeywordCastExpr::Target Aggregate2Target( DeclarationNode::Aggregate aggr ) {
     214        KeywordCastExpr::Target target;
     215        switch ( aggr ) {
     216          case DeclarationNode::Coroutine: target = KeywordCastExpr::Coroutine; break;
     217          case DeclarationNode::Monitor: target = KeywordCastExpr::Monitor; break;
     218          case DeclarationNode::Thread: target = KeywordCastExpr::Thread; break;
     219          default: abort();
     220        } // switch
     221        return target;
     222} // Aggregate2Target
     223
     224
    214225bool forall = false, yyy = false;                                               // aggregate have one or more forall qualifiers ?
    215226
     
    237248        ExpressionNode * en;
    238249        DeclarationNode * decl;
    239         AggregateDecl::Aggregate aggKey;
     250        DeclarationNode::Aggregate aggKey;
    240251        DeclarationNode::TypeClass tclass;
    241252        StatementNode * sn;
     
    651662                { $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $4 ) ) ); }
    652663        | postfix_expression '.' aggregate_control
    653                 { $$ = new ExpressionNode( build_keyword_cast( $3, $1 ) ); }
     664                { $$ = new ExpressionNode( build_keyword_cast( Aggregate2Target( $3 ), $1 ) ); }
    654665        | postfix_expression ARROW identifier
    655666                { $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
     
    796807                { $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
    797808        | '(' aggregate_control '&' ')' cast_expression         // CFA
    798                 { $$ = new ExpressionNode( build_keyword_cast( $2, $5 ) ); }
     809                { $$ = new ExpressionNode( build_keyword_cast( Aggregate2Target( $2 ), $5 ) ); }
    799810                // VIRTUAL cannot be opt because of look ahead issues
    800811        | '(' VIRTUAL ')' cast_expression                                       // CFA
     
    11901201                { $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
    11911202                                                OperKinds::LThan, $1->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
    1192         | '=' comma_expression                                                                  // CFA
    1193                 { $$ = forCtrl( $2, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
    1194                                                 OperKinds::LEThan, $2->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
    11951203        | comma_expression inclexcl comma_expression            // CFA
    11961204                { $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
     
    12001208                { $$ = forCtrl( $3, $1, new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
    12011209                                                OperKinds::LThan, $3->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
    1202         | comma_expression ';' '=' comma_expression                             // CFA
    1203                 { $$ = forCtrl( $4, $1, new ExpressionNode( build_constantInteger( *new string( "0" ) ) ),
    1204                                                 OperKinds::LEThan, $4->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
    12051210        | comma_expression ';' comma_expression inclexcl comma_expression // CFA
    12061211                { $$ = forCtrl( $3, $1, $3->clone(), $4, $5, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); }
     
    20662071aggregate_data:
    20672072        STRUCT
    2068                 { yyy = true; $$ = AggregateDecl::Struct; }
     2073                { yyy = true; $$ = DeclarationNode::Struct; }
    20692074        | UNION
    2070                 { yyy = true; $$ = AggregateDecl::Union; }
     2075                { yyy = true; $$ = DeclarationNode::Union; }
    20712076        | EXCEPTION                                                                                     // CFA
    2072                 { yyy = true; $$ = AggregateDecl::Exception; }
     2077                { yyy = true; $$ = DeclarationNode::Exception; }
    20732078        ;
    20742079
    20752080aggregate_control:                                                                              // CFA
    20762081        GENERATOR
    2077                 { yyy = true; $$ = AggregateDecl::Coroutine; }
     2082                { yyy = true; $$ = DeclarationNode::Coroutine; }
    20782083        | COROUTINE
    2079                 { yyy = true; $$ = AggregateDecl::Coroutine; }
     2084                { yyy = true; $$ = DeclarationNode::Coroutine; }
    20802085        | MONITOR
    2081                 { yyy = true; $$ = AggregateDecl::Monitor; }
     2086                { yyy = true; $$ = DeclarationNode::Monitor; }
    20822087        | THREAD
    2083                 { yyy = true; $$ = AggregateDecl::Thread; }
     2088                { yyy = true; $$ = DeclarationNode::Thread; }
    20842089        ;
    20852090
Note: See TracChangeset for help on using the changeset viewer.