Changes in / [0720e049:59a75cb]


Ignore:
Location:
src
Files:
1 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • src/CodeGen/CodeGenerator.cc

    r0720e049 r59a75cb  
    6464        } // extension
    6565
     66        ostream & CodeGenerator::Indenter::operator()( ostream & output ) const {
     67          return output << string( cg.cur_indent, ' ' );
     68        }
     69
     70        ostream & operator<<( ostream & output, const CodeGenerator::Indenter &indent ) {
     71                return indent( output );
     72        }
     73
    6674        CodeGenerator::LabelPrinter & CodeGenerator::LabelPrinter::operator()( std::list< Label > & l ) {
    6775                labels = &l;
     
    101109        }
    102110
    103         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 ) {}
     111        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 ) {}
    104112
    105113        string CodeGenerator::mangleName( DeclarationWithType * decl ) {
     
    192200                        output << " {" << endl;
    193201
    194                         ++indent;
     202                        cur_indent += CodeGenerator::tabsize;
    195203                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++ ) {
    196204                                output << lineDirective( *i ) << indent;
     
    199207                        } // for
    200208
    201                         --indent;
     209                        cur_indent -= CodeGenerator::tabsize;
    202210
    203211                        output << indent << "}";
     
    229237                        output << " {" << endl;
    230238
    231                         ++indent;
     239                        cur_indent += CodeGenerator::tabsize;
    232240                        for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end();  i++) {
    233241                                ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i );
     
    241249                        } // for
    242250
    243                         --indent;
     251                        cur_indent -= CodeGenerator::tabsize;
    244252
    245253                        output << indent << "}";
     
    753761                std::list< Statement * > & stmts = stmtExpr->get_statements()->get_kids();
    754762                output << lineDirective( stmtExpr) << "({" << std::endl;
    755                 ++indent;
     763                cur_indent += CodeGenerator::tabsize;
    756764                unsigned int numStmts = stmts.size();
    757765                unsigned int i = 0;
     
    776784                        ++i;
    777785                }
    778                 --indent;
     786                cur_indent -= CodeGenerator::tabsize;
    779787                output << indent << "})";
    780788        }
     
    785793                output << "{" << endl;
    786794
    787                 ++indent;
     795                cur_indent += CodeGenerator::tabsize;
    788796
    789797                for ( std::list<Statement *>::iterator i = ks.begin(); i != ks.end();  i++ ) {
     
    796804                        } // if
    797805                } // for
    798                 --indent;
     806                cur_indent -= CodeGenerator::tabsize;
    799807
    800808                output << indent << "}";
     
    864872
    865873                output << "{" << std::endl;
    866                 ++indent;
     874                cur_indent += CodeGenerator::tabsize;
    867875                acceptAll( switchStmt->get_statements(), *this );
    868                 --indent;
     876                cur_indent -= CodeGenerator::tabsize;
    869877                output << indent << "}";
    870878        }
     
    883891                std::list<Statement *> sts = caseStmt->get_statements();
    884892
    885                 ++indent;
     893                cur_indent += CodeGenerator::tabsize;
    886894                for ( std::list<Statement *>::iterator i = sts.begin(); i != sts.end();  i++) {
    887895                        output << indent << printLabels( (*i)->get_labels() )  ;
     
    889897                        output << endl;
    890898                } // for
    891                 --indent;
     899                cur_indent -= CodeGenerator::tabsize;
    892900        }
    893901
  • src/CodeGen/CodeGenerator.h

    r0720e049 r59a75cb  
    100100                template< class Iterator > void genCommaList( Iterator begin, Iterator end );
    101101
     102                struct Indenter {
     103                        Indenter(CodeGenerator &cg) : cg(cg) {}
     104                        CodeGenerator & cg;
     105                        std::ostream& operator()(std::ostream & os) const;
     106                };
     107
    102108                struct LabelPrinter {
    103109                        LabelPrinter(CodeGenerator &cg) : cg(cg), labels( 0 ) {}
     
    122128          private:
    123129                Indenter indent;
     130                int cur_indent;
    124131                bool insideFunction;
    125132                std::ostream &output;
  • src/Common/utility.h

    r0720e049 r59a75cb  
    2424#include <sstream>
    2525#include <string>
    26 #include <type_traits>
    2726
    2827#include <cassert>
     
    305304// for ( val : group_iterate( container1, container2, ... ) ) {}
    306305// syntax to have a for each that iterates multiple containers of the same length
    307 // TODO: update to use variadic arguments
     306// TODO: update to use variadic arguments, perfect forwarding
    308307
    309308template< typename T1, typename T2 >
     
    314313
    315314        struct iterator {
    316                 typedef typename std::remove_reference<T1>::type T1val;
    317                 typedef typename std::remove_reference<T2>::type T2val;
    318                 typedef std::tuple<typename T1val::value_type &, typename T2val::value_type &> value_type;
    319                 typedef typename T1val::iterator T1Iter;
    320                 typedef typename T2val::iterator T2Iter;
     315                typedef std::tuple<typename T1::value_type, typename T2::value_type> value_type;
     316                typedef typename T1::iterator T1Iter;
     317                typedef typename T2::iterator T2Iter;
    321318                typedef std::tuple<T1Iter, T2Iter> IterTuple;
    322319                IterTuple it;
     
    326323                }
    327324                bool operator!=( const iterator &other ) const { return it != other.it; }
    328                 value_type operator*() const { return std::tie( *std::get<0>(it), *std::get<1>(it) ); }
     325                value_type operator*() const { return std::make_tuple( *std::get<0>(it), *std::get<1>(it) ); }
    329326        };
    330327        iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); }
     
    336333
    337334template< typename... Args >
    338 group_iterate_t<Args...> group_iterate( Args &&... args ) {
    339         return group_iterate_t<Args...>(std::forward<Args>( args )...);
     335group_iterate_t<Args...> group_iterate( const Args &... args ) {
     336        return group_iterate_t<Args...>(args...);
    340337}
    341338
  • src/ResolvExpr/CurrentObject.cc

    r0720e049 r59a75cb  
    1919#include "CurrentObject.h"
    2020
    21 #include "Common/Indenter.h"
    22 
    2321#include "SynTree/Declaration.h"
    2422#include "SynTree/Initializer.h"
     
    4745                        assertf( false, "unhandled type on getConstValue %s", toString( constExpr->get_result() ).c_str() ); // xxx - might be semantic error
    4846                }
     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, ' ');
    4962        }
    5063
  • src/ResolvExpr/CurrentObject.h

    r0720e049 r59a75cb  
    2424        class MemberIterator;
    2525
    26         // TODO: memory management of MemberIterators
    2726        class CurrentObject {
    2827        public:
Note: See TracChangeset for help on using the changeset viewer.