Changeset 4615ac8 for src/main.cc


Ignore:
Timestamp:
Aug 7, 2019, 4:50:27 PM (5 years ago)
Author:
Andrew Beach <ajbeach@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
2d80111, 8c63bb4
Parents:
9e72dbb7
Message:

Added asserts and clears to make sure lvalue is only used where we expect.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/main.cc

    r9e72dbb7 r4615ac8  
    5959#include "ResolvExpr/Resolver.h"            // for resolve
    6060#include "SymTab/Validate.h"                // for validate
     61#include "SynTree/TopLvalue.h"              // for assertTopLvalue, clearInn...
    6162#include "SynTree/Declaration.h"            // for Declaration
    6263#include "SynTree/Visitor.h"                // for acceptAll
    6364#include "Tuples/Tuples.h"                  // for expandMemberTuples, expan...
    6465#include "Virtual/ExpandCasts.h"            // for expandCasts
     66
    6567
    6668using namespace std;
     
    257259                Stats::Time::StopBlock();
    258260
     261                //std::cerr << "Post-Parse Check" << std::endl;
     262                clearInnerLvalue( translationUnit );
     263                assertTopLvalue( translationUnit );
     264
    259265                // add the assignment statement after the initialization of a type parameter
    260266                PASS( "Validate", SymTab::validate( translationUnit, symtabp ) );
     
    275281                } // if
    276282
     283                assertTopLvalue( translationUnit );
    277284                PASS( "Fix Labels", ControlStruct::fixLabels( translationUnit ) );
     285                assertTopLvalue( translationUnit );
    278286                PASS( "Fix Names", CodeGen::fixNames( translationUnit ) );
     287                assertTopLvalue( translationUnit );
    279288                PASS( "Gen Init", InitTweak::genInit( translationUnit ) );
     289                assertTopLvalue( translationUnit );
    280290                PASS( "Expand Member Tuples" , Tuples::expandMemberTuples( translationUnit ) );
     291                assertTopLvalue( translationUnit );
    281292                if ( libcfap ) {
    282293                        // generate the bodies of cfa library functions
     
    302313                } // if
    303314
     315                assertTopLvalue( translationUnit );
     316
    304317                PASS( "Resolve", ResolvExpr::resolve( translationUnit ) );
    305318                if ( exprp ) {
     
    308321                } // if
    309322
     323                clearInnerLvalue( translationUnit );
     324                assertTopLvalue( translationUnit );
     325
    310326                // fix ObjectDecl - replaces ConstructorInit nodes
    311327                PASS( "Fix Init", InitTweak::fix( translationUnit, buildingLibrary() ) );
     328                clearInnerLvalue( translationUnit );
     329                assertTopLvalue( translationUnit );
    312330                if ( ctorinitp ) {
    313331                        dump ( translationUnit );
     
    316334
    317335                PASS( "Expand Unique Expr", Tuples::expandUniqueExpr( translationUnit ) ); // xxx - is this the right place for this? want to expand ASAP so tha, sequent passes don't need to worry about double-visiting a unique expr - needs to go after InitTweak::fix so that copy constructed return declarations are reused
     336                assertTopLvalue( translationUnit );
    318337
    319338                PASS( "Translate EHM" , ControlStruct::translateEHM( translationUnit ) );
     339                assertTopLvalue( translationUnit );
    320340
    321341                PASS( "Gen Waitfor" , Concurrency::generateWaitFor( translationUnit ) );
     342                clearInnerLvalue( translationUnit );
     343                assertTopLvalue( translationUnit );
    322344
    323345                PASS( "Convert Specializations",  GenPoly::convertSpecializations( translationUnit ) ); // needs to happen before tuple types are expanded
     346                clearInnerLvalue( translationUnit );
     347                assertTopLvalue( translationUnit );
    324348
    325349                PASS( "Expand Tuples", Tuples::expandTuples( translationUnit ) ); // xxx - is this the right place for this?
     350                assertTopLvalue( translationUnit );
    326351
    327352                if ( tuplep ) {
     
    331356
    332357                PASS( "Virtual Expand Casts", Virtual::expandCasts( translationUnit ) ); // Must come after translateEHM
     358                assertTopLvalue( translationUnit );
    333359
    334360                PASS( "Instantiate Generics", GenPoly::instantiateGeneric( translationUnit ) );
     
    337363                        return EXIT_SUCCESS;
    338364                } // if
     365                clearInnerLvalue( translationUnit );
     366                assertTopLvalue( translationUnit );
    339367                PASS( "Convert L-Value", GenPoly::convertLvalue( translationUnit ) );
    340 
     368                clearInnerLvalue( translationUnit );
     369                assertTopLvalue( translationUnit );
    341370
    342371                if ( bboxp ) {
     
    345374                } // if
    346375                PASS( "Box", GenPoly::box( translationUnit ) );
     376                clearInnerLvalue( translationUnit );
     377                assertTopLvalue( translationUnit );
    347378
    348379                if ( bcodegenp ) {
     
    356387
    357388                CodeTools::fillLocations( translationUnit );
     389                assertTopLvalue( translationUnit );
    358390                PASS( "Code Gen", CodeGen::generate( translationUnit, *output, ! genproto, prettycodegenp, true, linemarks ) );
    359391
Note: See TracChangeset for help on using the changeset viewer.