Changeset 5408b59


Ignore:
Timestamp:
Oct 18, 2022, 9:12:19 PM (18 months ago)
Author:
JiadaL <j82liang@…>
Branches:
ADT, ast-experimental, master
Children:
c2b3243
Parents:
1e30df7
Message:

Remove var in QualifiedNameExpr?

Location:
src
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Convert.cpp

    r1e30df7 r5408b59  
    310310                        node->name,
    311311                        get<Attribute>().acceptL( node->attributes ),
    312                         false, // Temporary
     312                        node->isTyped,
    313313                        LinkageSpec::Spec( node->linkage.val ),
    314314                        get<Type>().accept1(node->base)
    315315                );
    316                 return aggregatePostamble( decl, node ); // Node info, including members, processed in aggregatePostamble
     316                return aggregatePostamble( decl, node );
    317317        }
    318318
     
    737737                                node->name
    738738                );
    739                 temp->var = get<DeclarationWithType>().accept1(node->var);
    740739                auto expr = visitBaseExpr( node,
    741740                        temp
     
    22822281        }
    22832282
    2284         /// xxx - type_decl should be DeclWithType in the final design
    2285         /// type_decl is set to EnumDecl as a temporary fix
    22862283        virtual void visit( const QualifiedNameExpr * old ) override final {
    22872284                this->node = visitBaseExpr( old,
     
    22892286                                old->location,
    22902287                                GET_ACCEPT_1(type_decl, Decl),
    2291                                 GET_ACCEPT_1(var, DeclWithType),
    22922288                                old->name
    22932289                        )
  • src/AST/Decl.hpp

    r1e30df7 r5408b59  
    315315class EnumDecl final : public AggregateDecl {
    316316public:
    317         bool isTyped;
    318         ptr<Type> base;
     317        bool isTyped; // isTyped indicated if the enum has a declaration like:
     318        // enum (type_optional) Name {...}
     319        ptr<Type> base; // if isTyped == true && base.get() == nullptr, it is a "void" type enum
    319320
    320321        EnumDecl( const CodeLocation& loc, const std::string& name, bool isTyped = false,
  • src/AST/Expr.hpp

    r1e30df7 r5408b59  
    257257public:
    258258        ptr<Decl> type_decl;
    259         ptr<DeclWithType> var;
    260259        std::string name;
    261260
    262         QualifiedNameExpr( const CodeLocation & loc, const Decl * d, const DeclWithType * r, const std::string & n )
    263         : Expr( loc ), type_decl( d ), var(r), name( n ) {}
     261        QualifiedNameExpr( const CodeLocation & loc, const Decl * d, const std::string & n )
     262        : Expr( loc ), type_decl( d ), name( n ) {}
    264263
    265264        const Expr * accept( Visitor & v ) const override { return v.visit( this ); }
  • src/AST/Pass.impl.hpp

    r1e30df7 r5408b59  
    12051205        if ( __visit_children() ) {
    12061206                guard_symtab guard { *this };
    1207                 maybe_accept( node, &QualifiedNameExpr::var );
    12081207                maybe_accept( node, &QualifiedNameExpr::type_decl );
    12091208        }
  • src/CodeGen/CodeGenerator.cc

    r1e30df7 r5408b59  
    912912                }
    913913                output << ")";
    914         }
    915 
    916         // QualifiedNameExpr should not reach to CodeGen.
    917         // FixQualifiedName Convert QualifiedNameExpr to VariableExpr
    918         void CodeGenerator::postvisit( QualifiedNameExpr * expr ) {
    919                 output << "/* label */" << mangleName(expr->var);
    920914        }
    921915
  • src/CodeGen/CodeGenerator.h

    r1e30df7 r5408b59  
    103103                void postvisit( DefaultArgExpr * );
    104104                void postvisit( GenericExpr * );
    105                 void postvisit( QualifiedNameExpr *);
    106105
    107106                //*** Statements
  • src/Common/PassVisitor.impl.h

    r1e30df7 r5408b59  
    19341934        indexerScopedAccept( node->result, *this );
    19351935        maybeAccept_impl( node->type_decl, *this );
    1936         maybeAccept_impl( node->var, *this );
    19371936
    19381937        VISIT_END( node );
     
    19451944        indexerScopedAccept( node->result, *this );
    19461945        maybeAccept_impl( node->type_decl, *this );
    1947         maybeAccept_impl( node->var, *this );
    19481946
    19491947        VISIT_END( node );
     
    19571955    indexerScopedMutate( node->result, *this );
    19581956        maybeMutate_impl( node->type_decl, *this );
    1959         maybeAccept_impl( node->var, *this );
    19601957
    19611958        MUTATE_END( Expression, node );
  • src/Parser/ExpressionNode.cc

    r1e30df7 r5408b59  
    523523                auto enumInst = new EnumInstType( Type::Qualifiers(), e );
    524524                auto obj = new ObjectDecl( name->name, Type::StorageClasses(), LinkageSpec::Cforall, nullptr, enumInst, nullptr );
    525                 ret->set_var( obj );
    526525        }
    527526        return ret;
  • src/ResolvExpr/CandidateFinder.cpp

    r1e30df7 r5408b59  
    862862                                }
    863863                        }
    864                 }
    865 
    866                 void postvisit( const ast::QualifiedNameExpr * qualifiedNameExpr ) {
    867                         auto mangleName = Mangle::mangle(qualifiedNameExpr->var);
    868                         addCandidate( qualifiedNameExpr, tenv );
    869864                }
    870865
  • src/SymTab/Mangler.cc

    r1e30df7 r5408b59  
    6565                                void postvisit( const QualifiedType * qualType );
    6666
    67                                 void postvisit( const QualifiedNameExpr * qualNameExpr );
    68 
    6967                                std::string get_mangleName() { return mangleName; }
    7068                          private:
     
    307305                                        mangleName += Encoding::qualifiedTypeEnd;
    308306                                }
    309                         }
    310 
    311                         void Mangler_old::postvisit( const QualifiedNameExpr * qual ) {
    312                                 maybeAccept( qual->var, *visitor );
    313307                        }
    314308
     
    423417                        void postvisit( const ast::OneType * oneType );
    424418                        void postvisit( const ast::QualifiedType * qualType );
    425                         void postvisit( const ast::QualifiedNameExpr * qualNameExpr );
    426419
    427420                        std::string get_mangleName() { return mangleName; }
     
    652645                                mangleName += Encoding::qualifiedTypeEnd;
    653646                        }
    654                 }
    655                 void Mangler_new::postvisit( const ast::QualifiedNameExpr * qual ) {
    656                         maybeAccept( qual->var.get(), *visitor );
    657647                }
    658648
  • src/SymTab/Validate.cc

    r1e30df7 r5408b59  
    858858                        declsToAddBefore.push_back( new UnionDecl( aggDecl->name, noAttributes, tyDecl->linkage ) );
    859859                } else if ( EnumInstType * enumInst = dynamic_cast< EnumInstType * >( designatorType ) ) {
    860                         // declsToAddBefore.push_back( new EnumDecl( enumDecl->name, noAttributes, tyDecl->linkage, enumDecl->baseEnum->base ) );
    861860                        if ( enumInst->baseEnum ) {
    862861                                const EnumDecl * enumDecl = enumInst->baseEnum;
  • src/SymTab/ValidateType.cc

    r1e30df7 r5408b59  
    8181        void previsit( QualifiedType * qualType );
    8282        void postvisit( QualifiedType * qualType );
    83 
    8483        void postvisit( QualifiedNameExpr * qualExpr );
    85 
     84       
    8685        void postvisit( EnumDecl * enumDecl );
    8786        void postvisit( StructDecl * structDecl );
  • src/SynTree/Expression.h

    r1e30df7 r5408b59  
    168168        Declaration * type_decl;
    169169        std::string name;
    170         DeclarationWithType * var;
    171170
    172171        QualifiedNameExpr( Declaration * decl, std::string name): Expression(), type_decl(decl), name(name) {}
    173         QualifiedNameExpr( const QualifiedNameExpr & other): Expression(other), type_decl(other.type_decl), name(other.name), var(other.var) {}
    174         DeclarationWithType * get_var() const { return var; }
    175         void set_var( DeclarationWithType * newValue ) { var = newValue; }
     172        QualifiedNameExpr( const QualifiedNameExpr & other): Expression(other), type_decl(other.type_decl), name(other.name) {}
    176173
    177174        virtual ~QualifiedNameExpr() {
    178                 delete var;
    179175                delete type_decl;
    180176        }
  • src/Validate/FixQualifiedTypes.cpp

    r1e30df7 r5408b59  
    102102                        }
    103103
    104 
    105                 auto var = new ast::ObjectDecl( t->var->location, t->name,
    106                          new ast::EnumInstType(enumDecl, ast::CV::Const), nullptr, {}, ast::Linkage::Cforall );
    107                         var->scopeLevel = 1; // 1 for now; should copy the scopeLevel of the enumValue
     104                auto var = new ast::ObjectDecl( t->location, t->name,
     105                        new ast::EnumInstType(enumDecl, ast::CV::Const), nullptr, {}, ast::Linkage::Cforall );
    108106                        var->mangleName = Mangle::mangle( var );
    109107                        return new ast::VariableExpr( t->location, var );
    110                 // return ret;
    111108        }
    112109
  • src/Validate/LinkReferenceToTypes.cpp

    r1e30df7 r5408b59  
    4444        void postvisit( ast::UnionDecl const * decl );
    4545        ast::TraitDecl const * postvisit( ast::TraitDecl const * decl );
    46         ast::QualifiedNameExpr const * previsit( ast::QualifiedNameExpr const * decl);
    4746
    4847private:
     
    316315}
    317316
    318 ast::QualifiedNameExpr const * LinkTypesCore::previsit( ast::QualifiedNameExpr const * decl ) {
    319         // Try to lookup type
    320         if ( auto objDecl = decl->type_decl.as<ast::ObjectDecl>() ) {
    321                 if ( auto inst = objDecl->type.as<ast::TypeInstType>()) {
    322                         if ( auto enumDecl = symtab.lookupEnum ( inst->name ) ) {
    323                                 auto mut = ast::mutate( decl );
    324                                 mut->type_decl = enumDecl;
    325                                 auto enumInst = new ast::EnumInstType( enumDecl );
    326                                 enumInst->name = decl->name;
    327                                 // Adding result; addCandidate() use result
    328                                 mut->result = enumInst;
    329                                 decl = mut;
    330                         }
    331                 }
    332         } else if ( auto enumDecl = decl->type_decl.as<ast::EnumDecl>() ) {
    333                 auto mut = ast::mutate( decl );
    334                 auto enumInst = new ast::EnumInstType( enumDecl );
    335                 enumInst->name = decl->name;
    336                 // Adding result; addCandidate() use result
    337                 mut->result = enumInst;
    338                 decl = mut;
    339         }
    340         // ast::EnumDecl const * decl = symtab.lookupEnum( type->name );
    341         // // It's not a semantic error if the enum is not found, just an implicit forward declaration.
    342         // if ( decl ) {
    343         //      // Just linking in the node.
    344         //      auto mut = ast::mutate( type );
    345         //      mut->base = const_cast<ast::EnumDecl *>( decl );
    346         //      type = mut;
    347         // }
    348         return decl;
    349 }
    350 
    351317} // namespace
    352318
Note: See TracChangeset for help on using the changeset viewer.