Changes in / [d6ff3ff:3d4b23fa]
- Location:
- src
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
rd6ff3ff r3d4b23fa 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 74 66 CodeGenerator::LabelPrinter & CodeGenerator::LabelPrinter::operator()( std::list< Label > & l ) { 75 67 labels = &l; … … 109 101 } 110 102 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 ) {}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 ) {} 112 104 113 105 string CodeGenerator::mangleName( DeclarationWithType * decl ) { … … 200 192 output << " {" << endl; 201 193 202 cur_indent += CodeGenerator::tabsize;194 ++indent; 203 195 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++ ) { 204 196 output << lineDirective( *i ) << indent; … … 207 199 } // for 208 200 209 cur_indent -= CodeGenerator::tabsize;201 --indent; 210 202 211 203 output << indent << "}"; … … 237 229 output << " {" << endl; 238 230 239 cur_indent += CodeGenerator::tabsize;231 ++indent; 240 232 for ( std::list< Declaration* >::iterator i = memb.begin(); i != memb.end(); i++) { 241 233 ObjectDecl * obj = dynamic_cast< ObjectDecl* >( *i ); … … 249 241 } // for 250 242 251 cur_indent -= CodeGenerator::tabsize;243 --indent; 252 244 253 245 output << indent << "}"; … … 753 745 std::list< Statement * > & stmts = stmtExpr->get_statements()->get_kids(); 754 746 output << lineDirective( stmtExpr) << "({" << std::endl; 755 cur_indent += CodeGenerator::tabsize;747 ++indent; 756 748 unsigned int numStmts = stmts.size(); 757 749 unsigned int i = 0; … … 776 768 ++i; 777 769 } 778 cur_indent -= CodeGenerator::tabsize;770 --indent; 779 771 output << indent << "})"; 780 772 } … … 785 777 output << "{" << endl; 786 778 787 cur_indent += CodeGenerator::tabsize;779 ++indent; 788 780 789 781 for ( std::list<Statement *>::iterator i = ks.begin(); i != ks.end(); i++ ) { … … 796 788 } // if 797 789 } // for 798 cur_indent -= CodeGenerator::tabsize;790 --indent; 799 791 800 792 output << indent << "}"; … … 864 856 865 857 output << "{" << std::endl; 866 cur_indent += CodeGenerator::tabsize;858 ++indent; 867 859 acceptAll( switchStmt->get_statements(), *this ); 868 cur_indent -= CodeGenerator::tabsize;860 --indent; 869 861 output << indent << "}"; 870 862 } … … 883 875 std::list<Statement *> sts = caseStmt->get_statements(); 884 876 885 cur_indent += CodeGenerator::tabsize;877 ++indent; 886 878 for ( std::list<Statement *>::iterator i = sts.begin(); i != sts.end(); i++) { 887 879 output << indent << printLabels( (*i)->get_labels() ) ; … … 889 881 output << endl; 890 882 } // for 891 cur_indent -= CodeGenerator::tabsize;883 --indent; 892 884 } 893 885 -
src/CodeGen/CodeGenerator.h
rd6ff3ff r3d4b23fa 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 108 102 struct LabelPrinter { 109 103 LabelPrinter(CodeGenerator &cg) : cg(cg), labels( 0 ) {} … … 128 122 private: 129 123 Indenter indent; 130 int cur_indent;131 124 bool insideFunction; 132 125 std::ostream &output; -
src/Common/utility.h
rd6ff3ff r3d4b23fa 25 25 #include <sstream> 26 26 #include <string> 27 #include <type_traits> 27 28 28 29 #include <cassert> … … 305 306 // for ( val : group_iterate( container1, container2, ... ) ) {} 306 307 // syntax to have a for each that iterates multiple containers of the same length 307 // TODO: update to use variadic arguments , perfect forwarding308 // TODO: update to use variadic arguments 308 309 309 310 template< typename T1, typename T2 > … … 314 315 315 316 struct iterator { 316 typedef std::tuple<typename T1::value_type, typename T2::value_type> value_type; 317 typedef typename T1::iterator T1Iter; 318 typedef typename T2::iterator T2Iter; 317 typedef typename std::remove_reference<T1>::type T1val; 318 typedef typename std::remove_reference<T2>::type T2val; 319 typedef std::tuple<typename T1val::value_type &, typename T2val::value_type &> value_type; 320 typedef typename T1val::iterator T1Iter; 321 typedef typename T2val::iterator T2Iter; 319 322 typedef std::tuple<T1Iter, T2Iter> IterTuple; 320 323 IterTuple it; … … 324 327 } 325 328 bool operator!=( const iterator &other ) const { return it != other.it; } 326 value_type operator*() const { return std:: make_tuple( *std::get<0>(it), *std::get<1>(it) ); }329 value_type operator*() const { return std::tie( *std::get<0>(it), *std::get<1>(it) ); } 327 330 }; 328 331 iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); } … … 334 337 335 338 template< typename... Args > 336 group_iterate_t<Args...> group_iterate( const Args&... args ) {337 return group_iterate_t<Args...>( args...);339 group_iterate_t<Args...> group_iterate( Args &&... args ) { 340 return group_iterate_t<Args...>(std::forward<Args>( args )...); 338 341 } 339 342 -
src/ResolvExpr/CurrentObject.cc
rd6ff3ff r3d4b23fa 19 19 #include "CurrentObject.h" 20 20 21 #include "Common/Indenter.h" 22 21 23 #include "SynTree/Declaration.h" 22 24 #include "SynTree/Initializer.h" … … 45 47 assertf( false, "unhandled type on getConstValue %s", toString( constExpr->get_result() ).c_str() ); // xxx - might be semantic error 46 48 } 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, ' ');62 49 } 63 50 -
src/ResolvExpr/CurrentObject.h
rd6ff3ff r3d4b23fa 25 25 class MemberIterator; 26 26 27 // TODO: memory management of MemberIterators 27 28 class CurrentObject { 28 29 public:
Note:
See TracChangeset
for help on using the changeset viewer.