Changeset c194661 for src/Parser


Ignore:
Timestamp:
Jun 20, 2018, 11:23:42 AM (6 years ago)
Author:
Rob Schluntz <rschlunt@…>
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, no_list, persistent-indexer, pthread-emulation, qualifiedEnum
Children:
0b3b2ae
Parents:
9a7a3b6
Message:

Reorganize QualifiedType? node

Location:
src/Parser
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/DeclarationNode.cc

    r9a7a3b6 rc194661  
    261261
    262262DeclarationNode * DeclarationNode::newQualifiedType( DeclarationNode * parent, DeclarationNode * child) {
    263         return child;
    264         // return parent->add_last( child );
     263        DeclarationNode * newnode = new DeclarationNode;
     264        newnode->type = new TypeData( TypeData::Qualified );
     265        newnode->type->qualified.parent = parent->type;
     266        newnode->type->qualified.child = child->type;
     267        parent->type = nullptr;
     268        child->type = nullptr;
     269        delete parent;
     270        delete child;
     271        return newnode;
    265272}
    266273
  • src/Parser/TypeData.cc

    r9a7a3b6 rc194661  
    9999          case Builtin:
    100100                // builtin = new Builtin_t;
     101                case Qualified:
     102                qualified.parent = nullptr;
     103                qualified.child = nullptr;
    101104                break;
    102105        } // switch
     
    167170                // delete builtin;
    168171                break;
     172          case Qualified:
     173                delete qualified.parent;
     174                delete qualified.child;
    169175        } // switch
    170176} // TypeData::~TypeData
     
    240246                assert( builtintype == DeclarationNode::Zero || builtintype == DeclarationNode::One );
    241247                newtype->builtintype = builtintype;
     248                break;
     249                case Qualified:
     250                newtype->qualified.parent = maybeClone( qualified.parent );
     251                newtype->qualified.child = maybeClone( qualified.child );
    242252                break;
    243253        } // switch
     
    468478                return new EnumInstType( buildQualifiers( td ), "" );
    469479          case TypeData::SymbolicInst:
    470                 return buildSymbolicInst( td );;
     480                return buildSymbolicInst( td );
    471481          case TypeData::Tuple:
    472482                return buildTuple( td );
     
    483493                        return new VarArgsType( buildQualifiers( td ) );
    484494                }
     495          case TypeData::GlobalScope:
     496                return new GlobalScopeType();
     497                case TypeData::Qualified:
     498                return new QualifiedType( buildQualifiers( td ), typebuild( td->qualified.parent ), typebuild( td->qualified.child ) );
    485499          case TypeData::Symbolic:
    486500          case TypeData::Enum:
     
    488502                assert( false );
    489503        } // switch
     504
    490505        return nullptr;
    491506} // typebuild
  • src/Parser/TypeData.h

    r9a7a3b6 rc194661  
    2727struct TypeData {
    2828        enum Kind { Basic, Pointer, Array, Reference, Function, Aggregate, AggregateInst, Enum, EnumConstant, Symbolic,
    29                                 SymbolicInst, Tuple, Typeof, Builtin, GlobalScope, Unknown };
     29                                SymbolicInst, Tuple, Typeof, Builtin, GlobalScope, Qualified, Unknown };
    3030
    3131        struct Aggregate_t {
     
    7575        };
    7676
     77        struct Qualified_t { // qualified type S.T
     78                TypeData * parent;
     79                TypeData * child;
     80        };
     81
    7782        CodeLocation location;
    7883
     
    9499        Function_t function;
    95100        Symbolic_t symbolic;
     101        Qualified_t qualified;
    96102        DeclarationNode * tuple;
    97103        ExpressionNode * typeexpr;
Note: See TracChangeset for help on using the changeset viewer.