Changeset 71e555c for src/Parser


Ignore:
Timestamp:
May 29, 2018, 11:51:21 AM (6 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
Children:
da60c631
Parents:
db4d8e3 (diff), 4ee3b0c1 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

Location:
src/Parser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/TypeData.cc

    rdb4d8e3 r71e555c  
    575575
    576576          case DeclarationNode::Int128:
    577                 ret = td->signedness == 1 ? BasicType::UnsignedInt128 : BasicType::SignedInt128;
     577                ret = td->signedness == DeclarationNode::Unsigned ? BasicType::UnsignedInt128 : BasicType::SignedInt128;
    578578                if ( td->length != DeclarationNode::NoLength ) {
    579579                        genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
     
    599599                        genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
    600600                } // if
    601                 if ( td->basictype == DeclarationNode::Float && td->length == DeclarationNode::Long ) {
     601                if ( td->basictype != DeclarationNode::Double && td->length == DeclarationNode::Long ) {
    602602                        genTSError( DeclarationNode::lengthNames[ td->length ], td->basictype );
    603603                } // if
     
    605605                        const_cast<TypeData *>(td)->basictype = DeclarationNode::LongDouble;
    606606                } // if
     607
     608                if ( td->basictype == DeclarationNode::Float80 || td->basictype == DeclarationNode::Float128 ) {
     609                        if ( td->complextype != DeclarationNode::NoComplexType ) {
     610                                genTSError( DeclarationNode::complexTypeNames[ td->complextype ], td->basictype );
     611                        }
     612                        if ( td->basictype == DeclarationNode::Float80 ) ret = BasicType::Float80;
     613                        else ret = BasicType::Float128;
     614                        break;
     615                }
    607616
    608617                ret = floattype[ td->complextype ][ td->basictype - DeclarationNode::Float ];
  • src/Parser/parser.yy

    rdb4d8e3 r71e555c  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu May 24 18:11:59 2018
    13 // Update Count     : 3369
     12// Last Modified On : Mon May 28 17:01:36 2018
     13// Update Count     : 3383
    1414//
    1515
     
    324324%type<decl> cfa_identifier_parameter_declarator_tuple cfa_identifier_parameter_ptr
    325325
    326 %type<decl> cfa_parameter_declaration cfa_parameter_list cfa_parameter_type_list_opt
     326%type<decl> cfa_parameter_declaration cfa_parameter_list cfa_parameter_ellipsis_list_opt
    327327
    328328%type<decl> cfa_typedef_declaration cfa_variable_declaration cfa_variable_specifier
     
    835835//      '[' ']'
    836836//              { $$ = new ExpressionNode( build_tuple() ); }
    837 //      '[' push assignment_expression pop ']'
     837//      | '[' push assignment_expression pop ']'
    838838//              { $$ = new ExpressionNode( build_tuple( $3 ) ); }
    839839        '[' push ',' tuple_expression_list pop ']'
     
    13641364        | declaration_qualifier_list type_qualifier_list cfa_function_specifier
    13651365                { $$ = $3->addQualifiers( $1 )->addQualifiers( $2 ); }
    1366         | cfa_function_declaration ',' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
     1366        | cfa_function_declaration ',' identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')'
    13671367                {
    13681368                        // Append the return type at the start (left-hand-side) to each identifier in the list.
    13691369                        DeclarationNode * ret = new DeclarationNode;
    13701370                        ret->type = maybeClone( $1->type->base );
    1371                         $$ = $1->appendList( DeclarationNode::newFunction( $3, ret, $5, nullptr ) );
     1371                        $$ = $1->appendList( DeclarationNode::newFunction( $3, ret, $6, nullptr ) );
    13721372                }
    13731373        ;
    13741374
    13751375cfa_function_specifier:                                                                 // CFA
    1376 //      '[' ']' identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')' // S/R conflict
     1376//      '[' ']' identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')' // S/R conflict
    13771377//              {
    13781378//                      $$ = DeclarationNode::newFunction( $3, DeclarationNode::newTuple( 0 ), $6, 0, true );
    13791379//              }
    1380 //      '[' ']' identifier '(' push cfa_parameter_type_list_opt pop ')'
     1380//      '[' ']' identifier '(' push cfa_parameter_ellipsis_list_opt pop ')'
    13811381//              {
    13821382//                      typedefTable.setNextIdentifier( *$5 );
    13831383//                      $$ = DeclarationNode::newFunction( $5, DeclarationNode::newTuple( 0 ), $8, 0, true );
    13841384//              }
    1385 //      | '[' ']' TYPEDEFname '(' push cfa_parameter_type_list_opt pop ')'
     1385//      | '[' ']' TYPEDEFname '(' push cfa_parameter_ellipsis_list_opt pop ')'
    13861386//              {
    13871387//                      typedefTable.setNextIdentifier( *$5 );
     
    13911391                // identifier_or_type_name must be broken apart because of the sequence:
    13921392                //
    1393                 //   '[' ']' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
     1393                //   '[' ']' identifier_or_type_name '(' cfa_parameter_ellipsis_list_opt ')'
    13941394                //   '[' ']' type_specifier
    13951395                //
    13961396                // type_specifier can resolve to just TYPEDEFname (e.g., typedef int T; int f( T );). Therefore this must be
    13971397                // flattened to allow lookahead to the '(' without having to reduce identifier_or_type_name.
    1398         cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')'
     1398        cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')'
    13991399                // To obtain LR(1 ), this rule must be factored out from function return type (see cfa_abstract_declarator).
    14001400                { $$ = DeclarationNode::newFunction( $2, $1, $5, 0 ); }
    1401         | cfa_function_return identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')'
     1401        | cfa_function_return identifier_or_type_name '(' push cfa_parameter_ellipsis_list_opt pop ')'
    14021402                { $$ = DeclarationNode::newFunction( $2, $1, $5, 0 ); }
    14031403        ;
     
    19511951        ;
    19521952
    1953 cfa_parameter_type_list_opt:                                                    // CFA, abstract + real
     1953cfa_parameter_ellipsis_list_opt:                                                        // CFA, abstract + real
    19541954        // empty
    19551955                { $$ = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     
    22092209        '|' no_attr_identifier_or_type_name '(' type_list ')'
    22102210                { $$ = DeclarationNode::newTraitUse( $2, $4 ); }
    2211         | '|' '{' push trait_declaration_list '}'
     2211        | '|' '{' push trait_declaration_list pop '}'
    22122212                { $$ = $4; }
    2213         | '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_list ')'
     2213        | '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list pop '}' '(' type_list ')'
    22142214                { SemanticError( yylloc, "Generic data-type assertion is currently unimplemented." ); $$ = nullptr; }
    22152215        ;
     
    22572257        TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
    22582258                { $$ = DeclarationNode::newTrait( $2, $5, 0 ); }
    2259         | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}'
     2259        | TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' push trait_declaration_list pop '}'
    22602260                { $$ = DeclarationNode::newTrait( $2, $5, $10 ); }
    22612261        ;
     
    22632263trait_declaration_list:                                                                 // CFA
    22642264        trait_declaration
    2265         | trait_declaration_list push trait_declaration
    2266                 { $$ = $1->appendList( $3 ); }
     2265        | trait_declaration_list pop push trait_declaration
     2266                { $$ = $1->appendList( $4 ); }
    22672267        ;
    22682268
    22692269trait_declaration:                                                                              // CFA
    2270         cfa_trait_declaring_list pop ';'
    2271         | trait_declaring_list pop ';'
     2270        cfa_trait_declaring_list ';'
     2271        | trait_declaring_list ';'
    22722272        ;
    22732273
     
    29742974        '[' ']'
    29752975                { $$ = DeclarationNode::newArray( 0, 0, false ); }
    2976         // multi_array_dimension handles the '[' '*' ']' case
     2976                // multi_array_dimension handles the '[' '*' ']' case
    29772977        | '[' push type_qualifier_list '*' pop ']'                      // remaining C99
    29782978                { $$ = DeclarationNode::newVarArray( $3 ); }
    29792979        | '[' push type_qualifier_list pop ']'
    29802980                { $$ = DeclarationNode::newArray( 0, $3, false ); }
    2981         // multi_array_dimension handles the '[' assignment_expression ']' case
     2981                // multi_array_dimension handles the '[' assignment_expression ']' case
    29822982        | '[' push type_qualifier_list assignment_expression pop ']'
    29832983                { $$ = DeclarationNode::newArray( $4, $3, false ); }
     
    31153115//
    31163116//              cfa_abstract_tuple identifier_or_type_name
    3117 //              '[' cfa_parameter_list ']' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
     3117//              '[' cfa_parameter_list ']' identifier_or_type_name '(' cfa_parameter_ellipsis_list_opt ')'
    31183118//
    31193119// since a function return type can be syntactically identical to a tuple type:
     
    31743174        '[' push cfa_abstract_parameter_list pop ']'
    31753175                { $$ = DeclarationNode::newTuple( $3 ); }
     3176        | '[' push type_specifier_nobody ELLIPSIS ']'
     3177                { SemanticError( yylloc, "Tuple array currently unimplemented." ); $$ = nullptr; }
     3178        | '[' push type_specifier_nobody ELLIPSIS constant_expression ']'
     3179                { SemanticError( yylloc, "Tuple array currently unimplemented." ); $$ = nullptr; }
    31763180        ;
    31773181
    31783182cfa_abstract_function:                                                                  // CFA
    3179 //      '[' ']' '(' cfa_parameter_type_list_opt ')'
     3183//      '[' ']' '(' cfa_parameter_ellipsis_list_opt ')'
    31803184//              { $$ = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), $4, nullptr ); }
    3181         cfa_abstract_tuple '(' push cfa_parameter_type_list_opt pop ')'
     3185        cfa_abstract_tuple '(' push cfa_parameter_ellipsis_list_opt pop ')'
    31823186                { $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
    3183         | cfa_function_return '(' push cfa_parameter_type_list_opt pop ')'
     3187        | cfa_function_return '(' push cfa_parameter_ellipsis_list_opt pop ')'
    31843188                { $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
    31853189        ;
Note: See TracChangeset for help on using the changeset viewer.