Changeset 1df492a
- Timestamp:
- Jun 21, 2022, 1:39:14 PM (12 months ago)
- Branches:
- ADT, master, pthread-emulation, qualifiedEnum
- Children:
- eb5962a
- Parents:
- fc134a48
- Location:
- src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Pass.impl.hpp
rfc134a48 r1df492a 650 650 if ( __visit_children() ) { 651 651 // unlike structs, traits, and unions, enums inject their members into the global scope 652 maybe_accept( node, &EnumDecl::base ); 652 653 maybe_accept( node, &EnumDecl::params ); 653 654 maybe_accept( node, &EnumDecl::members ); -
src/ResolvExpr/CurrentObject.cc
rfc134a48 r1df492a 73 73 virtual void setPosition( std::list< Expression * > & designators ) = 0; 74 74 75 /// retrieve the list of possible Type/Designat on pairs for the current position in the currect object75 /// retrieve the list of possible Type/Designation pairs for the current position in the currect object 76 76 virtual std::list<InitAlternative> operator*() const = 0; 77 77 -
src/SymTab/ValidateType.cc
rfc134a48 r1df492a 222 222 // visit enum members first so that the types of self-referencing members are updated properly 223 223 // Replace the enum base; right now it works only for StructEnum 224 if ( enumDecl->base && dynamic_cast<TypeInstType*>(enumDecl->base) ) { 225 std::string baseName = static_cast<TypeInstType*>(enumDecl->base)->name; 226 const StructDecl * st = local_indexer->lookupStruct( baseName ); 227 if ( st ) { 228 enumDecl->base = new StructInstType(Type::Qualifiers(),const_cast<StructDecl *>(st)); // Just linking in the node 224 if ( enumDecl->base ) { 225 if ( const TypeInstType * base = dynamic_cast< TypeInstType * >(enumDecl->base) ) { 226 if ( const StructDecl * decl = local_indexer->lookupStruct( base->name ) ) { 227 enumDecl->base = new StructInstType( Type::Qualifiers(), const_cast< StructDecl * >( decl ) ); // Just linking in the node 228 } 229 } else if ( const PointerType * ptr = dynamic_cast< PointerType * >(enumDecl->base) ) { 230 if ( const TypeInstType * ptrBase = dynamic_cast< TypeInstType * >( ptr->base ) ) { 231 if ( const StructDecl * decl = local_indexer->lookupStruct( ptrBase->name ) ) { 232 enumDecl->base = new PointerType( Type::Qualifiers(), 233 new StructInstType( Type::Qualifiers(), const_cast< StructDecl * >( decl ) ) ); 234 } 235 } 229 236 } 230 237 } 238 231 239 if ( enumDecl->body ) { 232 240 ForwardEnumsType::iterator fwds = forwardEnums.find( enumDecl->name ); -
src/SynTree/Type.h
rfc134a48 r1df492a 274 274 class PointerType : public Type { 275 275 public: 276 Type * base;276 Type * base; 277 277 278 278 // In C99, pointer types can be qualified in many ways e.g., int f( int a[ static 3 ] ) … … 516 516 typedef ReferenceToType Parent; 517 517 public: 518 // this decl is not "owned" by the unioninst; it is merely a pointer to elsewhere in the tree,519 // where the unionused in this type is actually defined518 // this decl is not "owned" by the enum inst; it is merely a pointer to elsewhere in the tree, 519 // where the enum used in this type is actually defined 520 520 EnumDecl *baseEnum = nullptr; 521 521
Note: See TracChangeset
for help on using the changeset viewer.