Changeset 2b79a70 for src/SymTab
- Timestamp:
- Aug 21, 2018, 2:21:53 PM (6 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
- Children:
- cdbab55
- Parents:
- 51fcdbc7
- git-author:
- Rob Schluntz <rschlunt@…> (08/21/18 13:23:01)
- git-committer:
- Rob Schluntz <rschlunt@…> (08/21/18 14:21:53)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Validate.cc
r51fcdbc7 r2b79a70 62 62 #include "ResolvExpr/typeops.h" // for typesCompatible 63 63 #include "ResolvExpr/Resolver.h" // for findSingleExpression 64 #include "ResolvExpr/ResolveTypeof.h" // for resolveTypeof 64 65 #include "SymTab/Autogen.h" // for SizeType 65 66 #include "SynTree/Attribute.h" // for noAttributes, Attribute … … 247 248 void previsit( StructInstType * inst ); 248 249 void previsit( UnionInstType * inst ); 250 }; 251 252 struct FixObjectType : public WithIndexer { 253 /// resolves typeof type in object, function, and type declarations 254 static void fix( std::list< Declaration * > & translationUnit ); 255 256 void previsit( ObjectDecl * ); 257 void previsit( FunctionDecl * ); 258 void previsit( TypeDecl * ); 249 259 }; 250 260 … … 312 322 Concurrency::implementThreadStarter( translationUnit ); 313 323 mutateAll( translationUnit, compoundliteral ); 324 FixObjectType::fix( translationUnit ); 314 325 ArrayLength::computeLength( translationUnit ); 315 326 acceptAll( translationUnit, finder ); // xxx - remove this pass soon … … 1238 1249 } 1239 1250 1251 void FixObjectType::fix( std::list< Declaration * > & translationUnit ) { 1252 PassVisitor<FixObjectType> fixer; 1253 acceptAll( translationUnit, fixer ); 1254 } 1255 1256 void FixObjectType::previsit( ObjectDecl * objDecl ) { 1257 Type *new_type = ResolvExpr::resolveTypeof( objDecl->get_type(), indexer ); 1258 new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type 1259 objDecl->set_type( new_type ); 1260 } 1261 1262 void FixObjectType::previsit( FunctionDecl * funcDecl ) { 1263 Type *new_type = ResolvExpr::resolveTypeof( funcDecl->type, indexer ); 1264 new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type 1265 funcDecl->set_type( new_type ); 1266 } 1267 1268 void FixObjectType::previsit( TypeDecl *typeDecl ) { 1269 if ( typeDecl->get_base() ) { 1270 Type *new_type = ResolvExpr::resolveTypeof( typeDecl->get_base(), indexer ); 1271 new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type 1272 typeDecl->set_base( new_type ); 1273 } // if 1274 } 1275 1240 1276 void ArrayLength::computeLength( std::list< Declaration * > & translationUnit ) { 1241 1277 PassVisitor<ArrayLength> len;
Note: See TracChangeset
for help on using the changeset viewer.