Changeset b7b8674
- Timestamp:
- Feb 8, 2017, 5:04:20 PM (8 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:
- aa9ee19
- Parents:
- 52c14b3
- Location:
- src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/InitTweak/FixInit.cc
r52c14b3 rb7b8674 1116 1116 // xxx - is the size check necessary? 1117 1117 assert( ctorExpr->has_result() && ctorExpr->get_result()->size() == 1 ); 1118 1119 // xxx - ideally we would reuse the temporary generated from the copy constructor passes from within firstArg if it exists and not generate a temporary if it's unnecessary. 1118 1120 ObjectDecl * tmp = new ObjectDecl( tempNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, nullptr, ctorExpr->get_result()->clone(), nullptr ); 1119 1121 addDeclaration( tmp ); -
src/InitTweak/InitTweak.cc
r52c14b3 rb7b8674 332 332 return nullptr; 333 333 } 334 } 335 336 DeclarationWithType * getFunction( Expression * expr ) { 337 if ( ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr ) ) { 338 return getCalledFunction( appExpr->get_function() ); 339 } else if ( UntypedExpr * untyped = dynamic_cast< UntypedExpr * > ( expr ) ) { 340 return getCalledFunction( untyped->get_function() ); 341 } 342 assertf( false, "getFunction received unknown expression: %s", toString( expr ).c_str() ); 334 343 } 335 344 -
src/InitTweak/InitTweak.h
r52c14b3 rb7b8674 51 51 bool checkInitDepth( ObjectDecl * objDecl ); 52 52 53 /// Non-Null if expr is a call expression whose target function is intrinsic 54 ApplicationExpr * isIntrinsicCallExpr( Expression * expr ); 53 /// returns the declaration of the function called by the expr (must be ApplicationExpr or UntypedExpr) 54 DeclarationWithType * getFunction( Expression * expr ); 55 56 /// Non-Null if expr is a call expression whose target function is intrinsic 57 ApplicationExpr * isIntrinsicCallExpr( Expression * expr ); 55 58 56 59 /// True if stmt is a call statement where the function called is intrinsic and takes one parameter. -
src/Tuples/TupleExpansion.cc
r52c14b3 rb7b8674 29 29 #include "ResolvExpr/typeops.h" 30 30 #include "InitTweak/GenInit.h" 31 #include "InitTweak/InitTweak.h" 31 32 32 33 namespace Tuples { … … 337 338 public: 338 339 typedef Visitor Parent; 339 virtual void visit( ApplicationExpr * appExpr ) { maybeImpure = true; } 340 virtual void visit( ApplicationExpr * appExpr ) { 341 if ( DeclarationWithType * function = InitTweak::getFunction( appExpr ) ) { 342 if ( function->get_linkage() == LinkageSpec::Intrinsic ) { 343 if ( function->get_name() == "*?" || function->get_name() == "?[?]" ) { 344 // intrinsic dereference, subscript are pure, but need to recursively look for impurity 345 Parent::visit( appExpr ); 346 return; 347 } 348 } 349 } 350 maybeImpure = true; 351 } 340 352 virtual void visit( UntypedExpr * untypedExpr ) { maybeImpure = true; } 341 353 bool maybeImpure = false;
Note: See TracChangeset
for help on using the changeset viewer.