Ignore:
Timestamp:
Aug 21, 2018, 2:21:53 PM (3 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, no_list, persistent-indexer
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)
Message:

Resolve typeof earlier so that constructors are chosen appropriately [fixes #102]

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Resolver.cc

    r51fcdbc7 r2b79a70  
    3030#include "RenameVars.h"                  // for RenameVars, global_renamer
    3131#include "ResolvExpr/TypeEnvironment.h"  // for TypeEnvironment
    32 #include "ResolveTypeof.h"               // for resolveTypeof
    3332#include "Resolver.h"
    3433#include "SymTab/Autogen.h"              // for SizeType
     
    5756                void postvisit( FunctionDecl *functionDecl );
    5857                void previsit( ObjectDecl *objectDecll );
    59                 void previsit( TypeDecl *typeDecl );
    6058                void previsit( EnumDecl * enumDecl );
    6159                void previsit( StaticAssertDecl * assertDecl );
     
    303301
    304302        void Resolver::previsit( ObjectDecl *objectDecl ) {
    305                 Type *new_type = resolveTypeof( objectDecl->get_type(), indexer );
    306                 new_type->get_qualifiers() -= Type::Lvalue; // even if typeof is lvalue, variable can never have lvalue-qualified type
    307                 objectDecl->set_type( new_type );
    308303                // To handle initialization of routine pointers, e.g., int (*fp)(int) = foo(), means that class-variable
    309304                // initContext is changed multiple time because the LHS is analysed twice. The second analysis changes
     
    335330        }
    336331
    337         void Resolver::previsit( TypeDecl *typeDecl ) {
    338                 if ( typeDecl->get_base() ) {
    339                         Type *new_type = resolveTypeof( typeDecl->get_base(), indexer );
    340                         typeDecl->set_base( new_type );
    341                 } // if
    342         }
    343 
    344332        void Resolver::previsit( FunctionDecl *functionDecl ) {
    345333#if 0
     
    348336                std::cerr << std::endl;
    349337#endif
    350                 Type *new_type = resolveTypeof( functionDecl->type, indexer );
    351                 functionDecl->set_type( new_type );
    352338                GuardValue( functionReturn );
    353339                functionReturn = ResolvExpr::extractResultType( functionDecl->type );
Note: See TracChangeset for help on using the changeset viewer.