Changeset f7cb0bc


Ignore:
Timestamp:
Jun 30, 2017, 4:59:54 PM (7 years ago)
Author:
Rob Schluntz <rschlunt@…>
Branches:
ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
Children:
a5de33e, b1e63ac5
Parents:
435e75f
git-author:
Rob Schluntz <rschlunt@…> (06/30/17 16:55:23)
git-committer:
Rob Schluntz <rschlunt@…> (06/30/17 16:59:54)
Message:

refactor indenter from CodeGen? and CurrentObject?

Location:
src
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    r435e75f rf7cb0bc  
    6666        } // extension
    6767
    68         ostream & CodeGenerator::Indenter::operator()( ostream & output ) const {
    69           return output << string( cg.cur_indent, ' ' );
    70         }
    71 
    72         ostream & operator<<( ostream & output, const CodeGenerator::Indenter &indent ) {
    73                 return indent( output );
    74         }
    75 
    7668        CodeGenerator::LabelPrinter & CodeGenerator::LabelPrinter::operator()( std::list< Label > & l ) {
    7769                labels = &l;
     
    111103        }
    112104
    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 ) {}
     105        CodeGenerator::CodeGenerator( std::ostream & os, bool pretty, bool genC, bool lineMarks ) : indent( CodeGenerator::tabsize ), insideFunction( false ), output( os ), printLabels( *this ), pretty( pretty ), genC( genC ), lineMarks( lineMarks ) {}
    114106
    115107        string CodeGenerator::mangleName( DeclarationWithType * decl ) {
     
    202194                        output << " {" << endl;
    203195
    204                         cur_indent += CodeGenerator::tabsize;
     196                        ++indent;
    205197                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++ ) {
    206198                                output << lineDirective( *i ) << indent;
     
    209201                        } // for
    210202
    211                         cur_indent -= CodeGenerator::tabsize;
     203                        --indent;
    212204
    213205                        output << indent << "}";
     
    239231                        output << " {" << endl;
    240232
    241                         cur_indent += CodeGenerator::tabsize;
     233                        ++indent;
    242234                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
    243235                                ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
     
    251243                        } // for
    252244
    253                         cur_indent -= CodeGenerator::tabsize;
     245                        --indent;
    254246
    255247                        output << indent << "}";
     
    755747                std::list< Statement * > & stmts = stmtExpr->get_statements()->get_kids();
    756748                output << lineDirective( stmtExpr) << "({" << std::endl;
    757                 cur_indent += CodeGenerator::tabsize;
     749                ++indent;
    758750                unsigned int numStmts = stmts.size();
    759751                unsigned int i = 0;
     
    778770                        ++i;
    779771                }
    780                 cur_indent -= CodeGenerator::tabsize;
     772                --indent;
    781773                output << indent << "})";
    782774        }
     
    787779                output << "{" << endl;
    788780
    789                 cur_indent += CodeGenerator::tabsize;
     781                ++indent;
    790782
    791783                for ( std::list<Statement *>::iterator i = ks.begin(); i != ks.end();  i++ ) {
     
    798790                        } // if
    799791                } // for
    800                 cur_indent -= CodeGenerator::tabsize;
     792                --indent;
    801793
    802794                output << indent << "}";
     
    866858
    867859                output << "{" << std::endl;
    868                 cur_indent += CodeGenerator::tabsize;
     860                ++indent;
    869861                acceptAll( switchStmt->get_statements(), *this );
    870                 cur_indent -= CodeGenerator::tabsize;
     862                --indent;
    871863                output << indent << "}";
    872864        }
     
    885877                std::list<Statement *> sts = caseStmt->get_statements();
    886878
    887                 cur_indent += CodeGenerator::tabsize;
     879                ++indent;
    888880                for ( std::list<Statement *>::iterator i = sts.begin(); i != sts.end();  i++) {
    889881                        output << indent << printLabels( (*i)->get_labels() )  ;
     
    891883                        output << endl;
    892884                } // for
    893                 cur_indent -= CodeGenerator::tabsize;
     885                --indent;
    894886        }
    895887
  • src/CodeGen/CodeGenerator.h

    r435e75f rf7cb0bc  
    2525#include "SymTab/Indexer.h"
    2626
     27#include "Common/Indenter.h"
    2728#include "Common/utility.h"
    2829
     
    102103                template< class Iterator > void genCommaList( Iterator begin, Iterator end );
    103104
    104                 struct Indenter {
    105                         Indenter(CodeGenerator &cg) : cg(cg) {}
    106                         CodeGenerator & cg;
    107                         std::ostream& operator()(std::ostream & os) const;
    108                 };
    109 
    110105                struct LabelPrinter {
    111106                        LabelPrinter(CodeGenerator &cg) : cg(cg), labels( 0 ) {}
     
    130125          private:
    131126                Indenter indent;
    132                 int cur_indent;
    133127                bool insideFunction;
    134128                std::ostream &output;
  • src/ResolvExpr/CurrentObject.cc

    r435e75f rf7cb0bc  
    1919#include "CurrentObject.h"
    2020
     21#include "Common/Indenter.h"
     22
    2123#include "SynTree/Declaration.h"
    2224#include "SynTree/Initializer.h"
     
    4547                        assertf( false, "unhandled type on getConstValue %s", toString( constExpr->get_result() ).c_str() ); // xxx - might be semantic error
    4648                }
    47         }
    48 
    49         struct Indenter {
    50                 static const int amt = 2;
    51                 unsigned int indent = 0;
    52 
    53                 Indenter & operator+=(int nlevels) { indent += amt*nlevels; return *this; }
    54                 Indenter & operator-=(int nlevels) { indent -= amt*nlevels; return *this; }
    55                 Indenter operator+(int nlevels) { Indenter indenter = *this; return indenter += nlevels; }
    56                 Indenter operator-(int nlevels) { Indenter indenter = *this; return indenter -= nlevels; }
    57                 Indenter & operator++() { return *this += 1; }
    58                 Indenter & operator--() { return *this -= 1; }
    59         };
    60         std::ostream & operator<<( std::ostream & out, Indenter & indent ) {
    61                 return out << std::string(indent.indent, ' ');
    6249        }
    6350
  • src/ResolvExpr/CurrentObject.h

    r435e75f rf7cb0bc  
    2525        class MemberIterator;
    2626
     27        // TODO: memory management of MemberIterators
    2728        class CurrentObject {
    2829        public:
Note: See TracChangeset for help on using the changeset viewer.