Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    rf975c65 r6e300d9  
    1010// Created On       : Mon May 18 07:44:20 2015
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Wed May 10 14:45:00 2017
    13 // Update Count     : 484
     12// Last Modified On : Tus May  9 14:32:00 2017
     13// Update Count     : 483
    1414//
    1515
     
    4141namespace CodeGen {
    4242        int CodeGenerator::tabsize = 4;
     43
     44        // Pseudo Function: output << lineDirective(*currentNode);
     45    struct lineDirective {
     46        CodeLocation const & loc;
     47                lineDirective(CodeLocation const & location) : loc(location) {}
     48                lineDirective(BaseSyntaxNode const * node) : loc(node->location) {}
     49        };
     50        std::ostream & operator<<(std::ostream & out, lineDirective const & ld) {
     51                if (ld.loc.isSet())
     52                        return out << "\n# " << ld.loc.linenumber << " \""
     53                                << ld.loc.filename << "\"\n";
     54                return out << "\n// Unset Location\n";
     55        }
    4356
    4457        // the kinds of statements that would ideally be followed by whitespace
     
    89102        }
    90103
    91         CodeGenerator::LineMarker::LineMarker(
    92                         CodeLocation const & loc, bool toPrint) :
    93                 loc(loc), toPrint(toPrint)
    94         {}
    95 
    96         CodeGenerator::LineMarker CodeGenerator::lineDirective(
    97                         BaseSyntaxNode const * node) {
    98                 return LineMarker(node->location, lineMarks);
    99         }
    100 
    101         std::ostream & operator<<(std::ostream & out,
    102                         CodeGenerator::LineMarker const & marker) {
    103                 if (marker.toPrint && marker.loc.isSet()) {
    104                         return out << "\n# " << marker.loc.linenumber << " \""
    105                                 << marker.loc.filename << "\"\n";
    106                 } else if (marker.toPrint) {
    107                         return out << "\n/* Missing CodeLocation */\n";
    108                 } else {
    109                 return out;
    110                 }
    111         }
    112 
    113         CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ), pretty( pretty ), genC( genC ), lineMarks( lineMarks ) {}
     104        CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC ) : indent( *this), cur_indent( 0 ), insideFunction( false ), output( os ), printLabels( *this ), pretty( pretty ), genC( genC ) {}
    114105
    115106        CodeGenerator::CodeGenerator( std::ostream & os, std::string init, int indentation, bool infunp )
     
    204195                }
    205196
    206                 output << kind;
     197                output << lineDirective( aggDecl ) << kind;
    207198                if ( aggDecl->get_name() != "" )
    208199                        output << aggDecl->get_name();
     
    709700        void CodeGenerator::visit( UntypedTupleExpr * tupleExpr ) {
    710701                assertf( ! genC, "UntypedTupleExpr should not reach code generation." );
    711                 extension( tupleExpr );
    712702                output << "[";
    713703                genCommaList( tupleExpr->get_exprs().begin(), tupleExpr->get_exprs().end() );
     
    717707        void CodeGenerator::visit( TupleExpr * tupleExpr ) {
    718708                assertf( ! genC, "TupleExpr should not reach code generation." );
    719                 extension( tupleExpr );
    720709                output << "[";
    721710                genCommaList( tupleExpr->get_exprs().begin(), tupleExpr->get_exprs().end() );
    722711                output << "]";
    723         }
    724 
    725         void CodeGenerator::visit( TupleIndexExpr * tupleExpr ) {
    726                 assertf( ! genC, "TupleIndexExpr should not reach code generation." );
    727                 extension( tupleExpr );
    728                 tupleExpr->get_tuple()->accept( *this );
    729                 output << "." << tupleExpr->get_index();
    730712        }
    731713
Note: See TracChangeset for help on using the changeset viewer.