Changes in / [0720e049:59a75cb]
- Location:
- src
- Files:
-
- 1 deleted
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
r0720e049 r59a75cb 64 64 } // extension 65 65 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 66 74 CodeGenerator::LabelPrinter & CodeGenerator::LabelPrinter::operator()( std::list< Label > & l ) { 67 75 labels = &l; … … 101 109 } 102 110 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 ) {} 104 112 105 113 string CodeGenerator::mangleName( DeclarationWithType * decl ) { … … 192 200 output << " {" << endl; 193 201 194 ++indent;202 cur_indent += CodeGenerator::tabsize; 195 203 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++ ) { 196 204 output << lineDirective( *i ) << indent; … … 199 207 } // for 200 208 201 --indent;209 cur_indent -= CodeGenerator::tabsize; 202 210 203 211 output << indent << "}"; … … 229 237 output << " {" << endl; 230 238 231 ++indent;239 cur_indent += CodeGenerator::tabsize; 232 240 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++) { 233 241 ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i ); … … 241 249 } // for 242 250 243 --indent;251 cur_indent -= CodeGenerator::tabsize; 244 252 245 253 output << indent << "}"; … … 753 761 std::list< Statement * > & stmts = stmtExpr->get_statements()->get_kids(); 754 762 output << lineDirective( stmtExpr) << "({" << std::endl; 755 ++indent;763 cur_indent += CodeGenerator::tabsize; 756 764 unsigned int numStmts = stmts.size(); 757 765 unsigned int i = 0; … … 776 784 ++i; 777 785 } 778 --indent;786 cur_indent -= CodeGenerator::tabsize; 779 787 output << indent << "})"; 780 788 } … … 785 793 output << "{" << endl; 786 794 787 ++indent;795 cur_indent += CodeGenerator::tabsize; 788 796 789 797 for ( std::list<Statement *>::iterator i = ks.begin(); i != ks.end(); i++ ) { … … 796 804 } // if 797 805 } // for 798 --indent;806 cur_indent -= CodeGenerator::tabsize; 799 807 800 808 output << indent << "}"; … … 864 872 865 873 output << "{" << std::endl; 866 ++indent;874 cur_indent += CodeGenerator::tabsize; 867 875 acceptAll( switchStmt->get_statements(), *this ); 868 --indent;876 cur_indent -= CodeGenerator::tabsize; 869 877 output << indent << "}"; 870 878 } … … 883 891 std::list<Statement *> sts = caseStmt->get_statements(); 884 892 885 ++indent;893 cur_indent += CodeGenerator::tabsize; 886 894 for ( std::list<Statement *>::iterator i = sts.begin(); i != sts.end(); i++) { 887 895 output << indent << printLabels( (*i)->get_labels() ) ; … … 889 897 output << endl; 890 898 } // for 891 --indent;899 cur_indent -= CodeGenerator::tabsize; 892 900 } 893 901 -
src/CodeGen/CodeGenerator.h
r0720e049 r59a75cb 100 100 template< class Iterator > void genCommaList( Iterator begin, Iterator end ); 101 101 102 struct Indenter { 103 Indenter(CodeGenerator &cg) : cg(cg) {} 104 CodeGenerator & cg; 105 std::ostream& operator()(std::ostream & os) const; 106 }; 107 102 108 struct LabelPrinter { 103 109 LabelPrinter(CodeGenerator &cg) : cg(cg), labels( 0 ) {} … … 122 128 private: 123 129 Indenter indent; 130 int cur_indent; 124 131 bool insideFunction; 125 132 std::ostream &output; -
src/Common/utility.h
r0720e049 r59a75cb 24 24 #include <sstream> 25 25 #include <string> 26 #include <type_traits>27 26 28 27 #include <cassert> … … 305 304 // for ( val : group_iterate( container1, container2, ... ) ) {} 306 305 // 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 308 307 309 308 template< typename T1, typename T2 > … … 314 313 315 314 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; 321 318 typedef std::tuple<T1Iter, T2Iter> IterTuple; 322 319 IterTuple it; … … 326 323 } 327 324 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) ); } 329 326 }; 330 327 iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); } … … 336 333 337 334 template< typename... Args > 338 group_iterate_t<Args...> group_iterate( Args &&... args ) {339 return group_iterate_t<Args...>( std::forward<Args>( args )...);335 group_iterate_t<Args...> group_iterate( const Args &... args ) { 336 return group_iterate_t<Args...>(args...); 340 337 } 341 338 -
src/ResolvExpr/CurrentObject.cc
r0720e049 r59a75cb 19 19 #include "CurrentObject.h" 20 20 21 #include "Common/Indenter.h"22 23 21 #include "SynTree/Declaration.h" 24 22 #include "SynTree/Initializer.h" … … 47 45 assertf( false, "unhandled type on getConstValue %s", toString( constExpr->get_result() ).c_str() ); // xxx - might be semantic error 48 46 } 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, ' '); 49 62 } 50 63 -
src/ResolvExpr/CurrentObject.h
r0720e049 r59a75cb 24 24 class MemberIterator; 25 25 26 // TODO: memory management of MemberIterators27 26 class CurrentObject { 28 27 public:
Note:
See TracChangeset
for help on using the changeset viewer.