Changeset ce8c12f for src/Parser
- Timestamp:
- May 15, 2017, 11:30:26 AM (7 years ago)
- 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, resolv-new, with_gc
- Children:
- d36c117
- Parents:
- 65aca88
- Location:
- src/Parser
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/DeclarationNode.cc
r65aca88 rce8c12f 326 326 } // DeclarationNode::newTypeDecl 327 327 328 DeclarationNode * DeclarationNode::newPointer( DeclarationNode * qualifiers ) {329 DeclarationNode * newnode = new DeclarationNode; 330 newnode->type = new TypeData( TypeData::Pointer);328 DeclarationNode * DeclarationNode::newPointer( DeclarationNode * qualifiers, OperKinds kind ) { 329 DeclarationNode * newnode = new DeclarationNode; 330 newnode->type = new TypeData( kind == OperKinds::PointTo ? TypeData::Pointer : TypeData::Reference ); 331 331 if ( qualifiers ) { 332 332 return newnode->addQualifiers( qualifiers ); … … 745 745 DeclarationNode * DeclarationNode::addPointer( DeclarationNode * p ) { 746 746 if ( p ) { 747 assert( p->type->kind == TypeData::Pointer );747 assert( p->type->kind == TypeData::Pointer || TypeData::Reference ); 748 748 setBase( p->type ); 749 749 p->type = nullptr; -
src/Parser/ParseNode.h
r65aca88 rce8c12f 237 237 static DeclarationNode * newTraitUse( const std::string * name, ExpressionNode * params ); 238 238 static DeclarationNode * newTypeDecl( std::string * name, DeclarationNode * typeParams ); 239 static DeclarationNode * newPointer( DeclarationNode * qualifiers );239 static DeclarationNode * newPointer( DeclarationNode * qualifiers, OperKinds kind ); 240 240 static DeclarationNode * newArray( ExpressionNode * size, DeclarationNode * qualifiers, bool isStatic ); 241 241 static DeclarationNode * newVarArray( DeclarationNode * qualifiers ); -
src/Parser/TypeData.cc
r65aca88 rce8c12f 30 30 case Unknown: 31 31 case Pointer: 32 case Reference: 32 33 case EnumConstant: 33 34 // nothing else to initialize … … 99 100 case Unknown: 100 101 case Pointer: 102 case Reference: 101 103 case EnumConstant: 102 104 // nothing to destroy … … 165 167 case EnumConstant: 166 168 case Pointer: 169 case Reference: 167 170 // nothing else to copy 168 171 break; … … 434 437 case TypeData::Array: 435 438 return buildArray( td ); 439 case TypeData::Reference: 440 return buildReference( td ); 436 441 case TypeData::Function: 437 442 return buildFunction( td ); … … 612 617 buildForall( td->forall, at->get_forall() ); 613 618 return at; 614 } // buildPointer 619 } // buildArray 620 621 ReferenceType * buildReference( const TypeData * td ) { 622 ReferenceType * rt; 623 if ( td->base ) { 624 rt = new ReferenceType( buildQualifiers( td ), typebuild( td->base ) ); 625 } else { 626 rt = new ReferenceType( buildQualifiers( td ), new BasicType( Type::Qualifiers(), BasicType::SignedInt ) ); 627 } // if 628 buildForall( td->forall, rt->get_forall() ); 629 return rt; 630 } // buildReference 615 631 616 632 AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes ) { -
src/Parser/TypeData.h
r65aca88 rce8c12f 21 21 22 22 struct TypeData { 23 enum Kind { Basic, Pointer, Array, Function, Aggregate, AggregateInst, Enum, EnumConstant, Symbolic,23 enum Kind { Basic, Pointer, Array, Reference, Function, Aggregate, AggregateInst, Enum, EnumConstant, Symbolic, 24 24 SymbolicInst, Tuple, Typeof, Builtin, Unknown }; 25 25 … … 101 101 PointerType * buildPointer( const TypeData * ); 102 102 ArrayType * buildArray( const TypeData * ); 103 ReferenceType * buildReference( const TypeData * ); 103 104 AggregateDecl * buildAggregate( const TypeData *, std::list< Attribute * > ); 104 105 ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes ); -
src/Parser/parser.yy
r65aca88 rce8c12f 2377 2377 variable_ptr: 2378 2378 ptrref_operator variable_declarator 2379 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2379 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2380 2380 | ptrref_operator type_qualifier_list variable_declarator 2381 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2381 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2382 2382 | '(' variable_ptr ')' attribute_list_opt 2383 2383 { $$ = $2->addQualifiers( $4 ); } // redundant parenthesis … … 2425 2425 function_ptr: 2426 2426 ptrref_operator function_declarator 2427 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2427 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2428 2428 | ptrref_operator type_qualifier_list function_declarator 2429 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2429 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2430 2430 | '(' function_ptr ')' 2431 2431 { $$ = $2; } … … 2465 2465 KR_function_ptr: 2466 2466 ptrref_operator KR_function_declarator 2467 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2467 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2468 2468 | ptrref_operator type_qualifier_list KR_function_declarator 2469 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2469 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2470 2470 | '(' KR_function_ptr ')' 2471 2471 { $$ = $2; } … … 2509 2509 type_ptr: 2510 2510 ptrref_operator variable_type_redeclarator 2511 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2511 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2512 2512 | ptrref_operator type_qualifier_list variable_type_redeclarator 2513 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2513 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2514 2514 | '(' type_ptr ')' attribute_list_opt 2515 2515 { $$ = $2->addQualifiers( $4 ); } … … 2553 2553 identifier_parameter_ptr: 2554 2554 ptrref_operator identifier_parameter_declarator 2555 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2555 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2556 2556 | ptrref_operator type_qualifier_list identifier_parameter_declarator 2557 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2557 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2558 2558 | '(' identifier_parameter_ptr ')' attribute_list_opt 2559 2559 { $$ = $2->addQualifiers( $4 ); } … … 2613 2613 type_parameter_ptr: 2614 2614 ptrref_operator type_parameter_redeclarator 2615 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2615 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2616 2616 | ptrref_operator type_qualifier_list type_parameter_redeclarator 2617 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2617 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2618 2618 | '(' type_parameter_ptr ')' attribute_list_opt 2619 2619 { $$ = $2->addQualifiers( $4 ); } … … 2656 2656 abstract_ptr: 2657 2657 ptrref_operator 2658 { $$ = DeclarationNode::newPointer( 0 ); }2658 { $$ = DeclarationNode::newPointer( 0, $1 ); } 2659 2659 | ptrref_operator type_qualifier_list 2660 { $$ = DeclarationNode::newPointer( $2 ); }2660 { $$ = DeclarationNode::newPointer( $2, $1 ); } 2661 2661 | ptrref_operator abstract_declarator 2662 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2662 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2663 2663 | ptrref_operator type_qualifier_list abstract_declarator 2664 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2664 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2665 2665 | '(' abstract_ptr ')' attribute_list_opt 2666 2666 { $$ = $2->addQualifiers( $4 ); } … … 2745 2745 abstract_parameter_ptr: 2746 2746 ptrref_operator 2747 { $$ = DeclarationNode::newPointer( nullptr ); }2747 { $$ = DeclarationNode::newPointer( nullptr, $1 ); } 2748 2748 | ptrref_operator type_qualifier_list 2749 { $$ = DeclarationNode::newPointer( $2 ); }2749 { $$ = DeclarationNode::newPointer( $2, $1 ); } 2750 2750 | ptrref_operator abstract_parameter_declarator 2751 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr ) ); }2751 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr, $1 ) ); } 2752 2752 | ptrref_operator type_qualifier_list abstract_parameter_declarator 2753 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2753 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2754 2754 | '(' abstract_parameter_ptr ')' attribute_list_opt 2755 2755 { $$ = $2->addQualifiers( $4 ); } … … 2824 2824 variable_abstract_ptr: 2825 2825 ptrref_operator 2826 { $$ = DeclarationNode::newPointer( 0 ); }2826 { $$ = DeclarationNode::newPointer( 0, $1 ); } 2827 2827 | ptrref_operator type_qualifier_list 2828 { $$ = DeclarationNode::newPointer( $2 ); }2828 { $$ = DeclarationNode::newPointer( $2, $1 ); } 2829 2829 | ptrref_operator variable_abstract_declarator 2830 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }2830 { $$ = $2->addPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2831 2831 | ptrref_operator type_qualifier_list variable_abstract_declarator 2832 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }2832 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2833 2833 | '(' variable_abstract_ptr ')' attribute_list_opt 2834 2834 { $$ = $2->addQualifiers( $4 ); } … … 2870 2870 // No SUE declaration in parameter list. 2871 2871 ptrref_operator type_specifier_nobody 2872 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }2872 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2873 2873 | type_qualifier_list ptrref_operator type_specifier_nobody 2874 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }2874 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 2875 2875 | ptrref_operator cfa_abstract_function 2876 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }2876 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2877 2877 | type_qualifier_list ptrref_operator cfa_abstract_function 2878 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }2878 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 2879 2879 | ptrref_operator cfa_identifier_parameter_declarator_tuple 2880 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }2880 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2881 2881 | type_qualifier_list ptrref_operator cfa_identifier_parameter_declarator_tuple 2882 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }2882 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 2883 2883 ; 2884 2884 … … 2958 2958 cfa_abstract_ptr: // CFA 2959 2959 ptrref_operator type_specifier 2960 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }2960 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2961 2961 | type_qualifier_list ptrref_operator type_specifier 2962 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }2962 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 2963 2963 | ptrref_operator cfa_abstract_function 2964 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }2964 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2965 2965 | type_qualifier_list ptrref_operator cfa_abstract_function 2966 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }2966 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 2967 2967 | ptrref_operator cfa_abstract_declarator_tuple 2968 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }2968 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0, $1 ) ); } 2969 2969 | type_qualifier_list ptrref_operator cfa_abstract_declarator_tuple 2970 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }2970 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1, $2 ) ); } 2971 2971 ; 2972 2972
Note: See TracChangeset
for help on using the changeset viewer.