Changes in / [5805d15:a5de33e]
- Location:
- src
- Files:
-
- 1 deleted
- 23 edited
-
CodeGen/GenType.cc (modified) (2 diffs)
-
Concurrency/Keywords.cc (modified) (5 diffs)
-
GenPoly/Lvalue.cc (modified) (5 diffs)
-
InitTweak/FixInit.cc (modified) (1 diff)
-
InitTweak/GenInit.cc (modified) (1 diff)
-
InitTweak/InitTweak.cc (modified) (2 diffs)
-
Parser/DeclarationNode.cc (modified) (2 diffs)
-
Parser/ParseNode.h (modified) (1 diff)
-
Parser/TypeData.cc (modified) (5 diffs)
-
Parser/TypeData.h (modified) (2 diffs)
-
Parser/parser.yy (modified) (11 diffs)
-
ResolvExpr/Unify.cc (modified) (2 diffs)
-
SymTab/Autogen.cc (modified) (1 diff)
-
SymTab/Indexer.cc (modified) (1 diff)
-
SymTab/Validate.cc (modified) (1 diff)
-
SynTree/AddressExpr.cc (modified) (1 diff)
-
SynTree/Mutator.cc (modified) (1 diff)
-
SynTree/Mutator.h (modified) (1 diff)
-
SynTree/ReferenceType.cc (deleted)
-
SynTree/SynTree.h (modified) (1 diff)
-
SynTree/Type.h (modified) (2 diffs)
-
SynTree/Visitor.cc (modified) (2 diffs)
-
SynTree/Visitor.h (modified) (1 diff)
-
SynTree/module.mk (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/GenType.cc
r5805d15 ra5de33e 37 37 virtual void visit( PointerType *pointerType ); 38 38 virtual void visit( ArrayType *arrayType ); 39 virtual void visit( ReferenceType *refType );40 39 virtual void visit( StructInstType *structInst ); 41 40 virtual void visit( UnionInstType *unionInst ); … … 148 147 } 149 148 150 void GenType::visit( ReferenceType *refType ) {151 assert( refType->get_base() != 0);152 assertf( ! genC, "Reference types should not reach code generation." );153 handleQualifiers( refType );154 typeString = "&" + typeString;155 refType->get_base()->accept( *this );156 }157 158 149 void GenType::visit( FunctionType *funcType ) { 159 150 std::ostringstream os; -
src/Concurrency/Keywords.cc
r5805d15 ra5de33e 322 322 if( needs_main ) { 323 323 FunctionType * main_type = new FunctionType( noQualifiers, false ); 324 324 325 325 main_type->get_parameters().push_back( this_decl->clone() ); 326 326 … … 361 361 void ConcurrentSueKeyword::addRoutines( ObjectDecl * field, FunctionDecl * func ) { 362 362 CompoundStmt * statement = new CompoundStmt( noLabels ); 363 statement->push_back( 363 statement->push_back( 364 364 new ReturnStmt( 365 365 noLabels, … … 386 386 //============================================================================================= 387 387 void MutexKeyword::visit(FunctionDecl* decl) { 388 Visitor::visit(decl); 388 Visitor::visit(decl); 389 389 390 390 std::list<DeclarationWithType*> mutexArgs = findMutexArgs( decl ); … … 510 510 void ThreadStarter::visit(FunctionDecl * decl) { 511 511 Visitor::visit(decl); 512 512 513 513 if( ! InitTweak::isConstructor(decl->get_name()) ) return; 514 514 515 515 DeclarationWithType * param = decl->get_functionType()->get_parameters().front(); 516 auto type = dynamic_cast< StructInstType * >( InitTweak::getPointerBase( param->get_type() ) ); 516 auto ptr = dynamic_cast< PointerType * >( param->get_type() ); 517 // if( ptr ) std::cerr << "FRED1" << std::endl; 518 auto type = dynamic_cast< StructInstType * >( ptr->get_base() ); 517 519 // if( type ) std::cerr << "FRED2" << std::endl; 518 520 if( type && type->get_baseStruct()->is_thread() ) { … … 526 528 if( ! stmt ) return; 527 529 528 stmt->push_back( 530 stmt->push_back( 529 531 new ExprStmt( 530 532 noLabels, -
src/GenPoly/Lvalue.cc
r5805d15 ra5de33e 32 32 #include "Common/UniqueName.h" 33 33 #include "Common/utility.h" 34 #include "InitTweak/InitTweak.h"35 34 36 35 namespace GenPoly { … … 39 38 class Pass1 : public Mutator { 40 39 public: 41 typedef Mutator Parent;42 40 Pass1(); 43 41 44 // xxx - should this happen to every expression with reference result type? probably just appexpr and varexpr?45 virtual Type *mutate( ReferenceType * refType );46 virtual Expression *mutate( VariableExpr *varExpr );47 42 virtual Expression *mutate( ApplicationExpr *appExpr ); 48 43 virtual Statement *mutate( ReturnStmt *appExpr ); … … 110 105 } 111 106 112 Type * Pass1::mutate( ReferenceType * refType ) {113 Type * base = refType->get_base();114 refType->set_base( nullptr );115 delete refType;116 return new PointerType( Type::Qualifiers(), base );117 }118 119 Expression * Pass1::mutate( VariableExpr *varExpr ) {120 if ( ReferenceType * refType = dynamic_cast< ReferenceType * >( varExpr->get_result() ) ) {121 varExpr->set_result( refType->acceptMutator( *this ) );122 return UntypedExpr::createDeref( varExpr );123 }124 return Parent::mutate( varExpr );125 }126 127 107 Expression * Pass1::mutate( ApplicationExpr *appExpr ) { 128 108 appExpr->get_function()->acceptMutator( *this ); … … 183 163 } 184 164 185 bool isDeref( Expression * expr ) {186 if ( UntypedExpr * untyped = dynamic_cast< UntypedExpr * >( expr ) ) {187 return InitTweak::getFunctionName( untyped ) == "*?";188 } else if ( ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * > ( expr ) ) {189 return InitTweak::getFunctionName( appExpr ) == "*?";190 } else {191 return false;192 }193 }194 195 165 Expression * GeneralizedLvalue::mutate( AddressExpr * addrExpr ) { 196 166 addrExpr = safe_dynamic_cast< AddressExpr * >( Parent::mutate( addrExpr ) ); … … 206 176 delete addrExpr; 207 177 return new ConditionalExpr( arg1, new AddressExpr( arg2 ), new AddressExpr( arg3 ) ); 208 } else if ( isDeref( addrExpr->get_arg() ) ) {209 // xxx - this doesn't belong here -- move it somewhere else210 Expression *& arg = InitTweak::getCallArg( addrExpr->get_arg(), 0 );211 Expression * inner = arg;212 arg = nullptr;213 delete addrExpr;214 return inner;215 178 } 216 179 return addrExpr; -
src/InitTweak/FixInit.cc
r5805d15 ra5de33e 401 401 402 402 bool ResolveCopyCtors::skipCopyConstruct( Type * type ) { 403 return dynamic_cast< VarArgsType * >( type ) || dynamic_cast< ReferenceType * >( type ) ||GenPoly::getFunctionType( type ) || Tuples::isTtype( type );403 return dynamic_cast< VarArgsType * >( type ) || GenPoly::getFunctionType( type ) || Tuples::isTtype( type ); 404 404 } 405 405 -
src/InitTweak/GenInit.cc
r5805d15 ra5de33e 239 239 std::list< DeclarationWithType * > & params = GenPoly::getFunctionType( dwt->get_type() )->get_parameters(); 240 240 assert( ! params.empty() ); 241 Type * type = InitTweak::getPointerBase( params.front()->get_type() ); 242 assert( type ); 243 managedTypes.insert( SymTab::Mangler::mangle( type ) ); 241 PointerType * type = safe_dynamic_cast< PointerType * >( params.front()->get_type() ); 242 managedTypes.insert( SymTab::Mangler::mangle( type->get_base() ) ); 244 243 } 245 244 } -
src/InitTweak/InitTweak.cc
r5805d15 ra5de33e 458 458 } else if ( ArrayType * arrayType = dynamic_cast< ArrayType * >( type ) ) { 459 459 return arrayType->get_base(); 460 } else if ( ReferenceType * refType = dynamic_cast< ReferenceType * >( type ) ) {461 return refType->get_base();462 460 } else { 463 461 return NULL; … … 545 543 if ( ftype->get_parameters().size() != 2 ) return 0; 546 544 547 Type * t1 = getPointerBase( ftype->get_parameters().front()->get_type());545 Type * t1 = ftype->get_parameters().front()->get_type(); 548 546 Type * t2 = ftype->get_parameters().back()->get_type(); 549 assert( t1 ); 550 551 if ( ResolvExpr::typesCompatibleIgnoreQualifiers( t1, t2, SymTab::Indexer() ) ) { 547 PointerType * ptrType = dynamic_cast< PointerType * > ( t1 ); 548 assert( ptrType ); 549 550 if ( ResolvExpr::typesCompatibleIgnoreQualifiers( ptrType->get_base(), t2, SymTab::Indexer() ) ) { 552 551 return function; 553 552 } else { -
src/Parser/DeclarationNode.cc
r5805d15 ra5de33e 329 329 } // DeclarationNode::newTypeDecl 330 330 331 DeclarationNode * DeclarationNode::newPointer( DeclarationNode * qualifiers , OperKinds kind) {332 DeclarationNode * newnode = new DeclarationNode; 333 newnode->type = new TypeData( kind == OperKinds::PointTo ? TypeData::Pointer : TypeData::Reference);331 DeclarationNode * DeclarationNode::newPointer( DeclarationNode * qualifiers ) { 332 DeclarationNode * newnode = new DeclarationNode; 333 newnode->type = new TypeData( TypeData::Pointer ); 334 334 if ( qualifiers ) { 335 335 return newnode->addQualifiers( qualifiers ); … … 748 748 DeclarationNode * DeclarationNode::addPointer( DeclarationNode * p ) { 749 749 if ( p ) { 750 assert( p->type->kind == TypeData::Pointer || TypeData::Reference);750 assert( p->type->kind == TypeData::Pointer ); 751 751 setBase( p->type ); 752 752 p->type = nullptr; -
src/Parser/ParseNode.h
r5805d15 ra5de33e 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 , OperKinds kind);239 static DeclarationNode * newPointer( DeclarationNode * qualifiers ); 240 240 static DeclarationNode * newArray( ExpressionNode * size, DeclarationNode * qualifiers, bool isStatic ); 241 241 static DeclarationNode * newVarArray( DeclarationNode * qualifiers ); -
src/Parser/TypeData.cc
r5805d15 ra5de33e 30 30 case Unknown: 31 31 case Pointer: 32 case Reference:33 32 case EnumConstant: 34 33 // nothing else to initialize … … 100 99 case Unknown: 101 100 case Pointer: 102 case Reference:103 101 case EnumConstant: 104 102 // nothing to destroy … … 167 165 case EnumConstant: 168 166 case Pointer: 169 case Reference:170 167 // nothing else to copy 171 168 break; … … 437 434 case TypeData::Array: 438 435 return buildArray( td ); 439 case TypeData::Reference:440 return buildReference( td );441 436 case TypeData::Function: 442 437 return buildFunction( td ); … … 617 612 buildForall( td->forall, at->get_forall() ); 618 613 return at; 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 614 } // buildPointer 631 615 632 616 AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ) { -
src/Parser/TypeData.h
r5805d15 ra5de33e 21 21 22 22 struct TypeData { 23 enum Kind { Basic, Pointer, Array, Reference,Function, Aggregate, AggregateInst, Enum, EnumConstant, Symbolic,23 enum Kind { Basic, Pointer, Array, 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 * );104 103 AggregateDecl * buildAggregate( const TypeData *, std::list< Attribute * > ); 105 104 ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes, LinkageSpec::Spec linkage ); -
src/Parser/parser.yy
r5805d15 ra5de33e 2387 2387 variable_ptr: 2388 2388 ptrref_operator variable_declarator 2389 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2389 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2390 2390 | ptrref_operator type_qualifier_list variable_declarator 2391 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2391 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2392 2392 | '(' variable_ptr ')' attribute_list_opt 2393 2393 { $$ = $2->addQualifiers( $4 ); } // redundant parenthesis … … 2435 2435 function_ptr: 2436 2436 ptrref_operator function_declarator 2437 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2437 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2438 2438 | ptrref_operator type_qualifier_list function_declarator 2439 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2439 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2440 2440 | '(' function_ptr ')' 2441 2441 { $$ = $2; } … … 2475 2475 KR_function_ptr: 2476 2476 ptrref_operator KR_function_declarator 2477 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2477 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2478 2478 | ptrref_operator type_qualifier_list KR_function_declarator 2479 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2479 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2480 2480 | '(' KR_function_ptr ')' 2481 2481 { $$ = $2; } … … 2519 2519 type_ptr: 2520 2520 ptrref_operator variable_type_redeclarator 2521 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2521 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2522 2522 | ptrref_operator type_qualifier_list variable_type_redeclarator 2523 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2523 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2524 2524 | '(' type_ptr ')' attribute_list_opt 2525 2525 { $$ = $2->addQualifiers( $4 ); } … … 2563 2563 identifier_parameter_ptr: 2564 2564 ptrref_operator identifier_parameter_declarator 2565 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2565 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2566 2566 | ptrref_operator type_qualifier_list identifier_parameter_declarator 2567 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2567 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2568 2568 | '(' identifier_parameter_ptr ')' attribute_list_opt 2569 2569 { $$ = $2->addQualifiers( $4 ); } … … 2623 2623 type_parameter_ptr: 2624 2624 ptrref_operator type_parameter_redeclarator 2625 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2625 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2626 2626 | ptrref_operator type_qualifier_list type_parameter_redeclarator 2627 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2627 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2628 2628 | '(' type_parameter_ptr ')' attribute_list_opt 2629 2629 { $$ = $2->addQualifiers( $4 ); } … … 2666 2666 abstract_ptr: 2667 2667 ptrref_operator 2668 { $$ = DeclarationNode::newPointer( 0 , $1); }2668 { $$ = DeclarationNode::newPointer( 0 ); } 2669 2669 | ptrref_operator type_qualifier_list 2670 { $$ = DeclarationNode::newPointer( $2 , $1); }2670 { $$ = DeclarationNode::newPointer( $2 ); } 2671 2671 | ptrref_operator abstract_declarator 2672 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2672 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2673 2673 | ptrref_operator type_qualifier_list abstract_declarator 2674 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2674 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2675 2675 | '(' abstract_ptr ')' attribute_list_opt 2676 2676 { $$ = $2->addQualifiers( $4 ); } … … 2755 2755 abstract_parameter_ptr: 2756 2756 ptrref_operator 2757 { $$ = DeclarationNode::newPointer( nullptr , $1); }2757 { $$ = DeclarationNode::newPointer( nullptr ); } 2758 2758 | ptrref_operator type_qualifier_list 2759 { $$ = DeclarationNode::newPointer( $2 , $1); }2759 { $$ = DeclarationNode::newPointer( $2 ); } 2760 2760 | ptrref_operator abstract_parameter_declarator 2761 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr , $1) ); }2761 { $$ = $2->addPointer( DeclarationNode::newPointer( nullptr ) ); } 2762 2762 | ptrref_operator type_qualifier_list abstract_parameter_declarator 2763 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2763 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2764 2764 | '(' abstract_parameter_ptr ')' attribute_list_opt 2765 2765 { $$ = $2->addQualifiers( $4 ); } … … 2834 2834 variable_abstract_ptr: 2835 2835 ptrref_operator 2836 { $$ = DeclarationNode::newPointer( 0 , $1); }2836 { $$ = DeclarationNode::newPointer( 0 ); } 2837 2837 | ptrref_operator type_qualifier_list 2838 { $$ = DeclarationNode::newPointer( $2 , $1); }2838 { $$ = DeclarationNode::newPointer( $2 ); } 2839 2839 | ptrref_operator variable_abstract_declarator 2840 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 , $1) ); }2840 { $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); } 2841 2841 | ptrref_operator type_qualifier_list variable_abstract_declarator 2842 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 , $1) ); }2842 { $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); } 2843 2843 | '(' variable_abstract_ptr ')' attribute_list_opt 2844 2844 { $$ = $2->addQualifiers( $4 ); } … … 2880 2880 // No SUE declaration in parameter list. 2881 2881 ptrref_operator type_specifier_nobody 2882 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2882 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2883 2883 | type_qualifier_list ptrref_operator type_specifier_nobody 2884 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2884 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2885 2885 | ptrref_operator cfa_abstract_function 2886 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2886 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2887 2887 | type_qualifier_list ptrref_operator cfa_abstract_function 2888 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2888 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2889 2889 | ptrref_operator cfa_identifier_parameter_declarator_tuple 2890 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2890 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2891 2891 | type_qualifier_list ptrref_operator cfa_identifier_parameter_declarator_tuple 2892 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2892 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2893 2893 ; 2894 2894 … … 2968 2968 cfa_abstract_ptr: // CFA 2969 2969 ptrref_operator type_specifier 2970 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2970 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2971 2971 | type_qualifier_list ptrref_operator type_specifier 2972 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2972 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2973 2973 | ptrref_operator cfa_abstract_function 2974 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2974 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2975 2975 | type_qualifier_list ptrref_operator cfa_abstract_function 2976 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2976 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2977 2977 | ptrref_operator cfa_abstract_declarator_tuple 2978 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 , $1) ); }2978 { $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); } 2979 2979 | type_qualifier_list ptrref_operator cfa_abstract_declarator_tuple 2980 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 , $2) ); }2980 { $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); } 2981 2981 ; 2982 2982 -
src/ResolvExpr/Unify.cc
r5805d15 ra5de33e 42 42 virtual void visit(PointerType *pointerType); 43 43 virtual void visit(ArrayType *arrayType); 44 virtual void visit(ReferenceType *refType);45 44 virtual void visit(FunctionType *functionType); 46 45 virtual void visit(StructInstType *aggregateUseType); … … 429 428 } 430 429 431 void Unify::visit(ReferenceType *refType) {432 if ( ReferenceType *otherRef = dynamic_cast< ReferenceType* >( type2 ) ) {433 result = unifyExact( refType->get_base(), otherRef->get_base(), env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer );434 markAssertions( haveAssertions, needAssertions, refType );435 markAssertions( haveAssertions, needAssertions, otherRef );436 } // if437 }438 439 430 void Unify::visit(ArrayType *arrayType) { 440 431 ArrayType *otherArray = dynamic_cast< ArrayType* >( type2 ); -
src/SymTab/Autogen.cc
r5805d15 ra5de33e 176 176 FunctionType * ftype = funcDecl->get_functionType(); 177 177 assert( ! ftype->get_parameters().empty() ); 178 Type * t = InitTweak::getPointerBase( ftype->get_parameters().front()->get_type() ); 179 assert( t ); 178 Type * t = safe_dynamic_cast< PointerType * >( ftype->get_parameters().front()->get_type() )->get_base(); 180 179 map.insert( Mangler::mangleType( t ), true ); 181 180 } -
src/SymTab/Indexer.cc
r5805d15 ra5de33e 158 158 assert( ! params.empty() ); 159 159 // use base type of pointer, so that qualifiers on the pointer type aren't considered. 160 Type * base = InitTweak::getPointerBase( params.front()->get_type() ); 161 assert( base ); 160 Type * base = safe_dynamic_cast< PointerType * >( params.front()->get_type() )->get_base(); 162 161 funcMap[ Mangler::mangle( base ) ] += function; 163 162 } else { -
src/SymTab/Validate.cc
r5805d15 ra5de33e 824 824 } 825 825 PointerType * ptrType = dynamic_cast< PointerType * >( params.front()->get_type() ); 826 ReferenceType * refType = dynamic_cast< ReferenceType * >( params.front()->get_type() ); 827 if ( ( ! ptrType && ! refType ) || ( ptrType && ptrType->is_array() ) ) { 826 if ( ! ptrType || ptrType->is_array() ) { 828 827 throw SemanticError( "First parameter of a constructor, destructor, or assignment function must be a pointer ", funcDecl ); 829 828 } -
src/SynTree/AddressExpr.cc
r5805d15 ra5de33e 20 20 AddressExpr::AddressExpr( Expression *arg, Expression *_aname ) : Expression( _aname ), arg( arg ) { 21 21 if ( arg->has_result() ) { 22 if ( ReferenceType * refType = dynamic_cast< ReferenceType * > ( arg->get_result() ) ) { 23 // xxx - very temporary, make &ref look like ** 24 set_result( new PointerType( Type::Qualifiers( Type::Lvalue ), refType->get_base()->clone() ) ); 25 } else { 26 set_result( new PointerType( Type::Qualifiers(), arg->get_result()->clone() ) ); 27 } 22 set_result( new PointerType( Type::Qualifiers(), arg->get_result()->clone() ) ); 28 23 } 29 24 } -
src/SynTree/Mutator.cc
r5805d15 ra5de33e 473 473 } 474 474 475 Type *Mutator::mutate( ReferenceType *refType ) {476 mutateAll( refType->get_forall(), *this );477 refType->set_base( maybeMutate( refType->get_base(), *this ) );478 return refType;479 }480 481 475 Type *Mutator::mutate( FunctionType *functionType ) { 482 476 mutateAll( functionType->get_forall(), *this ); -
src/SynTree/Mutator.h
r5805d15 ra5de33e 92 92 virtual Type* mutate( PointerType *pointerType ); 93 93 virtual Type* mutate( ArrayType *arrayType ); 94 virtual Type* mutate( ReferenceType *refType );95 94 virtual Type* mutate( FunctionType *functionType ); 96 95 virtual Type* mutate( StructInstType *aggregateUseType ); -
src/SynTree/SynTree.h
r5805d15 ra5de33e 101 101 class PointerType; 102 102 class ArrayType; 103 class ReferenceType;104 103 class FunctionType; 105 104 class ReferenceToType; -
src/SynTree/Type.h
r5805d15 ra5de33e 249 249 bool is_array() const { return isStatic || isVarLen || dimension; } 250 250 251 virtual bool isComplete() const { return ! isVarLen; }252 253 251 virtual PointerType *clone() const { return new PointerType( *this ); } 254 252 virtual void accept( Visitor & v ) { v.visit( this ); } … … 292 290 }; 293 291 294 class ReferenceType : public Type {295 public:296 ReferenceType( const Type::Qualifiers & tq, Type *base, const std::list< Attribute * > & attributes = std::list< Attribute * >() );297 ReferenceType( const ReferenceType & );298 virtual ~ReferenceType();299 300 Type *get_base() { return base; }301 void set_base( Type *newValue ) { base = newValue; }302 303 virtual ReferenceType *clone() const { return new ReferenceType( *this ); }304 virtual void accept( Visitor & v ) { v.visit( this ); }305 virtual Type *acceptMutator( Mutator & m ) { return m.mutate( this ); }306 virtual void print( std::ostream & os, int indent = 0 ) const;307 private:308 Type *base;309 };310 311 292 class FunctionType : public Type { 312 293 public: -
src/SynTree/Visitor.cc
r5805d15 ra5de33e 363 363 void Visitor::visit( PointerType *pointerType ) { 364 364 acceptAll( pointerType->get_forall(), *this ); 365 // xxx - should PointerType visit/mutate dimension?366 365 maybeAccept( pointerType->get_base(), *this ); 367 366 } … … 371 370 maybeAccept( arrayType->get_dimension(), *this ); 372 371 maybeAccept( arrayType->get_base(), *this ); 373 }374 375 void Visitor::visit( ReferenceType *refType ) {376 acceptAll( refType->get_forall(), *this );377 maybeAccept( refType->get_base(), *this );378 372 } 379 373 -
src/SynTree/Visitor.h
r5805d15 ra5de33e 95 95 virtual void visit( PointerType *pointerType ); 96 96 virtual void visit( ArrayType *arrayType ); 97 virtual void visit( ReferenceType *refType );98 97 virtual void visit( FunctionType *functionType ); 99 98 virtual void visit( StructInstType *aggregateUseType ); -
src/SynTree/module.mk
r5805d15 ra5de33e 20 20 SynTree/PointerType.cc \ 21 21 SynTree/ArrayType.cc \ 22 SynTree/ReferenceType.cc \23 22 SynTree/FunctionType.cc \ 24 23 SynTree/ReferenceToType.cc \
Note:
See TracChangeset
for help on using the changeset viewer.