Changeset d9fa60a for src/Tuples
- Timestamp:
- Nov 16, 2016, 4:37:50 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:
- 186fd86
- Parents:
- 33a7b6d
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/Tuples/TupleExpansion.cc ¶
r33a7b6d rd9fa60a 93 93 typedef Mutator Parent; 94 94 using Parent::mutate; 95 95 96 96 virtual Expression * mutate( TupleExpr * tupleExpr ) override; 97 97 }; … … 218 218 Type * TupleTypeReplacer::mutate( TupleType * tupleType ) { 219 219 std::string mangleName = SymTab::Mangler::mangleType( tupleType ); 220 TupleType * newType = safe_dynamic_cast< TupleType * > ( Parent::mutate( tupleType ) );220 tupleType = safe_dynamic_cast< TupleType * > ( Parent::mutate( tupleType ) ); 221 221 if ( ! typeMap.count( mangleName ) ) { 222 222 // generate struct type to replace tuple type 223 223 StructDecl * decl = new StructDecl( "_tuple_type_" + mangleName ); 224 224 decl->set_body( true ); 225 int cnt = 0; 226 for ( Type * t : *newType ) { 227 decl->get_members().push_back( new ObjectDecl( toString("field_", cnt++), DeclarationNode::NoStorageClass, LinkageSpec::C, nullptr, t->clone(), nullptr ) ); 225 for ( size_t i = 0; i < tupleType->size(); ++i ) { 226 TypeDecl * tyParam = new TypeDecl( toString("tuple_param_", i), DeclarationNode::NoStorageClass, nullptr, TypeDecl::Any ); 227 decl->get_members().push_back( new ObjectDecl( toString("field_", i), DeclarationNode::NoStorageClass, LinkageSpec::C, nullptr, new TypeInstType( Type::Qualifiers(), tyParam->get_name(), tyParam ), nullptr ) ); 228 decl->get_parameters().push_back( tyParam ); 228 229 } 229 230 typeMap[mangleName] = decl; 230 231 addDeclaration( decl ); 231 232 } 232 Type::Qualifiers qualifiers = newType->get_qualifiers(); 233 delete newType; 234 return new StructInstType( qualifiers, typeMap[mangleName] ); 233 Type::Qualifiers qualifiers = tupleType->get_qualifiers(); 234 235 StructDecl * decl = typeMap[mangleName]; 236 StructInstType * newType = new StructInstType( qualifiers, decl ); 237 for ( Type * t : *tupleType ) { 238 newType->get_parameters().push_back( new TypeExpr( t->clone() ) ); 239 } 240 delete tupleType; 241 return newType; 235 242 } 236 243
Note: See TracChangeset
for help on using the changeset viewer.