Changes in / [66ef082:19801aa]


Ignore:
Location:
src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    r66ef082 r19801aa  
    99// Author           : Richard C. Bilson
    1010// Created On       : Mon May 18 07:44:20 2015
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Tus May  9 14:32:00 2017
    13 // Update Count     : 483
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Thu Mar 30 16:38:01 2017
     13// Update Count     : 482
    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         }
    5643
    5744        // the kinds of statements that would ideally be followed by whitespace
     
    141128
    142129
    143         // *** Declarations
     130        //*** Declarations
    144131        void CodeGenerator::visit( FunctionDecl * functionDecl ) {
    145132                extension( functionDecl );
     
    195182                }
    196183
    197                 output << lineDirective( aggDecl ) << kind;
     184                output << kind;
    198185                if ( aggDecl->get_name() != "" )
    199186                        output << aggDecl->get_name();
     
    205192                        cur_indent += CodeGenerator::tabsize;
    206193                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++ ) {
    207                                 output << lineDirective( *i ) << indent;
     194                                output << indent;
    208195                                (*i)->accept( *this );
    209196                                output << ";" << endl;
     
    228215        void CodeGenerator::visit( EnumDecl * enumDecl ) {
    229216                extension( enumDecl );
    230                 output << lineDirective ( enumDecl );
    231217                output << "enum ";
    232218                genAttributes( enumDecl->get_attributes() );
     
    244230                                ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
    245231                                assert( obj );
    246                                 output << lineDirective( obj ) << indent << mangleName( obj );
     232                                output << indent << mangleName( obj );
    247233                                if ( obj->get_init() ) {
    248234                                        output << " = ";
     
    262248        void CodeGenerator::visit( TypedefDecl * typeDecl ) {
    263249                assertf( ! genC, "Typedefs are removed and substituted in earlier passes." );
    264                 output << lineDirective( typeDecl );
    265250                output << "typedef ";
    266251                output << genType( typeDecl->get_base(), typeDecl->get_name(), pretty, genC ) << endl;
     
    334319        }
    335320
    336         // *** Expressions
     321        //*** Expressions
    337322        void CodeGenerator::visit( ApplicationExpr * applicationExpr ) {
    338323                extension( applicationExpr );
     
    737722        void CodeGenerator::visit( StmtExpr * stmtExpr ) {
    738723                std::list< Statement * > & stmts = stmtExpr->get_statements()->get_kids();
    739                 output << lineDirective( stmtExpr) << "({" << std::endl;
     724                output << "({" << std::endl;
    740725                cur_indent += CodeGenerator::tabsize;
    741726                unsigned int numStmts = stmts.size();
    742727                unsigned int i = 0;
    743728                for ( Statement * stmt : stmts ) {
    744                         output << lineDirective( stmt ) << indent;
    745             output << printLabels( stmt->get_labels() );
     729                        output << indent << printLabels( stmt->get_labels() );
    746730                        if ( i+1 == numStmts ) {
    747731                                // last statement in a statement expression needs to be handled specially -
     
    765749        }
    766750
    767         // *** Statements
     751        //*** Statements
    768752        void CodeGenerator::visit( CompoundStmt * compoundStmt ) {
    769753                std::list<Statement*> ks = compoundStmt->get_kids();
     
    829813
    830814        void CodeGenerator::visit( IfStmt * ifStmt ) {
    831                 output << lineDirective( ifStmt );
    832815                output << "if ( ";
    833816                ifStmt->get_condition()->accept( *this );
     
    843826
    844827        void CodeGenerator::visit( SwitchStmt * switchStmt ) {
    845                 output << lineDirective( switchStmt );
    846828                output << "switch ( " ;
    847829                switchStmt->get_condition()->accept( *this );
     
    856838
    857839        void CodeGenerator::visit( CaseStmt * caseStmt ) {
    858                 output << lineDirective( caseStmt );
    859840                output << indent;
    860841                if ( caseStmt->isDefault()) {
  • src/CodeGen/LineStream.cc

    r66ef082 r19801aa  
    1010// Created On       : Thr May 4 13:15:00 2017
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Mon May 8 12:08:00 2017
     12// Last Modified On : Fri May 5 14:29:00 2017
    1313// Update Count     : 0
    1414//
     
    1717
    1818namespace CodeGen {
     19
     20        LineStream::LineStream(std::ostream & baseStream, bool insertLines) :
     21                baseStream(baseStream), insertLines(insertLines)
     22        {}
    1923
    2024        void LineStream::printLineDirective(CodeLocation const & location) {
     
    4044                actualLocation.unset();
    4145
    42                 if (addNewline) {
     46                if (addNewLine) {
    4347                        expectedLocation.linenumber += 1;
    4448                        buffer.put('\n');
     
    7579
    7680        LineStream & LineStream::operator<<(StreamFlag flag) {
    77                 static StreamFlag const endlCopy = std::endl;
     81                static StringFlag const endlCopy = std::endl;
    7882                if (!insertLines) {
    7983                        baseStream << flag;
  • src/CodeGen/LineStream.h

    r66ef082 r19801aa  
    1010// Created On       : Wed May 4 09:15:00 2017
    1111// Last Modified By : Andrew Beach
    12 // Last Modified On : Mon May 8 14:03:00 2017
     12// Last Modified On : Fri May 5 14:29:00 2017
    1313// Update Count     : 1
    1414//
     
    2525namespace CodeGen {
    2626
    27         class LineStream {
     27        class LineStream : public std::ostream {
    2828                std::ostream & baseStream;
    2929                std::ostringstream buffer;
     
    4949
    5050                /// Formated output is buffered until flushed.
    51                 LineStream & operator<<(char const *str);
    52                 LineStream & operator<<(std::string const & str);
    53                 LineStream & operator<<(StreamFlag flag);
    54 
    55                 /// Flush all buffered output.
    56                 LineStream & flush();
     51                std::ostream & operator<<(char const *str);
     52                std::ostream & operator<<(std::string str);
     53                std::ostream & operator<<(StreamFlag flag);
    5754
    5855        }; // LineStream
  • src/main.cc

    r66ef082 r19801aa  
    3737#include "CodeGen/FixMain.h"
    3838#include "CodeTools/DeclStats.h"
    39 #include "CodeTools/TrackLoc.h"
    4039#include "ControlStruct/Mutate.h"
    4140#include "SymTab/Validate.h"
     
    309308                } // if
    310309
    311                 CodeTools::fillLocations( translationUnit );
    312310                CodeGen::generate( translationUnit, *output, ! noprotop, prettycodegenp, true );
    313311
Note: See TracChangeset for help on using the changeset viewer.