Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/main.cc

    rd3b7937 rca1c11f  
    55// file "LICENCE" distributed with Cforall.
    66//
    7 // main.cc -- 
     7// main.cc --
    88//
    99// Author           : Richard C. Bilson
    1010// Created On       : Fri May 15 23:12:02 2015
    11 // Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jan 27 22:20:20 2016
    13 // Update Count     : 199
     11// Last Modified By : Rob Schluntz
     12// Last Modified On : Tue Jan 19 16:28:13 2016
     13// Update Count     : 194
    1414//
    1515
     
    4242#include "InitTweak/Mutate.h"
    4343#include "InitTweak/RemoveInit.h"
     44#include "InitTweak/FixInit.h"
    4445//#include "Explain/GenProlog.h"
    4546//#include "Try/Visit.h"
    4647
    47 #include "Common/SemanticError.h"
    48 #include "Common/UnimplementedError.h"
     48#include "SemanticError.h"
     49#include "UnimplementedError.h"
    4950
    5051#include "../config.h"
     
    6162        astp = false,
    6263        bresolvep = false,
     64        ctorinitp = false,
    6365        exprp = false,
    6466        expraltp = false,
     
    7072        resolvep = false,                                                                       // used in AlternativeFinder
    7173        symtabp = false,
    72         treep = false,
    7374        validp = false,
    7475        errorp = false,
    7576        codegenp = false;
    7677
    77 enum { Ast, Bresolver, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, Validate, };
     78enum { Ast, Bresolver, CtorInitFix, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Validate, };
    7879
    7980static struct option long_opts[] = {
    8081        { "ast", no_argument, 0, Ast },
    8182        { "before-resolver", no_argument, 0, Bresolver },
     83        { "ctorinitfix", no_argument, 0, CtorInitFix },
    8284        { "expr", no_argument, 0, Expr },
    8385        { "expralt", no_argument, 0, ExprAlt },
     
    8991        { "resolver", no_argument, 0, Resolver },
    9092        { "symbol", no_argument, 0, Symbol },
    91         { "tree", no_argument, 0, Tree },
    9293        { "validate", no_argument, 0, Validate },
    9394        { 0, 0, 0, 0 }
     
    101102
    102103        opterr = 0;                                                                                     // prevent getopt from printing error messages
    103        
     104
    104105        int c;
    105         while ( (c = getopt_long( argc, argv, "abefglnpqrstvyzD:", long_opts, &long_index )) != -1 ) {
     106        while ( (c = getopt_long( argc, argv, "abcefFglnpqrsvyzD:", long_opts, &long_index )) != -1 ) {
    106107                switch ( c ) {
    107108                  case Ast:
     
    113114                        bresolvep = true;
    114115                        break;
     116                        case CtorInitFix:
     117                        case 'c':
     118                        ctorinitp = true;
     119                        break;
    115120                  case Expr:
    116121                  case 'e':                                                                             // dump AST after expression analysis
     
    148153                  case 's':                                                                             // print symbol table events
    149154                        symtabp = true;
    150                         break;
    151                   case Tree:
    152                   case 't':                                                                             // build in tree
    153                         treep = true;
    154155                        break;
    155156                  case 'v':                                                                             // dump AST after decl validation pass
     
    188189                        output = new ofstream( argv[ optind ] );
    189190                } // if
    190        
     191
    191192                Parser::get_parser().set_debug( grammarp );
    192193
     
    194195                if ( ! nopreludep ) {                                                   // include gcc builtins
    195196                        // -l is for initial build ONLY and builtins.cf is not in the lib directory so access it here.
    196                         FILE * builtins = fopen( libcfap | treep ? "builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
     197                        FILE * builtins = fopen( libcfap ? "./builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
    197198                        if ( builtins == NULL ) {
    198                                 std::cerr << "Error: can't open builtins.cf" << std::endl;
     199                                std::cerr << "Error: can't open builtins" << std::endl;
    199200                                exit( 1 );
    200201                        } // if
     
    204205                        if ( ! libcfap ) {
    205206                                // read the prelude in, if not generating the cfa library
    206                                 FILE * prelude = fopen( treep ? "prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
     207                                FILE * prelude = fopen( CFA_LIBDIR "/prelude.cf", "r" );
    207208                                if ( prelude == NULL ) {
    208                                         std::cerr << "Error: can't open prelude.cf" << std::endl;
     209                                        std::cerr << "Error: can't open prelude" << std::endl;
    209210                                        exit( 1 );
    210211                                } // if
    211                    
     212
    212213                                parse( prelude, LinkageSpec::Intrinsic );
    213214                        } // if
    214215                } // if
    215216
    216                 parse( input, libcfap ? LinkageSpec::Intrinsic : LinkageSpec::Cforall, grammarp );     
    217  
     217                parse( input, libcfap ? LinkageSpec::Intrinsic : LinkageSpec::Cforall, grammarp );
     218
    218219                if ( parsep ) {
    219220                        Parser::get_parser().get_parseTree()->printList( std::cout );
     
    250251                OPTPRINT( "mutate" )
    251252                ControlStruct::mutate( translationUnit );
    252                 OPTPRINT( "fixNames" ) 
     253                OPTPRINT( "fixNames" )
    253254                CodeGen::fixNames( translationUnit );
    254                 OPTPRINT( "tweak" )
     255                OPTPRINT( "tweakInit" )
    255256                InitTweak::tweak( translationUnit );
    256257
     
    269270                if ( exprp ) {
    270271                        dump( translationUnit );
     272                        return 0;
     273                }
     274
     275                OPTPRINT( "fixInit" )
     276                // fix ObjectDecl - replaces ConstructorInit nodes
     277                InitTweak::fix( translationUnit );
     278                if ( ctorinitp ) {
     279                        dump ( translationUnit );
     280                        return 0;
    271281                }
    272282
     
    337347        std::list< Declaration * > decls;
    338348        if ( noprotop ) {
    339                 filter( translationUnit.begin(), translationUnit.end(), 
     349                filter( translationUnit.begin(), translationUnit.end(),
    340350                                std::back_inserter( decls ), notPrelude );
    341351        } else {
Note: See TracChangeset for help on using the changeset viewer.