Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • translator/main.cc

    rb1a6d6b r42e2ad7  
    4949    bool debugp = false, treep = false, astp = false, manglep = false, symtabp = false, validp = false;
    5050    bool preludep = true, protop = false, libp = false;
    51     bool exprp = false, codegenp = false, errorp = false;
     51    bool exprp = false, codegenp = false;
    5252    int c;
    5353    FILE *input, *prelude, *builtins;
     
    5656    opterr = 0;
    5757
    58     std::list< Declaration* > translationUnit;
    59    
    60     while ( (c = getopt( argc, argv, "dtsgmvxcenprlDyz:" )) != -1 ) {
     58    while ( (c = getopt( argc, argv, "dtsgmvxcenprlDz:" )) != -1 ) {
    6159        switch (c) {
    6260          case 'd':
    63             // bison debugging info
     61            /* bison debugging info */
    6462            debugp = true;
    6563            break;
    6664          case 't':
    67             // dump parse tree
     65            /* dump parse tree */
    6866            treep = true;
    6967            break;
    7068          case 's':
    71             // dump AST
     69            /* dump AST */
    7270            astp = true;
    7371            break;
    7472          case 'g':
    75             // print alternatives for expressions
     73            /* print alternatives for expressions */
    7674            manglep = true;
    7775            break;
    7876          case 'm':
    79             // print symbol table events
     77            /* print symbol table events */
    8078            symtabp = true;
    8179            break;
    8280          case 'r':
    83             // print resolver steps
     81            /* print resolver steps */
    8482            resolveVerbose = true;
    8583            break;
    8684          case 'x':
    87             // dump AST after decl validation pass
     85            /* dump AST after decl validation pass */
    8886            validp = true;
    8987            break;
    9088          case 'e':
    91             // dump AST after expression analysis
     89            /* dump AST after expression analysis */
    9290            exprp = true;
    9391            break;
     
    9593            codegenp = true;
    9694            break;
    97           case 'y':
    98             errorp = true;
    99             break;
    10095          case 'n':
    101             // don't read preamble
     96            /* don't read preamble */
    10297            preludep = false;
    10398            break;
    10499          case 'p':
    105             // generate prototypes for preamble functions
     100            /* generate prototypes for preamble functions */
    106101            protop = true;
    107102            break;
    108103          case 'l':
    109             // generate libcfa.c
     104            /* generate libcfa.c */
    110105            libp = true;
    111106            break;
    112107          case 'v':
    113             // verbose
     108            /* verbose */
    114109            beVerbose = true;
    115110            break;
    116111          case 'D':
    117             // ignore -Dxxx
     112            /* ignore -Dxxx */
    118113            break;
    119114          case '?':
     
    210205        } // if
    211206
     207        std::list< Declaration* > translationUnit;
    212208        buildList( Parser::get_parser().get_parseTree(), translationUnit );
    213209
     
    237233
    238234        if ( exprp ) {
    239             InitTweak::tweak( translationUnit );
    240235            SymTab::validate( translationUnit, false );
     236            ResolvExpr::resolve( translationUnit );
     237            printAll( translationUnit, std::cout );
     238            return 0;
     239        } // if
     240
     241        if ( codegenp ) {
     242            // print the tree right before code generation...
     243                        // InitTweak::mutate( translationUnit );
     244            //            InitTweak::tweak( translationUnit );
     245            //printAll( translationUnit, std::cout );
     246
     247            // std::cerr << "finished tweaking" << std::endl;
     248            SymTab::validate( translationUnit, false );
    241249            ControlStruct::mutate( translationUnit );
    242250            CodeGen::fixNames( translationUnit );
    243             ResolvExpr::resolve( translationUnit );
    244             printAll( translationUnit, std::cout );
    245             return 0;
    246         } // if
    247 
    248         if ( codegenp ) {
    249             // print the tree right before code generation
    250             cerr << "tweak" << endl;
    251             InitTweak::tweak( translationUnit );
    252             cerr << "validate" << endl;
    253             SymTab::validate( translationUnit, false );
    254             cerr << "mutate" << endl;
    255             ControlStruct::mutate( translationUnit );
    256             cerr << "fixNames" << endl;
    257             CodeGen::fixNames( translationUnit );
    258             cerr << "resolve" << endl;
    259251            ResolvExpr::resolve( translationUnit );
    260             cerr << "copyParams" << endl;
    261252            GenPoly::copyParams( translationUnit );
    262             cerr << "convertSpecializations" << endl;
    263253            GenPoly::convertSpecializations( translationUnit );
    264             cerr << "convertLvalue" << endl;
    265254            GenPoly::convertLvalue( translationUnit );
    266             cerr << "box" << endl;
    267255            GenPoly::box( translationUnit );
    268             if ( errorp ) {
    269                 printAll( translationUnit, std::cout );
    270             }
     256            printAll( translationUnit, std::cout );
    271257            return 0;
    272258        } // if
     
    307293
    308294    } catch ( SemanticError &e ) {
    309         if ( errorp ) {
    310            printAll( translationUnit, std::cout );
    311         }
    312295        e.print( cout );
    313296        if ( output != &std::cout ) {
Note: See TracChangeset for help on using the changeset viewer.