Changeset aaeacf4 for src/SynTree
- Timestamp:
- Jun 12, 2019, 4:06:32 PM (6 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 21300d7
- Parents:
- 6e3e0717
- Location:
- src/SynTree
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/ApplicationExpr.cc
r6e3e0717 raaeacf4 29 29 30 30 ParamEntry::ParamEntry( const ParamEntry &other ) : 31 decl( other.decl ), actualType( maybeClone( other.actualType ) ), formalType( maybeClone( other.formalType ) ), expr( maybeClone( other.expr ) )/*, inferParams( new InferredParams( *other.inferParams ) )*/ {31 decl( other.decl ), declptr( maybeClone( other.declptr ) ), actualType( maybeClone( other.actualType ) ), formalType( maybeClone( other.formalType ) ), expr( maybeClone( other.expr ) )/*, inferParams( new InferredParams( *other.inferParams ) )*/ { 32 32 } 33 33 34 34 ParamEntry &ParamEntry::operator=( const ParamEntry &other ) { 35 35 if ( &other == this ) return *this; 36 decl = other.decl; 36 const_cast<UniqueId &>(decl) = other.decl; 37 const_cast<Declaration * &>(declptr) = maybeClone( other.declptr ); 37 38 // xxx - this looks like a memory leak 38 actualType= maybeClone( other.actualType );39 formalType= maybeClone( other.formalType );39 const_cast<Type * &>(actualType) = maybeClone( other.actualType ); 40 const_cast<Type * &>(formalType) = maybeClone( other.formalType ); 40 41 expr = maybeClone( other.expr ); 41 42 // *inferParams = *other.inferParams; … … 44 45 45 46 ParamEntry::~ParamEntry() { 47 delete declptr; 46 48 delete actualType; 47 49 delete formalType; … … 50 52 51 53 ParamEntry::ParamEntry( ParamEntry && other ) : 52 decl( other.decl ), actualType( other.actualType ), formalType( other.formalType ), expr( other.expr )/*, inferParams( std::move( other.inferParams ) )*/ { 53 other.actualType = nullptr; 54 other.formalType = nullptr; 54 decl( other.decl ), declptr( other.declptr ), actualType( other.actualType ), formalType( other.formalType ), expr( other.expr )/*, inferParams( std::move( other.inferParams ) )*/ { 55 const_cast<Declaration * &>(other.declptr) = nullptr; 56 const_cast<Type * &>(other.actualType) = nullptr; 57 const_cast<Type * &>(other.formalType) = nullptr; 55 58 other.expr = nullptr; 56 59 } … … 58 61 ParamEntry & ParamEntry::operator=( ParamEntry && other ) { 59 62 if ( &other == this ) return *this; 63 delete declptr; 60 64 delete actualType; 61 65 delete formalType; 62 66 delete expr; 63 decl = other.decl; 64 actualType = other.actualType; 65 formalType = other.formalType; 67 const_cast<UniqueId &>(decl) = other.decl; 68 const_cast<Declaration * &>(declptr) = other.declptr; 69 const_cast<Type * &>(actualType) = other.actualType; 70 const_cast<Type * &>(formalType) = other.formalType; 66 71 expr = other.expr; 67 other.actualType = nullptr; 68 other.formalType = nullptr; 72 const_cast<Declaration * &>(other.declptr) = nullptr; 73 const_cast<Type * &>(other.actualType) = nullptr; 74 const_cast<Type * &>(other.formalType) = nullptr; 69 75 other.expr = nullptr; 70 76 // inferParams = std::move( other.inferParams ); -
src/SynTree/Declaration.cc
r6e3e0717 raaeacf4 27 27 28 28 static UniqueId lastUniqueId = 0; 29 typedef std::map< UniqueId, Declaration* > IdMapType;30 static IdMapType idMap;31 29 32 30 Declaration::Declaration( const std::string &name, Type::StorageClasses scs, LinkageSpec::Spec linkage ) … … 45 43 if ( uniqueId ) return; 46 44 uniqueId = ++lastUniqueId; 47 idMap[ uniqueId ] = this;48 45 } 49 50 Declaration *Declaration::declFromId( UniqueId id ) {51 IdMapType::const_iterator i = idMap.find( id );52 return i != idMap.end() ? i->second : 0;53 }54 55 void Declaration::dumpIds( std::ostream &os ) {56 for ( IdMapType::const_iterator i = idMap.begin(); i != idMap.end(); ++i ) {57 os << i->first << " -> ";58 i->second->printShort( os );59 os << std::endl;60 } // for61 }62 63 46 64 47 AsmDecl::AsmDecl( AsmStmt *stmt ) : Declaration( "", Type::StorageClasses(), LinkageSpec::C ), stmt( stmt ) { -
src/SynTree/Declaration.h
r6e3e0717 raaeacf4 68 68 virtual void printShort( std::ostream &os, Indenter indent = {} ) const = 0; 69 69 70 static void dumpIds( std::ostream &os );71 static Declaration *declFromId( UniqueId id );72 73 70 UniqueId uniqueId; 74 71 Type::StorageClasses storageClasses; -
src/SynTree/Expression.cc
r6e3e0717 raaeacf4 38 38 for ( InferredParams::const_iterator i = inferParams.begin(); i != inferParams.end(); ++i ) { 39 39 os << indent+1; 40 Declaration::declFromId( i->second.decl )->printShort( os, indent+1 ); 40 assert(i->second.declptr); 41 i->second.declptr->printShort( os, indent+1 ); 41 42 os << std::endl; 42 43 printInferParams( i->second.expr->inferParams, os, indent+1, level+1 ); -
src/SynTree/Expression.h
r6e3e0717 raaeacf4 39 39 /// but subject to decay-to-pointer and type parameter renaming 40 40 struct ParamEntry { 41 ParamEntry(): decl( 0 ), actualType( 0 ), formalType( 0 ), expr( 0 )/*, inferParams( new InferredParams )*/ {} 42 ParamEntry( UniqueId decl, Type * actualType, Type * formalType, Expression* expr ): decl( decl ), actualType( actualType ), formalType( formalType ), expr( expr )/*, inferParams( new InferredParams )*/ {} 41 ParamEntry(): decl( 0 ), declptr(nullptr), actualType( 0 ), formalType( 0 ), expr( 0 )/*, inferParams( new InferredParams )*/ {} 42 ParamEntry( UniqueId decl, Declaration * declptr, Type * actualType, Type * formalType, Expression* expr ) 43 : decl( decl ), declptr( declptr ), actualType( actualType ), formalType( formalType ), expr( expr )/*, inferParams( new InferredParams )*/ { 44 } 43 45 ParamEntry( const ParamEntry & other ); 44 46 ParamEntry( ParamEntry && other ); … … 47 49 ParamEntry & operator=( ParamEntry && other ); 48 50 49 UniqueId decl; 50 Type * actualType; 51 Type * formalType; 51 UniqueId const decl; 52 Declaration * const declptr; 53 Type * const actualType; 54 Type * const formalType; 52 55 Expression * expr; 53 56 // std::unique_ptr< InferredParams > inferParams;
Note:
See TracChangeset
for help on using the changeset viewer.