Changeset 6840e7c for src/SynTree
- Timestamp:
- Oct 19, 2017, 12:01:04 PM (8 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 837ce06
- Parents:
- b96ec83 (diff), a15b72c (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- src/SynTree
- Files:
-
- 43 edited
Legend:
- Unmodified
- Added
- Removed
-
src/SynTree/AddressExpr.cc
rb96ec83 r6840e7c 33 33 Type * addrType( Type * type ) { 34 34 if ( ReferenceType * refType = dynamic_cast< ReferenceType * >( type ) ) { 35 return new ReferenceType( refType->get_qualifiers(), addrType( refType-> get_base()) );35 return new ReferenceType( refType->get_qualifiers(), addrType( refType->base ) ); 36 36 } else { 37 37 return new PointerType( Type::Qualifiers(), type->clone() ); … … 40 40 } 41 41 42 AddressExpr::AddressExpr( Expression *arg , Expression *_aname ) : Expression( _aname), arg( arg ) {43 if ( arg-> has_result()) {44 if ( arg-> get_result()->get_lvalue() ) {42 AddressExpr::AddressExpr( Expression *arg ) : Expression(), arg( arg ) { 43 if ( arg->result ) { 44 if ( arg->result->get_lvalue() ) { 45 45 // lvalue, retains all layers of reference and gains a pointer inside the references 46 set_result( addrType( arg-> get_result()) );46 set_result( addrType( arg->result ) ); 47 47 } else { 48 48 // taking address of non-lvalue -- must be a reference, loses one layer of reference 49 ReferenceType * refType = strict_dynamic_cast< ReferenceType * >( arg-> get_result());50 set_result( addrType( refType-> get_base()) );49 ReferenceType * refType = strict_dynamic_cast< ReferenceType * >( arg->result ); 50 set_result( addrType( refType->base ) ); 51 51 } 52 52 // result of & is never an lvalue … … 62 62 } 63 63 64 void AddressExpr::print( std::ostream &os, intindent ) const {64 void AddressExpr::print( std::ostream &os, Indenter indent ) const { 65 65 os << "Address of:" << std::endl; 66 66 if ( arg ) { 67 os << std::string( indent+2, ' ' );68 arg->print( os, indent+ 2);67 os << indent+1; 68 arg->print( os, indent+1 ); 69 69 } // if 70 70 } … … 77 77 LabelAddressExpr::~LabelAddressExpr() {} 78 78 79 void LabelAddressExpr::print( std::ostream & os, int indent) const {80 os << "Address of label:" << std::endl << std::string( indent+2, ' ' ) <<arg;79 void LabelAddressExpr::print( std::ostream & os, Indenter ) const { 80 os << "Address of label:" << arg; 81 81 } 82 82 -
src/SynTree/AggregateDecl.cc
rb96ec83 r6840e7c 41 41 } 42 42 43 void AggregateDecl::print( std::ostream &os, intindent ) const {43 void AggregateDecl::print( std::ostream &os, Indenter indent ) const { 44 44 using std::string; 45 45 using std::endl; 46 46 47 os << typeString() << " " << get_name()<< ":";47 os << typeString() << " " << name << ":"; 48 48 if ( get_linkage() != LinkageSpec::Cforall ) { 49 os << " " << LinkageSpec::linkageName( get_linkage());49 os << " " << LinkageSpec::linkageName( linkage ); 50 50 } // if 51 os << " with body " << has_body() << endl;51 os << " with body " << has_body(); 52 52 53 53 if ( ! parameters.empty() ) { 54 os << endl << string( indent+2, ' ' ) << "with parameters" << endl;55 printAll( parameters, os, indent+ 4);54 os << endl << indent << "... with parameters" << endl; 55 printAll( parameters, os, indent+1 ); 56 56 } // if 57 57 if ( ! members.empty() ) { 58 os << endl << string( indent+2, ' ' ) << "with members" << endl;59 printAll( members, os, indent+ 4);58 os << endl << indent << "... with members" << endl; 59 printAll( members, os, indent+1 ); 60 60 } // if 61 61 if ( ! attributes.empty() ) { 62 os << endl << string( indent+2, ' ' ) << "with attributes" << endl;63 printAll( attributes, os, indent+ 4);62 os << endl << indent << "... with attributes" << endl; 63 printAll( attributes, os, indent+1 ); 64 64 } // if 65 os << endl; 65 66 } 66 67 67 void AggregateDecl::printShort( std::ostream &os, intindent ) const {68 void AggregateDecl::printShort( std::ostream &os, Indenter indent ) const { 68 69 using std::string; 69 70 using std::endl; 70 71 71 os << typeString() << " " << get_name(); 72 os << string( indent+2, ' ' ) << "with body " << has_body() << endl; 72 os << typeString() << " " << name << " with body " << has_body() << endl; 73 73 74 74 if ( ! parameters.empty() ) { 75 os << endl << string( indent+2, ' ' ) << "with parameters" << endl;76 printAll( parameters, os, indent+ 4);75 os << indent << "... with parameters" << endl; 76 printAll( parameters, os, indent+1 ); 77 77 } // if 78 78 } -
src/SynTree/ApplicationExpr.cc
rb96ec83 r6840e7c 55 55 set_result( ResolvExpr::extractResultType( function ) ); 56 56 57 assert( has_result());57 assert( result ); 58 58 } 59 59 … … 68 68 } 69 69 70 void printInferParams( const InferredParams & inferParams, std::ostream &os, intindent, int level ) {70 void printInferParams( const InferredParams & inferParams, std::ostream &os, Indenter indent, int level ) { 71 71 if ( ! inferParams.empty() ) { 72 os << std::string(indent, ' ')<< "with inferred parameters " << level << ":" << std::endl;72 os << indent << "with inferred parameters " << level << ":" << std::endl; 73 73 for ( InferredParams::const_iterator i = inferParams.begin(); i != inferParams.end(); ++i ) { 74 os << std::string(indent+2, ' ');75 Declaration::declFromId( i->second.decl )->printShort( os, indent+ 2);74 os << indent+1; 75 Declaration::declFromId( i->second.decl )->printShort( os, indent+1 ); 76 76 os << std::endl; 77 printInferParams( *i->second.inferParams, os, indent+ 2, level+1 );77 printInferParams( *i->second.inferParams, os, indent+1, level+1 ); 78 78 } // for 79 79 } // if 80 80 } 81 81 82 void ApplicationExpr::print( std::ostream &os, int indent ) const { 83 os << "Application of" << std::endl << std::string(indent+2, ' '); 84 function->print( os, indent+2 ); 82 void ApplicationExpr::print( std::ostream &os, Indenter indent ) const { 83 os << "Application of" << std::endl << indent+1; 84 function->print( os, indent+1 ); 85 os << std::endl; 85 86 if ( ! args.empty() ) { 86 os << std::string( indent, ' ' ) << "to arguments" << std::endl;87 printAll( args, os, indent+ 2);87 os << indent << "... to arguments" << std::endl; 88 printAll( args, os, indent+1 ); 88 89 } // if 89 printInferParams( inferParams, os, indent+ 2, 0 );90 printInferParams( inferParams, os, indent+1, 0 ); 90 91 Expression::print( os, indent ); 91 92 } -
src/SynTree/ArrayType.cc
rb96ec83 r6840e7c 39 39 } 40 40 41 void ArrayType::print( std::ostream &os, intindent ) const {41 void ArrayType::print( std::ostream &os, Indenter indent ) const { 42 42 Type::print( os, indent ); 43 43 if ( isStatic ) { -
src/SynTree/AttrType.cc
rb96ec83 r6840e7c 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // AttrType.cc.cc -- 7 // AttrType.cc.cc -- 8 8 // 9 9 // Author : Richard C. Bilson … … 42 42 } 43 43 44 void AttrType::print( std::ostream &os, intindent ) const {44 void AttrType::print( std::ostream &os, Indenter indent ) const { 45 45 Type::print( os, indent ); 46 46 os << "attribute " << name << " applied to "; -
src/SynTree/Attribute.cc
rb96ec83 r6840e7c 28 28 } 29 29 30 void Attribute::print( std::ostream &os, intindent ) const {30 void Attribute::print( std::ostream &os, Indenter indent ) const { 31 31 using std::endl; 32 32 using std::string; … … 36 36 if ( ! parameters.empty() ) { 37 37 os << " with parameters: " << endl; 38 printAll( parameters, os, indent );38 printAll( parameters, os, indent+1 ); 39 39 } 40 40 } -
src/SynTree/Attribute.h
rb96ec83 r6840e7c 43 43 bool empty() const { return name == ""; } 44 44 45 Attribute * clone() const { return new Attribute( *this ); }46 virtual void accept( Visitor & v ) { v.visit( this ); }47 virtual Attribute * acceptMutator( Mutator & m ) { return m.mutate( this ); }48 virtual void print( std::ostream & os, int indent = 0 ) const;45 Attribute * clone() const override { return new Attribute( *this ); } 46 virtual void accept( Visitor & v ) override { v.visit( this ); } 47 virtual Attribute * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 48 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 49 49 }; 50 50 -
src/SynTree/BaseSyntaxNode.h
rb96ec83 r6840e7c 17 17 18 18 #include "Common/CodeLocation.h" 19 #include "Common/Indenter.h" 19 20 class Visitor; 20 21 class Mutator; … … 29 30 virtual void accept( Visitor & v ) = 0; 30 31 virtual BaseSyntaxNode * acceptMutator( Mutator & m ) = 0; 31 virtual void print( std::ostream & os, int indent = 0 ) const = 0; 32 /// Notes: 33 /// * each node is responsible for indenting its children. 34 /// * Expressions should not finish with a newline, since the expression's parent has better information. 35 virtual void print( std::ostream & os, Indenter indent = {} ) const = 0; 36 void print( std::ostream & os, unsigned int indent ) { 37 print( os, Indenter{ Indenter::tabsize, indent }); 38 } 32 39 }; 33 40 -
src/SynTree/BasicType.cc
rb96ec83 r6840e7c 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // BasicType.cc -- 7 // BasicType.cc -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Sep 11 12:52:05201713 // Update Count : 912 // Last Modified On : Mon Sep 25 14:14:03 2017 13 // Update Count : 11 14 14 // 15 15 … … 24 24 BasicType::BasicType( const Type::Qualifiers &tq, Kind bt, const std::list< Attribute * > & attributes ) : Type( tq, attributes ), kind( bt ) {} 25 25 26 void BasicType::print( std::ostream &os, intindent ) const {26 void BasicType::print( std::ostream &os, Indenter indent ) const { 27 27 Type::print( os, indent ); 28 28 os << BasicType::typeNames[ kind ]; … … 43 43 case LongLongSignedInt: 44 44 case LongLongUnsignedInt: 45 case SignedInt128: 46 case UnsignedInt128: 45 47 return true; 46 48 case Float: -
src/SynTree/CommaExpr.cc
rb96ec83 r6840e7c 21 21 #include "Type.h" // for Type 22 22 23 CommaExpr::CommaExpr( Expression *arg1, Expression *arg2 , Expression *_aname)24 : Expression( _aname), arg1( arg1 ), arg2( arg2 ) {23 CommaExpr::CommaExpr( Expression *arg1, Expression *arg2 ) 24 : Expression(), arg1( arg1 ), arg2( arg2 ) { 25 25 // xxx - result of a comma expression is never an lvalue, so should set lvalue 26 26 // to false on all result types. Actually doing this causes some strange things … … 39 39 } 40 40 41 void CommaExpr::print( std::ostream &os, intindent ) const {41 void CommaExpr::print( std::ostream &os, Indenter indent ) const { 42 42 os << "Comma Expression:" << std::endl; 43 os << std::string( indent+2, ' ');44 arg1->print( os, indent+ 2);43 os << (indent+1); 44 arg1->print( os, indent+1 ); 45 45 os << std::endl; 46 os << std::string( indent+2, ' ');47 arg2->print( os, indent+ 2);46 os << (indent+1); 47 arg2->print( os, indent+1 ); 48 48 Expression::print( os, indent ); 49 49 } -
src/SynTree/CompoundStmt.cc
rb96ec83 r6840e7c 73 73 } 74 74 75 void CompoundStmt::print( std::ostream &os, intindent ) const {76 os << "CompoundStmt" << endl 77 printAll( kids, os, indent + 2);75 void CompoundStmt::print( std::ostream &os, Indenter indent ) const { 76 os << "CompoundStmt" << endl; 77 printAll( kids, os, indent+1 ); 78 78 } 79 79 -
src/SynTree/Constant.cc
rb96ec83 r6840e7c 71 71 } 72 72 73 void Constant::print( std::ostream &os ) const {73 void Constant::print( std::ostream &os, Indenter ) const { 74 74 os << "(" << rep << " " << val.ival; 75 75 if ( type ) { -
src/SynTree/Constant.h
rb96ec83 r6840e7c 19 19 #include <string> // for string 20 20 21 #include "BaseSyntaxNode.h" 21 22 #include "Mutator.h" // for Mutator 22 23 #include "Visitor.h" // for Visitor … … 24 25 class Type; 25 26 26 class Constant {27 class Constant : public BaseSyntaxNode { 27 28 public: 28 29 Constant( Type * type, std::string rep, unsigned long long val ); … … 30 31 Constant( const Constant & other ); 31 32 virtual ~Constant(); 33 34 virtual Constant * clone() const { return new Constant( *this ); } 32 35 33 36 Type * get_type() { return type; } … … 54 57 virtual void accept( Visitor & v ) { v.visit( this ); } 55 58 virtual Constant * acceptMutator( Mutator & m ) { return m.mutate( this ); } 56 virtual void print( std::ostream & os ) const;59 virtual void print( std::ostream & os, Indenter indent = 0 ) const; 57 60 private: 58 61 Type * type; -
src/SynTree/DeclStmt.cc
rb96ec83 r6840e7c 33 33 } 34 34 35 void DeclStmt::print( std::ostream &os, intindent ) const {35 void DeclStmt::print( std::ostream &os, Indenter indent ) const { 36 36 assert( decl != 0 ); 37 37 os << "Declaration of "; -
src/SynTree/Declaration.cc
rb96ec83 r6840e7c 42 42 43 43 void Declaration::fixUniqueId() { 44 // don't need to set unique ID twice 45 if ( uniqueId ) return; 44 46 uniqueId = ++lastUniqueId; 45 47 idMap[ uniqueId ] = this; … … 70 72 } 71 73 72 void AsmDecl::print( std::ostream &os, intindent ) const {74 void AsmDecl::print( std::ostream &os, Indenter indent ) const { 73 75 stmt->print( os, indent ); 74 76 } 75 77 76 void AsmDecl::printShort( std::ostream &os, intindent ) const {78 void AsmDecl::printShort( std::ostream &os, Indenter indent ) const { 77 79 stmt->print( os, indent ); 78 80 } -
src/SynTree/Declaration.h
rb96ec83 r6840e7c 61 61 62 62 void fixUniqueId( void ); 63 virtual Declaration *clone() const = 0;63 virtual Declaration *clone() const override = 0; 64 64 virtual void accept( Visitor &v ) override = 0; 65 virtual Declaration *acceptMutator( Mutator &m ) = 0;66 virtual void print( std::ostream &os, int indent = 0) const override = 0;67 virtual void printShort( std::ostream &os, int indent = 0) const = 0;65 virtual Declaration *acceptMutator( Mutator &m ) override = 0; 66 virtual void print( std::ostream &os, Indenter indent = {} ) const override = 0; 67 virtual void printShort( std::ostream &os, Indenter indent = {} ) const = 0; 68 68 69 69 static void dumpIds( std::ostream &os ); … … 142 142 virtual void accept( Visitor &v ) override { v.visit( this ); } 143 143 virtual DeclarationWithType *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 144 virtual void print( std::ostream &os, int indent = 0) const override;145 virtual void printShort( std::ostream &os, int indent = 0) const override;144 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 145 virtual void printShort( std::ostream &os, Indenter indent = {} ) const override; 146 146 }; 147 147 … … 170 170 virtual void accept( Visitor &v ) override { v.visit( this ); } 171 171 virtual DeclarationWithType *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 172 virtual void print( std::ostream &os, int indent = 0) const override;173 virtual void printShort( std::ostream &os, int indent = 0) const override;172 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 173 virtual void printShort( std::ostream &os, Indenter indent = {} ) const override; 174 174 }; 175 175 … … 193 193 194 194 virtual NamedTypeDecl *clone() const override = 0; 195 virtual void print( std::ostream &os, int indent = 0) const override;196 virtual void printShort( std::ostream &os, int indent = 0) const override;195 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 196 virtual void printShort( std::ostream &os, Indenter indent = {} ) const override; 197 197 }; 198 198 … … 235 235 virtual void accept( Visitor &v ) override { v.visit( this ); } 236 236 virtual Declaration *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 237 virtual void print( std::ostream &os, int indent = 0) const override;237 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 238 238 239 239 private: … … 276 276 AggregateDecl * set_body( bool body ) { AggregateDecl::body = body; return this; } 277 277 278 virtual void print( std::ostream &os, int indent = 0) const override;279 virtual void printShort( std::ostream &os, int indent = 0) const override;278 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 279 virtual void printShort( std::ostream &os, Indenter indent = {} ) const override; 280 280 protected: 281 281 virtual std::string typeString() const = 0; … … 355 355 virtual void accept( Visitor &v ) override { v.visit( this ); } 356 356 virtual AsmDecl *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 357 virtual void print( std::ostream &os, int indent = 0) const override;358 virtual void printShort( std::ostream &os, int indent = 0) const override;357 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 358 virtual void printShort( std::ostream &os, Indenter indent = {} ) const override; 359 359 }; 360 360 -
src/SynTree/Expression.cc
rb96ec83 r6840e7c 33 33 #include "GenPoly/Lvalue.h" 34 34 35 Expression::Expression( Expression *_aname ) : result( 0 ), env( 0 ), argName( _aname) {}36 37 Expression::Expression( const Expression &other ) : BaseSyntaxNode( other ), result( maybeClone( other.result ) ), env( maybeClone( other.env ) ), argName( maybeClone( other.get_argName() ) ),extension( other.extension ) {35 Expression::Expression() : result( 0 ), env( 0 ) {} 36 37 Expression::Expression( const Expression &other ) : BaseSyntaxNode( other ), result( maybeClone( other.result ) ), env( maybeClone( other.env ) ), extension( other.extension ) { 38 38 } 39 39 40 40 Expression::~Expression() { 41 41 delete env; 42 delete argName; // xxx -- there's a problem in cloning ConstantExpr I still don't know how to fix43 42 delete result; 44 43 } 45 44 46 void Expression::print( std::ostream &os, intindent ) const {45 void Expression::print( std::ostream &os, Indenter indent ) const { 47 46 if ( env ) { 48 os << std:: string( indent, ' ' ) << "with environment:" << std::endl;49 env->print( os, indent+ 2);47 os << std::endl << indent << "... with environment:" << std::endl; 48 env->print( os, indent+1 ); 50 49 } // if 51 50 52 if ( argName ) { 53 os << std::string( indent, ' ' ) << "with designator:"; 54 argName->print( os, indent+2 ); 51 if ( extension ) { 52 os << std::endl << indent << "... with extension:"; 55 53 } // if 56 57 if ( extension ) { 58 os << std::string( indent, ' ' ) << "with extension:"; 59 } // if 60 } 61 62 ConstantExpr::ConstantExpr( Constant _c, Expression *_aname ) : Expression( _aname ), constant( _c ) { 54 } 55 56 ConstantExpr::ConstantExpr( Constant _c ) : Expression(), constant( _c ) { 63 57 set_result( constant.get_type()->clone() ); 64 58 } … … 69 63 ConstantExpr::~ConstantExpr() {} 70 64 71 void ConstantExpr::print( std::ostream &os, intindent ) const {65 void ConstantExpr::print( std::ostream &os, Indenter indent ) const { 72 66 os << "constant expression " ; 73 67 constant.print( os ); … … 75 69 } 76 70 77 VariableExpr::VariableExpr( DeclarationWithType *_var , Expression *_aname ) : Expression( _aname), var( _var ) {71 VariableExpr::VariableExpr( DeclarationWithType *_var ) : Expression(), var( _var ) { 78 72 assert( var ); 79 73 assert( var->get_type() ); … … 96 90 } 97 91 98 void VariableExpr::print( std::ostream &os, intindent ) const {92 void VariableExpr::print( std::ostream &os, Indenter indent ) const { 99 93 os << "Variable Expression: "; 100 101 Declaration *decl = get_var(); 102 if ( decl != 0) decl->printShort(os, indent + 2); 103 os << std::endl; 104 Expression::print( os, indent ); 105 } 106 107 SizeofExpr::SizeofExpr( Expression *expr_, Expression *_aname ) : 108 Expression( _aname ), expr(expr_), type(0), isType(false) { 94 var->printShort(os, indent); 95 Expression::print( os, indent ); 96 } 97 98 SizeofExpr::SizeofExpr( Expression *expr_ ) : 99 Expression(), expr(expr_), type(0), isType(false) { 109 100 set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ); 110 101 } 111 102 112 SizeofExpr::SizeofExpr( Type *type_ , Expression *_aname) :113 Expression( _aname), expr(0), type(type_), isType(true) {103 SizeofExpr::SizeofExpr( Type *type_ ) : 104 Expression(), expr(0), type(type_), isType(true) { 114 105 set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ); 115 106 } … … 124 115 } 125 116 126 void SizeofExpr::print( std::ostream &os, intindent) const {117 void SizeofExpr::print( std::ostream &os, Indenter indent) const { 127 118 os << "Sizeof Expression on: "; 128 129 if (isType) 130 type->print(os, indent + 2); 131 else 132 expr->print(os, indent + 2); 133 134 os << std::endl; 135 Expression::print( os, indent ); 136 } 137 138 AlignofExpr::AlignofExpr( Expression *expr_, Expression *_aname ) : 139 Expression( _aname ), expr(expr_), type(0), isType(false) { 119 if (isType) type->print(os, indent+1); 120 else expr->print(os, indent+1); 121 Expression::print( os, indent ); 122 } 123 124 AlignofExpr::AlignofExpr( Expression *expr_ ) : 125 Expression(), expr(expr_), type(0), isType(false) { 140 126 set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ); 141 127 } 142 128 143 AlignofExpr::AlignofExpr( Type *type_ , Expression *_aname) :144 Expression( _aname), expr(0), type(type_), isType(true) {129 AlignofExpr::AlignofExpr( Type *type_ ) : 130 Expression(), expr(0), type(type_), isType(true) { 145 131 set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ); 146 132 } … … 155 141 } 156 142 157 void AlignofExpr::print( std::ostream &os, intindent) const {143 void AlignofExpr::print( std::ostream &os, Indenter indent) const { 158 144 os << "Alignof Expression on: "; 159 160 if (isType) 161 type->print(os, indent + 2); 162 else 163 expr->print(os, indent + 2); 164 165 os << std::endl; 166 Expression::print( os, indent ); 167 } 168 169 UntypedOffsetofExpr::UntypedOffsetofExpr( Type *type_, const std::string &member_, Expression *_aname ) : 170 Expression( _aname ), type(type_), member(member_) { 145 if (isType) type->print(os, indent+1); 146 else expr->print(os, indent+1); 147 Expression::print( os, indent ); 148 } 149 150 UntypedOffsetofExpr::UntypedOffsetofExpr( Type *type, const std::string &member ) : 151 Expression(), type(type), member(member) { 152 assert( type ); 171 153 set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ); 172 154 } … … 179 161 } 180 162 181 void UntypedOffsetofExpr::print( std::ostream &os, int indent) const { 182 os << std::string( indent, ' ' ) << "Untyped Offsetof Expression on member " << member << " of "; 183 184 if ( type ) { 185 type->print(os, indent + 2); 186 } else { 187 os << "<NULL>"; 188 } 189 190 os << std::endl; 191 Expression::print( os, indent ); 192 } 193 194 OffsetofExpr::OffsetofExpr( Type *type_, DeclarationWithType *member_, Expression *_aname ) : 195 Expression( _aname ), type(type_), member(member_) { 163 void UntypedOffsetofExpr::print( std::ostream &os, Indenter indent) const { 164 os << "Untyped Offsetof Expression on member " << member << " of "; 165 type->print(os, indent+1); 166 Expression::print( os, indent ); 167 } 168 169 OffsetofExpr::OffsetofExpr( Type *type, DeclarationWithType *member ) : 170 Expression(), type(type), member(member) { 171 assert( member ); 172 assert( type ); 196 173 set_result( new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ); 197 174 } … … 204 181 } 205 182 206 void OffsetofExpr::print( std::ostream &os, int indent) const { 207 os << std::string( indent, ' ' ) << "Offsetof Expression on member "; 208 209 if ( member ) { 210 os << member->get_name(); 211 } else { 212 os << "<NULL>"; 213 } 214 215 os << " of "; 216 217 if ( type ) { 218 type->print(os, indent + 2); 219 } else { 220 os << "<NULL>"; 221 } 222 223 os << std::endl; 224 Expression::print( os, indent ); 225 } 226 227 OffsetPackExpr::OffsetPackExpr( StructInstType *type_, Expression *aname_ ) : Expression( aname_ ), type( type_ ) { 183 void OffsetofExpr::print( std::ostream &os, Indenter indent) const { 184 os << "Offsetof Expression on member " << member->name << " of "; 185 type->print(os, indent+1); 186 Expression::print( os, indent ); 187 } 188 189 OffsetPackExpr::OffsetPackExpr( StructInstType *type ) : Expression(), type( type ) { 190 assert( type ); 228 191 set_result( new ArrayType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0, false, false ) ); 229 192 } … … 233 196 OffsetPackExpr::~OffsetPackExpr() { delete type; } 234 197 235 void OffsetPackExpr::print( std::ostream &os, int indent ) const { 236 os << std::string( indent, ' ' ) << "Offset pack expression on "; 237 238 if ( type ) { 239 type->print(os, indent + 2); 240 } else { 241 os << "<NULL>"; 242 } 243 244 os << std::endl; 245 Expression::print( os, indent ); 246 } 247 248 AttrExpr::AttrExpr( Expression *attr, Expression *expr_, Expression *_aname ) : 249 Expression( _aname ), attr( attr ), expr(expr_), type(0), isType(false) { 250 } 251 252 AttrExpr::AttrExpr( Expression *attr, Type *type_, Expression *_aname ) : 253 Expression( _aname ), attr( attr ), expr(0), type(type_), isType(true) { 198 void OffsetPackExpr::print( std::ostream &os, Indenter indent ) const { 199 os << "Offset pack expression on "; 200 type->print(os, indent+1); 201 Expression::print( os, indent ); 202 } 203 204 AttrExpr::AttrExpr( Expression *attr, Expression *expr_ ) : 205 Expression(), attr( attr ), expr(expr_), type(0), isType(false) { 206 } 207 208 AttrExpr::AttrExpr( Expression *attr, Type *type_ ) : 209 Expression(), attr( attr ), expr(0), type(type_), isType(true) { 254 210 } 255 211 … … 264 220 } 265 221 266 void AttrExpr::print( std::ostream &os, intindent) const {222 void AttrExpr::print( std::ostream &os, Indenter indent) const { 267 223 os << "Attr "; 268 attr->print( os, indent + 2);224 attr->print( os, indent+1); 269 225 if ( isType || expr ) { 270 226 os << "applied to: "; 271 272 if (isType) 273 type->print(os, indent + 2); 274 else 275 expr->print(os, indent + 2); 227 if (isType) type->print(os, indent+1); 228 else expr->print(os, indent+1); 276 229 } // if 277 278 os << std::endl; 279 Expression::print( os, indent ); 280 } 281 282 CastExpr::CastExpr( Expression *arg_, Type *toType, Expression *_aname ) : Expression( _aname ), arg(arg_) { 230 Expression::print( os, indent ); 231 } 232 233 CastExpr::CastExpr( Expression *arg_, Type *toType ) : Expression(), arg(arg_) { 283 234 set_result(toType); 284 235 } 285 236 286 CastExpr::CastExpr( Expression *arg_ , Expression *_aname ) : Expression( _aname), arg(arg_) {237 CastExpr::CastExpr( Expression *arg_ ) : Expression(), arg(arg_) { 287 238 set_result( new VoidType( Type::Qualifiers() ) ); 288 239 } … … 295 246 } 296 247 297 void CastExpr::print( std::ostream &os, int indent ) const { 298 os << "Cast of:" << std::endl << std::string( indent+2, ' ' ); 299 arg->print(os, indent+2); 300 os << std::endl << std::string( indent, ' ' ) << "to:" << std::endl; 301 os << std::string( indent+2, ' ' ); 248 void CastExpr::print( std::ostream &os, Indenter indent ) const { 249 os << "Cast of:" << std::endl << indent+1; 250 arg->print(os, indent+1); 251 os << std::endl << indent << "... to:"; 302 252 if ( result->isVoid() ) { 303 os << " nothing";253 os << " nothing"; 304 254 } else { 305 result->print( os, indent+2 ); 255 os << std::endl << indent+1; 256 result->print( os, indent+1 ); 306 257 } // if 307 os << std::endl;308 258 Expression::print( os, indent ); 309 259 } … … 320 270 } 321 271 322 void VirtualCastExpr::print( std::ostream &os, int indent ) const { 323 os << "Virtual Cast of:" << std::endl << std::string( indent+2, ' ' ); 324 arg->print(os, indent+2); 325 os << std::endl << std::string( indent, ' ' ) << "to:" << std::endl; 326 os << std::string( indent+2, ' ' ); 272 void VirtualCastExpr::print( std::ostream &os, Indenter indent ) const { 273 os << "Virtual Cast of:" << std::endl << indent+1; 274 arg->print(os, indent+1); 275 os << std::endl << indent << "... to:"; 327 276 if ( ! result ) { 328 os << " unknown";277 os << " unknown"; 329 278 } else { 330 result->print( os, indent+2 ); 279 os << std::endl << indent+1; 280 result->print( os, indent+1 ); 331 281 } // if 332 os << std::endl; 333 Expression::print( os, indent ); 334 } 335 336 UntypedMemberExpr::UntypedMemberExpr( Expression * _member, Expression *_aggregate, Expression *_aname ) : 337 Expression( _aname ), member(_member), aggregate(_aggregate) {} 282 Expression::print( os, indent ); 283 } 284 285 UntypedMemberExpr::UntypedMemberExpr( Expression * member, Expression *aggregate ) : 286 Expression(), member(member), aggregate(aggregate) { 287 assert( aggregate ); 288 } 338 289 339 290 UntypedMemberExpr::UntypedMemberExpr( const UntypedMemberExpr &other ) : … … 346 297 } 347 298 348 void UntypedMemberExpr::print( std::ostream &os, int indent ) const { 349 os << "Untyped Member Expression, with field: " << std::endl; 350 os << std::string( indent+2, ' ' ); 351 get_member()->print(os, indent+4); 352 os << std::string( indent+2, ' ' ); 353 354 Expression *agg = get_aggregate(); 355 os << "from aggregate: " << std::endl; 356 if (agg != 0) { 357 os << std::string( indent + 4, ' ' ); 358 agg->print(os, indent + 4); 359 } 360 os << std::string( indent+2, ' ' ); 299 void UntypedMemberExpr::print( std::ostream &os, Indenter indent ) const { 300 os << "Untyped Member Expression, with field: " << std::endl << indent+1; 301 member->print(os, indent+1 ); 302 os << indent << "... from aggregate: " << std::endl << indent+1; 303 aggregate->print(os, indent+1); 361 304 Expression::print( os, indent ); 362 305 } … … 377 320 378 321 379 MemberExpr::MemberExpr( DeclarationWithType *_member, Expression *_aggregate, Expression *_aname ) : 380 Expression( _aname ), member(_member), aggregate(_aggregate) { 322 MemberExpr::MemberExpr( DeclarationWithType *member, Expression *aggregate ) : 323 Expression(), member(member), aggregate(aggregate) { 324 assert( member ); 325 assert( aggregate ); 381 326 382 327 TypeSubstitution sub( makeSub( aggregate->get_result() ) ); … … 396 341 } 397 342 398 void MemberExpr::print( std::ostream &os, intindent ) const {343 void MemberExpr::print( std::ostream &os, Indenter indent ) const { 399 344 os << "Member Expression, with field: " << std::endl; 400 401 assert( member ); 402 os << std::string( indent + 2, ' ' ); 403 member->print( os, indent + 2 ); 404 os << std::endl; 405 406 Expression *agg = get_aggregate(); 407 os << std::string( indent, ' ' ) << "from aggregate: " << std::endl; 408 if (agg != 0) { 409 os << std::string( indent + 2, ' ' ); 410 agg->print(os, indent + 2); 411 } 412 os << std::string( indent+2, ' ' ); 413 Expression::print( os, indent ); 414 } 415 416 UntypedExpr::UntypedExpr( Expression *_function, const std::list<Expression *> &_args, Expression *_aname ) : 417 Expression( _aname ), function(_function), args(_args) {} 345 os << indent+1; 346 member->print( os, indent+1 ); 347 os << std::endl << indent << "... from aggregate: " << std::endl << indent+1; 348 aggregate->print(os, indent + 1); 349 Expression::print( os, indent ); 350 } 351 352 UntypedExpr::UntypedExpr( Expression *function, const std::list<Expression *> &args ) : 353 Expression(), function(function), args(args) {} 418 354 419 355 UntypedExpr::UntypedExpr( const UntypedExpr &other ) : … … 456 392 457 393 458 void UntypedExpr::print( std::ostream &os, intindent ) const {394 void UntypedExpr::print( std::ostream &os, Indenter indent ) const { 459 395 os << "Applying untyped: " << std::endl; 460 os << std::string( indent+2, ' ' ); 461 function->print(os, indent + 2); 462 os << std::string( indent, ' ' ) << "...to: " << std::endl; 463 printAll(args, os, indent + 2); 464 Expression::print( os, indent ); 465 } 466 467 void UntypedExpr::printArgs( std::ostream &os, int indent ) const { 468 std::list<Expression *>::const_iterator i; 469 for (i = args.begin(); i != args.end(); i++) { 470 os << std::string(indent, ' ' ); 471 (*i)->print(os, indent); 472 } 473 } 474 475 NameExpr::NameExpr( std::string _name, Expression *_aname ) : Expression( _aname ), name(_name) { 476 assertf(_name != "0", "Zero is not a valid name\n"); 477 assertf(_name != "1", "One is not a valid name\n"); 396 os << indent+1; 397 function->print(os, indent+1); 398 os << std::endl << indent << "...to: " << std::endl; 399 printAll(args, os, indent+1); 400 Expression::print( os, indent ); 401 } 402 403 NameExpr::NameExpr( std::string name ) : Expression(), name(name) { 404 assertf(name != "0", "Zero is not a valid name"); 405 assertf(name != "1", "One is not a valid name"); 478 406 } 479 407 … … 483 411 NameExpr::~NameExpr() {} 484 412 485 void NameExpr::print( std::ostream &os, intindent ) const {486 os << "Name: " << get_name() << std::endl;487 Expression::print( os, indent ); 488 } 489 490 LogicalExpr::LogicalExpr( Expression *arg1_, Expression *arg2_, bool andp , Expression *_aname) :491 Expression( _aname), arg1(arg1_), arg2(arg2_), isAnd(andp) {413 void NameExpr::print( std::ostream &os, Indenter indent ) const { 414 os << "Name: " << get_name(); 415 Expression::print( os, indent ); 416 } 417 418 LogicalExpr::LogicalExpr( Expression *arg1_, Expression *arg2_, bool andp ) : 419 Expression(), arg1(arg1_), arg2(arg2_), isAnd(andp) { 492 420 set_result( new BasicType( Type::Qualifiers(), BasicType::SignedInt ) ); 493 421 } … … 502 430 } 503 431 504 void LogicalExpr::print( std::ostream &os, intindent )const {505 os << "Short-circuited operation (" << (isAnd ?"and":"or") << ") on: ";432 void LogicalExpr::print( std::ostream &os, Indenter indent )const { 433 os << "Short-circuited operation (" << (isAnd ? "and" : "or") << ") on: "; 506 434 arg1->print(os); 507 435 os << " and "; 508 436 arg2->print(os); 509 os << std::endl; 510 Expression::print( os, indent ); 511 } 512 513 ConditionalExpr::ConditionalExpr( Expression *arg1_, Expression *arg2_, Expression *arg3_, Expression *_aname ) : 514 Expression( _aname ), arg1(arg1_), arg2(arg2_), arg3(arg3_) {} 437 Expression::print( os, indent ); 438 } 439 440 ConditionalExpr::ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3 ) : 441 Expression(), arg1(arg1), arg2(arg2), arg3(arg3) {} 515 442 516 443 ConditionalExpr::ConditionalExpr( const ConditionalExpr &other ) : … … 524 451 } 525 452 526 void ConditionalExpr::print( std::ostream &os, int indent ) const { 527 os << "Conditional expression on: " << std::endl; 528 os << std::string( indent+2, ' ' ); 529 arg1->print( os, indent+2 ); 530 os << std::string( indent, ' ' ) << "First alternative:" << std::endl; 531 os << std::string( indent+2, ' ' ); 532 arg2->print( os, indent+2 ); 533 os << std::string( indent, ' ' ) << "Second alternative:" << std::endl; 534 os << std::string( indent+2, ' ' ); 535 arg3->print( os, indent+2 ); 536 os << std::endl; 453 void ConditionalExpr::print( std::ostream &os, Indenter indent ) const { 454 os << "Conditional expression on: " << std::endl << indent+1; 455 arg1->print( os, indent+1 ); 456 os << indent << "First alternative:" << std::endl << indent+1; 457 arg2->print( os, indent+1 ); 458 os << indent << "Second alternative:" << std::endl << indent+1; 459 arg3->print( os, indent+1 ); 537 460 Expression::print( os, indent ); 538 461 } … … 541 464 542 465 543 void AsmExpr::print( std::ostream &os, intindent ) const {466 void AsmExpr::print( std::ostream &os, Indenter indent ) const { 544 467 os << "Asm Expression: " << std::endl; 545 if ( inout ) inout->print( os, indent + 2);546 if ( constraint ) constraint->print( os, indent + 2);547 if ( operand ) operand->print( os, indent + 2);468 if ( inout ) inout->print( os, indent+1 ); 469 if ( constraint ) constraint->print( os, indent+1 ); 470 if ( operand ) operand->print( os, indent+1 ); 548 471 } 549 472 … … 551 474 ImplicitCopyCtorExpr::ImplicitCopyCtorExpr( ApplicationExpr * callExpr ) : callExpr( callExpr ) { 552 475 assert( callExpr ); 553 assert( callExpr-> has_result());476 assert( callExpr->result ); 554 477 set_result( callExpr->get_result()->clone() ); 555 478 } … … 569 492 } 570 493 571 void ImplicitCopyCtorExpr::print( std::ostream &os, int indent ) const { 572 os << "Implicit Copy Constructor Expression: " << std::endl; 573 assert( callExpr ); 574 os << std::string( indent+2, ' ' ); 575 callExpr->print( os, indent + 2 ); 576 os << std::endl << std::string( indent, ' ' ) << "with temporaries:" << std::endl; 577 printAll(tempDecls, os, indent+2); 578 os << std::endl << std::string( indent, ' ' ) << "with return temporaries:" << std::endl; 579 printAll(returnDecls, os, indent+2); 494 void ImplicitCopyCtorExpr::print( std::ostream &os, Indenter indent ) const { 495 os << "Implicit Copy Constructor Expression: " << std::endl << indent+1; 496 callExpr->print( os, indent+1 ); 497 os << std::endl << indent << "... with temporaries:" << std::endl; 498 printAll( tempDecls, os, indent+1 ); 499 os << std::endl << indent << "... with return temporaries:" << std::endl; 500 printAll( returnDecls, os, indent+1 ); 580 501 Expression::print( os, indent ); 581 502 } … … 587 508 Expression * arg = InitTweak::getCallArg( callExpr, 0 ); 588 509 assert( arg ); 589 set_result( maybeClone( arg-> get_result()) );510 set_result( maybeClone( arg->result ) ); 590 511 } 591 512 … … 597 518 } 598 519 599 void ConstructorExpr::print( std::ostream &os, int indent ) const { 600 os << "Constructor Expression: " << std::endl; 601 assert( callExpr ); 602 os << std::string( indent+2, ' ' ); 520 void ConstructorExpr::print( std::ostream &os, Indenter indent ) const { 521 os << "Constructor Expression: " << std::endl << indent+1; 603 522 callExpr->print( os, indent + 2 ); 604 523 Expression::print( os, indent ); … … 618 537 } 619 538 620 void CompoundLiteralExpr::print( std::ostream &os, int indent ) const { 621 os << "Compound Literal Expression: " << std::endl; 622 os << std::string( indent+2, ' ' ); 623 get_result()->print( os, indent + 2 ); 624 os << std::string( indent+2, ' ' ); 625 initializer->print( os, indent + 2 ); 539 void CompoundLiteralExpr::print( std::ostream &os, Indenter indent ) const { 540 os << "Compound Literal Expression: " << std::endl << indent+1; 541 result->print( os, indent+1 ); 542 os << indent+1; 543 initializer->print( os, indent+1 ); 626 544 Expression::print( os, indent ); 627 545 } … … 629 547 RangeExpr::RangeExpr( Expression *low, Expression *high ) : low( low ), high( high ) {} 630 548 RangeExpr::RangeExpr( const RangeExpr &other ) : Expression( other ), low( other.low->clone() ), high( other.high->clone() ) {} 631 void RangeExpr::print( std::ostream &os, intindent ) const {549 void RangeExpr::print( std::ostream &os, Indenter indent ) const { 632 550 os << "Range Expression: "; 633 551 low->print( os, indent ); … … 659 577 deleteAll( returnDecls ); 660 578 } 661 void StmtExpr::print( std::ostream &os, intindent ) const {662 os << "Statement Expression: " << std::endl << std::string( indent, ' ' );663 statements->print( os, indent+ 2);579 void StmtExpr::print( std::ostream &os, Indenter indent ) const { 580 os << "Statement Expression: " << std::endl << indent+1; 581 statements->print( os, indent+1 ); 664 582 if ( ! returnDecls.empty() ) { 665 os << std::string( indent+2, ' ' ) << "with returnDecls: ";666 printAll( returnDecls, os, indent+ 2);583 os << indent+1 << "... with returnDecls: "; 584 printAll( returnDecls, os, indent+1 ); 667 585 } 668 586 if ( ! dtors.empty() ) { 669 os << std::string( indent+2, ' ' ) << "with dtors: ";670 printAll( dtors, os, indent+ 2);587 os << indent+1 << "... with dtors: "; 588 printAll( dtors, os, indent+1 ); 671 589 } 672 590 Expression::print( os, indent ); … … 690 608 delete var; 691 609 } 692 void UniqueExpr::print( std::ostream &os, intindent ) const {693 os << "Unique Expression with id:" << id << std::endl << std::string( indent+2, ' ' );694 get_expr()->print( os, indent+2);695 if ( get_object()) {696 os << std::string( indent+2, ' ' ) << "with decl: ";697 get_object()->printShort( os, indent+ 2);610 void UniqueExpr::print( std::ostream &os, Indenter indent ) const { 611 os << "Unique Expression with id:" << id << std::endl << indent+1; 612 expr->print( os, indent+1 ); 613 if ( object ) { 614 os << indent << "... with decl: "; 615 get_object()->printShort( os, indent+1 ); 698 616 } 699 617 Expression::print( os, indent ); … … 713 631 } 714 632 715 void UntypedInitExpr::print( std::ostream & os, intindent ) const {716 os << "Untyped Init Expression" << std::endl << std::string( indent+2, ' ' );717 expr->print( os, indent+ 2);633 void UntypedInitExpr::print( std::ostream & os, Indenter indent ) const { 634 os << "Untyped Init Expression" << std::endl << indent+1; 635 expr->print( os, indent+1 ); 718 636 if ( ! initAlts.empty() ) { 719 637 for ( const InitAlternative & alt : initAlts ) { 720 os << std::string( indent+2, ' ' )<< "InitAlternative: ";721 alt.type->print( os, indent+ 2);722 alt.designation->print( os, indent+ 2);638 os << indent+1 << "InitAlternative: "; 639 alt.type->print( os, indent+1 ); 640 alt.designation->print( os, indent+1 ); 723 641 } 724 642 } … … 734 652 } 735 653 736 void InitExpr::print( std::ostream & os, intindent ) const {737 os << "Init Expression" << std::endl << std::string( indent+2, ' ' );738 expr->print( os, indent+ 2);739 os << std::string( indent+2, ' ' ) << "with designation: ";740 designation->print( os, indent+ 2);654 void InitExpr::print( std::ostream & os, Indenter indent ) const { 655 os << "Init Expression" << std::endl << indent+1; 656 expr->print( os, indent+1 ); 657 os << indent+1 << "... with designation: "; 658 designation->print( os, indent+1 ); 741 659 } 742 660 -
src/SynTree/Expression.h
rb96ec83 r6840e7c 36 36 Type * result; 37 37 TypeSubstitution * env; 38 Expression * argName; // if expression is used as an argument, it can be "designated" by this name39 38 bool extension = false; 40 39 41 Expression( Expression * _aname = nullptr);40 Expression(); 42 41 Expression( const Expression & other ); 43 42 virtual ~Expression(); … … 46 45 const Type * get_result() const { return result; } 47 46 void set_result( Type * newValue ) { result = newValue; } 48 bool has_result() const { return result != nullptr; }49 47 50 48 TypeSubstitution * get_env() const { return env; } 51 49 void set_env( TypeSubstitution * newValue ) { env = newValue; } 52 Expression * get_argName() const { return argName; }53 void set_argName( Expression * name ) { argName = name; }54 50 bool get_extension() const { return extension; } 55 51 Expression * set_extension( bool exten ) { extension = exten; return this; } 56 52 57 virtual Expression * clone() const = 0;58 virtual void accept( Visitor & v ) = 0;59 virtual Expression * acceptMutator( Mutator & m ) = 0;60 virtual void print( std::ostream & os, int indent = 0 ) const;53 virtual Expression * clone() const override = 0; 54 virtual void accept( Visitor & v ) override = 0; 55 virtual Expression * acceptMutator( Mutator & m ) override = 0; 56 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 61 57 }; 62 58 … … 101 97 virtual void accept( Visitor & v ) { v.visit( this ); } 102 98 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 103 virtual void print( std::ostream & os, int indent = 0) const;99 virtual void print( std::ostream & os, Indenter indent = {} ) const; 104 100 }; 105 101 … … 112 108 std::list<Expression*> args; 113 109 114 UntypedExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >() , Expression *_aname = nullptr);110 UntypedExpr( Expression * function, const std::list<Expression *> & args = std::list< Expression * >() ); 115 111 UntypedExpr( const UntypedExpr & other ); 116 112 virtual ~UntypedExpr(); … … 119 115 void set_function( Expression * newValue ) { function = newValue; } 120 116 121 void set_args( std::list<Expression *> & listArgs ) { args = listArgs; }122 117 std::list<Expression*>::iterator begin_args() { return args.begin(); } 123 118 std::list<Expression*>::iterator end_args() { return args.end(); } … … 130 125 virtual void accept( Visitor & v ) { v.visit( this ); } 131 126 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 132 virtual void print( std::ostream & os, int indent = 0 ) const; 133 virtual void printArgs(std::ostream & os, int indent = 0) const; 127 virtual void print( std::ostream & os, Indenter indent = {} ) const; 134 128 }; 135 129 … … 139 133 std::string name; 140 134 141 NameExpr( std::string name , Expression *_aname = nullptr);135 NameExpr( std::string name ); 142 136 NameExpr( const NameExpr & other ); 143 137 virtual ~NameExpr(); … … 149 143 virtual void accept( Visitor & v ) { v.visit( this ); } 150 144 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 151 virtual void print( std::ostream & os, int indent = 0) const;145 virtual void print( std::ostream & os, Indenter indent = {} ) const; 152 146 }; 153 147 … … 160 154 Expression * arg; 161 155 162 AddressExpr( Expression * arg , Expression *_aname = nullptr);156 AddressExpr( Expression * arg ); 163 157 AddressExpr( const AddressExpr & other ); 164 158 virtual ~AddressExpr(); … … 170 164 virtual void accept( Visitor & v ) { v.visit( this ); } 171 165 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 172 virtual void print( std::ostream & os, int indent = 0) const;166 virtual void print( std::ostream & os, Indenter indent = {} ) const; 173 167 }; 174 168 … … 186 180 virtual void accept( Visitor & v ) { v.visit( this ); } 187 181 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 188 virtual void print( std::ostream & os, int indent = 0) const;182 virtual void print( std::ostream & os, Indenter indent = {} ) const; 189 183 }; 190 184 … … 194 188 Expression * arg; 195 189 196 CastExpr( Expression * arg , Expression *_aname = nullptr);197 CastExpr( Expression * arg, Type * toType , Expression *_aname = nullptr);190 CastExpr( Expression * arg ); 191 CastExpr( Expression * arg, Type * toType ); 198 192 CastExpr( const CastExpr & other ); 199 193 virtual ~CastExpr(); … … 205 199 virtual void accept( Visitor & v ) { v.visit( this ); } 206 200 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 207 virtual void print( std::ostream & os, int indent = 0) const;201 virtual void print( std::ostream & os, Indenter indent = {} ) const; 208 202 }; 209 203 … … 223 217 virtual void accept( Visitor & v ) { v.visit( this ); } 224 218 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 225 virtual void print( std::ostream & os, int indent = 0) const;219 virtual void print( std::ostream & os, Indenter indent = {} ) const; 226 220 }; 227 221 … … 232 226 Expression * aggregate; 233 227 234 UntypedMemberExpr( Expression * member, Expression * aggregate , Expression *_aname = nullptr);228 UntypedMemberExpr( Expression * member, Expression * aggregate ); 235 229 UntypedMemberExpr( const UntypedMemberExpr & other ); 236 230 virtual ~UntypedMemberExpr(); … … 244 238 virtual void accept( Visitor & v ) { v.visit( this ); } 245 239 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 246 virtual void print( std::ostream & os, int indent = 0) const;240 virtual void print( std::ostream & os, Indenter indent = {} ) const; 247 241 }; 248 242 … … 254 248 Expression * aggregate; 255 249 256 MemberExpr( DeclarationWithType * member, Expression * aggregate , Expression *_aname = nullptr);250 MemberExpr( DeclarationWithType * member, Expression * aggregate ); 257 251 MemberExpr( const MemberExpr & other ); 258 252 virtual ~MemberExpr(); … … 266 260 virtual void accept( Visitor & v ) { v.visit( this ); } 267 261 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 268 virtual void print( std::ostream & os, int indent = 0) const;262 virtual void print( std::ostream & os, Indenter indent = {} ) const; 269 263 }; 270 264 … … 275 269 DeclarationWithType * var; 276 270 277 VariableExpr( DeclarationWithType * var , Expression *_aname = nullptr);271 VariableExpr( DeclarationWithType * var ); 278 272 VariableExpr( const VariableExpr & other ); 279 273 virtual ~VariableExpr(); … … 287 281 virtual void accept( Visitor & v ) { v.visit( this ); } 288 282 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 289 virtual void print( std::ostream & os, int indent = 0) const;283 virtual void print( std::ostream & os, Indenter indent = {} ) const; 290 284 }; 291 285 … … 295 289 Constant constant; 296 290 297 ConstantExpr( Constant constant , Expression *_aname = nullptr);291 ConstantExpr( Constant constant ); 298 292 ConstantExpr( const ConstantExpr & other ); 299 293 virtual ~ConstantExpr(); … … 305 299 virtual void accept( Visitor & v ) { v.visit( this ); } 306 300 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 307 virtual void print( std::ostream & os, int indent = 0) const;301 virtual void print( std::ostream & os, Indenter indent = {} ) const; 308 302 }; 309 303 … … 315 309 bool isType; 316 310 317 SizeofExpr( Expression * expr , Expression *_aname = nullptr);311 SizeofExpr( Expression * expr ); 318 312 SizeofExpr( const SizeofExpr & other ); 319 SizeofExpr( Type * type , Expression *_aname = nullptr);313 SizeofExpr( Type * type ); 320 314 virtual ~SizeofExpr(); 321 315 … … 330 324 virtual void accept( Visitor & v ) { v.visit( this ); } 331 325 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 332 virtual void print( std::ostream & os, int indent = 0) const;326 virtual void print( std::ostream & os, Indenter indent = {} ) const; 333 327 }; 334 328 … … 340 334 bool isType; 341 335 342 AlignofExpr( Expression * expr , Expression *_aname = nullptr);336 AlignofExpr( Expression * expr ); 343 337 AlignofExpr( const AlignofExpr & other ); 344 AlignofExpr( Type * type , Expression *_aname = nullptr);338 AlignofExpr( Type * type ); 345 339 virtual ~AlignofExpr(); 346 340 … … 355 349 virtual void accept( Visitor & v ) { v.visit( this ); } 356 350 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 357 virtual void print( std::ostream & os, int indent = 0) const;351 virtual void print( std::ostream & os, Indenter indent = {} ) const; 358 352 }; 359 353 … … 364 358 std::string member; 365 359 366 UntypedOffsetofExpr( Type * type, const std::string & member , Expression *_aname = nullptr);360 UntypedOffsetofExpr( Type * type, const std::string & member ); 367 361 UntypedOffsetofExpr( const UntypedOffsetofExpr & other ); 368 362 virtual ~UntypedOffsetofExpr(); … … 376 370 virtual void accept( Visitor & v ) { v.visit( this ); } 377 371 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 378 virtual void print( std::ostream & os, int indent = 0) const;372 virtual void print( std::ostream & os, Indenter indent = {} ) const; 379 373 }; 380 374 … … 385 379 DeclarationWithType * member; 386 380 387 OffsetofExpr( Type * type, DeclarationWithType * member , Expression *_aname = nullptr);381 OffsetofExpr( Type * type, DeclarationWithType * member ); 388 382 OffsetofExpr( const OffsetofExpr & other ); 389 383 virtual ~OffsetofExpr(); … … 397 391 virtual void accept( Visitor & v ) { v.visit( this ); } 398 392 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 399 virtual void print( std::ostream & os, int indent = 0) const;393 virtual void print( std::ostream & os, Indenter indent = {} ) const; 400 394 }; 401 395 … … 405 399 StructInstType * type; 406 400 407 OffsetPackExpr( StructInstType * type _, Expression * aname_ = 0);401 OffsetPackExpr( StructInstType * type ); 408 402 OffsetPackExpr( const OffsetPackExpr & other ); 409 403 virtual ~OffsetPackExpr(); … … 415 409 virtual void accept( Visitor & v ) { v.visit( this ); } 416 410 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 417 virtual void print( std::ostream & os, int indent = 0) const;411 virtual void print( std::ostream & os, Indenter indent = {} ) const; 418 412 }; 419 413 … … 426 420 bool isType; 427 421 428 AttrExpr(Expression * attr, Expression * expr , Expression *_aname = nullptr);422 AttrExpr(Expression * attr, Expression * expr ); 429 423 AttrExpr( const AttrExpr & other ); 430 AttrExpr( Expression * attr, Type * type , Expression *_aname = nullptr);424 AttrExpr( Expression * attr, Type * type ); 431 425 virtual ~AttrExpr(); 432 426 … … 443 437 virtual void accept( Visitor & v ) { v.visit( this ); } 444 438 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 445 virtual void print( std::ostream & os, int indent = 0) const;439 virtual void print( std::ostream & os, Indenter indent = {} ) const; 446 440 }; 447 441 … … 452 446 Expression * arg2; 453 447 454 LogicalExpr( Expression * arg1, Expression * arg2, bool andp = true , Expression *_aname = nullptr);448 LogicalExpr( Expression * arg1, Expression * arg2, bool andp = true ); 455 449 LogicalExpr( const LogicalExpr & other ); 456 450 virtual ~LogicalExpr(); … … 465 459 virtual void accept( Visitor & v ) { v.visit( this ); } 466 460 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 467 virtual void print( std::ostream & os, int indent = 0) const;461 virtual void print( std::ostream & os, Indenter indent = {} ) const; 468 462 469 463 private: … … 478 472 Expression * arg3; 479 473 480 ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3 , Expression *_aname = nullptr);474 ConditionalExpr( Expression * arg1, Expression * arg2, Expression * arg3 ); 481 475 ConditionalExpr( const ConditionalExpr & other ); 482 476 virtual ~ConditionalExpr(); … … 492 486 virtual void accept( Visitor & v ) { v.visit( this ); } 493 487 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 494 virtual void print( std::ostream & os, int indent = 0) const;488 virtual void print( std::ostream & os, Indenter indent = {} ) const; 495 489 }; 496 490 … … 501 495 Expression * arg2; 502 496 503 CommaExpr( Expression * arg1, Expression * arg2 , Expression *_aname = nullptr);497 CommaExpr( Expression * arg1, Expression * arg2 ); 504 498 CommaExpr( const CommaExpr & other ); 505 499 virtual ~CommaExpr(); … … 513 507 virtual void accept( Visitor & v ) { v.visit( this ); } 514 508 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 515 virtual void print( std::ostream & os, int indent = 0) const;509 virtual void print( std::ostream & os, Indenter indent = {} ) const; 516 510 }; 517 511 … … 531 525 virtual void accept( Visitor & v ) { v.visit( this ); } 532 526 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 533 virtual void print( std::ostream & os, int indent = 0) const;527 virtual void print( std::ostream & os, Indenter indent = {} ) const; 534 528 }; 535 529 … … 557 551 virtual void accept( Visitor & v ) { v.visit( this ); } 558 552 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 559 virtual void print( std::ostream & os, int indent = 0) const;553 virtual void print( std::ostream & os, Indenter indent = {} ) const; 560 554 561 555 // https://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/Machine-Constraints.html#Machine-Constraints … … 585 579 virtual void accept( Visitor & v ) { v.visit( this ); } 586 580 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 587 virtual void print( std::ostream & os, int indent = 0) const;581 virtual void print( std::ostream & os, Indenter indent = {} ) const; 588 582 }; 589 583 … … 603 597 virtual void accept( Visitor & v ) { v.visit( this ); } 604 598 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 605 virtual void print( std::ostream & os, int indent = 0) const;599 virtual void print( std::ostream & os, Indenter indent = {} ) const; 606 600 }; 607 601 … … 621 615 virtual void accept( Visitor & v ) { v.visit( this ); } 622 616 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 623 virtual void print( std::ostream & os, int indent = 0) const;617 virtual void print( std::ostream & os, Indenter indent = {} ) const; 624 618 }; 625 619 … … 640 634 virtual void accept( Visitor & v ) { v.visit( this ); } 641 635 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 642 virtual void print( std::ostream & os, int indent = 0) const;636 virtual void print( std::ostream & os, Indenter indent = {} ) const; 643 637 }; 644 638 … … 648 642 std::list<Expression*> exprs; 649 643 650 UntypedTupleExpr( const std::list< Expression * > & exprs , Expression *_aname = nullptr);644 UntypedTupleExpr( const std::list< Expression * > & exprs ); 651 645 UntypedTupleExpr( const UntypedTupleExpr & other ); 652 646 virtual ~UntypedTupleExpr(); … … 657 651 virtual void accept( Visitor & v ) { v.visit( this ); } 658 652 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 659 virtual void print( std::ostream & os, int indent = 0) const;653 virtual void print( std::ostream & os, Indenter indent = {} ) const; 660 654 }; 661 655 … … 665 659 std::list<Expression*> exprs; 666 660 667 TupleExpr( const std::list< Expression * > & exprs , Expression *_aname = nullptr);661 TupleExpr( const std::list< Expression * > & exprs ); 668 662 TupleExpr( const TupleExpr & other ); 669 663 virtual ~TupleExpr(); … … 674 668 virtual void accept( Visitor & v ) { v.visit( this ); } 675 669 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 676 virtual void print( std::ostream & os, int indent = 0) const;670 virtual void print( std::ostream & os, Indenter indent = {} ) const; 677 671 }; 678 672 … … 695 689 virtual void accept( Visitor & v ) { v.visit( this ); } 696 690 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 697 virtual void print( std::ostream & os, int indent = 0) const;691 virtual void print( std::ostream & os, Indenter indent = {} ) const; 698 692 }; 699 693 … … 703 697 StmtExpr * stmtExpr = nullptr; 704 698 705 TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls , Expression * _aname = nullptr);699 TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls ); 706 700 TupleAssignExpr( const TupleAssignExpr & other ); 707 701 virtual ~TupleAssignExpr(); … … 713 707 virtual void accept( Visitor & v ) { v.visit( this ); } 714 708 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 715 virtual void print( std::ostream & os, int indent = 0) const;709 virtual void print( std::ostream & os, Indenter indent = {} ) const; 716 710 }; 717 711 … … 736 730 virtual void accept( Visitor & v ) { v.visit( this ); } 737 731 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 738 virtual void print( std::ostream & os, int indent = 0) const;732 virtual void print( std::ostream & os, Indenter indent = {} ) const; 739 733 }; 740 734 … … 763 757 virtual void accept( Visitor & v ) { v.visit( this ); } 764 758 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 765 virtual void print( std::ostream & os, int indent = 0) const;759 virtual void print( std::ostream & os, Indenter indent = {} ) const; 766 760 767 761 private: … … 797 791 virtual void accept( Visitor & v ) { v.visit( this ); } 798 792 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 799 virtual void print( std::ostream & os, int indent = 0) const;793 virtual void print( std::ostream & os, Indenter indent = {} ) const; 800 794 }; 801 795 … … 818 812 virtual void accept( Visitor & v ) { v.visit( this ); } 819 813 virtual Expression * acceptMutator( Mutator & m ) { return m.mutate( this ); } 820 virtual void print( std::ostream & os, int indent = 0) const;814 virtual void print( std::ostream & os, Indenter indent = {} ) const; 821 815 }; 822 816 -
src/SynTree/FunctionDecl.cc
rb96ec83 r6840e7c 63 63 } 64 64 65 void FunctionDecl::print( std::ostream &os, intindent ) const {65 void FunctionDecl::print( std::ostream &os, Indenter indent ) const { 66 66 using std::endl; 67 67 using std::string; 68 68 69 if ( get_name()!= "" ) {70 os << get_name()<< ": ";69 if ( name != "" ) { 70 os << name << ": "; 71 71 } // if 72 if ( get_linkage()!= LinkageSpec::Cforall ) {73 os << LinkageSpec::linkageName( get_linkage()) << " ";72 if ( linkage != LinkageSpec::Cforall ) { 73 os << LinkageSpec::linkageName( linkage ) << " "; 74 74 } // if 75 75 76 printAll( get_attributes(), os, indent );76 printAll( attributes, os, indent ); 77 77 78 78 get_storageClasses().print( os ); 79 79 get_funcSpec().print( os ); 80 80 81 if ( get_type()) {82 get_type()->print( os, indent );81 if ( type ) { 82 type->print( os, indent ); 83 83 } else { 84 84 os << "untyped entity "; … … 86 86 87 87 if ( statements ) { 88 os << string( indent + 2, ' ' ) << "with body " << endl; 89 os << string( indent + 4, ' ' ); 90 statements->print( os, indent + 4 ); 88 os << indent << "... with body " << endl << indent+1; 89 statements->print( os, indent+1 ); 91 90 } // if 92 91 } 93 92 94 void FunctionDecl::printShort( std::ostream &os, intindent ) const {93 void FunctionDecl::printShort( std::ostream &os, Indenter indent ) const { 95 94 using std::endl; 96 95 using std::string; 97 96 98 if ( get_name()!= "" ) {99 os << get_name()<< ": ";97 if ( name != "" ) { 98 os << name << ": "; 100 99 } // if 101 102 // xxx - should printShort print attributes?103 100 104 101 get_storageClasses().print( os ); 105 102 get_funcSpec().print( os ); 106 103 107 if ( get_type()) {108 get_type()->print( os, indent );104 if ( type ) { 105 type->print( os, indent ); 109 106 } else { 110 107 os << "untyped entity "; -
src/SynTree/FunctionType.cc
rb96ec83 r6840e7c 51 51 } 52 52 53 void FunctionType::print( std::ostream &os, intindent ) const {53 void FunctionType::print( std::ostream &os, Indenter indent ) const { 54 54 using std::string; 55 55 using std::endl; … … 58 58 os << "function" << endl; 59 59 if ( ! parameters.empty() ) { 60 os << string( indent + 2, ' ' ) << "with parameters" << endl;61 printAll( parameters, os, indent + 4);60 os << indent << "... with parameters" << endl; 61 printAll( parameters, os, indent+1 ); 62 62 if ( isVarArgs ) { 63 os << string( indent + 4, ' ' )<< "and a variable number of other arguments" << endl;63 os << indent+1 << "and a variable number of other arguments" << endl; 64 64 } // if 65 65 } else if ( isVarArgs ) { 66 os << string( indent + 4, ' ' )<< "accepting unspecified arguments" << endl;66 os << indent+1 << "accepting unspecified arguments" << endl; 67 67 } // if 68 os << string( indent + 2, ' ' ) << "returning ";68 os << indent << "... returning "; 69 69 if ( returnVals.empty() ) { 70 os << endl << string( indent + 4, ' ' ) <<"nothing " << endl;70 os << "nothing " << endl; 71 71 } else { 72 72 os << endl; 73 printAll( returnVals, os, indent + 4);73 printAll( returnVals, os, indent+1 ); 74 74 } // if 75 75 } -
src/SynTree/Initializer.cc
rb96ec83 r6840e7c 38 38 } 39 39 40 void Designation::print( std::ostream &os, intindent ) const {40 void Designation::print( std::ostream &os, Indenter indent ) const { 41 41 if ( ! designators.empty() ) { 42 os << std::string(indent + 2, ' ' ) << "designated by: " << std::endl; 43 for ( std::list < Expression * >::const_iterator i = designators.begin(); i != designators.end(); i++ ) { 44 os << std::string(indent + 4, ' ' ); 45 ( *i )->print(os, indent + 4 ); 42 os << "... designated by: " << std::endl; 43 for ( const Expression * d : designators ) { 44 os << indent+1; 45 d->print(os, indent+1 ); 46 os << std::endl; 46 47 } 47 os << std::endl;48 48 } // if 49 49 } … … 64 64 } 65 65 66 void SingleInit::print( std::ostream &os, int indent ) const { 67 os << std::string(indent, ' ' ) << "Simple Initializer: " << std::endl; 68 os << std::string(indent+4, ' ' ); 69 value->print( os, indent+4 ); 66 void SingleInit::print( std::ostream &os, Indenter indent ) const { 67 os << "Simple Initializer: "; 68 value->print( os, indent ); 70 69 } 71 70 … … 93 92 } 94 93 95 void ListInit::print( std::ostream &os, int indent ) const { 96 os << std::string(indent, ' ') << "Compound initializer: " << std::endl; 97 for ( Designation * d : designations ) { 98 d->print( os, indent + 2 ); 99 } 100 101 for ( const Initializer * init : initializers ) { 102 init->print( os, indent + 2 ); 94 void ListInit::print( std::ostream &os, Indenter indent ) const { 95 os << "Compound initializer: " << std::endl; 96 for ( auto p : group_iterate( designations, initializers ) ) { 97 const Designation * d = std::get<0>(p); 98 const Initializer * init = std::get<1>(p); 99 os << indent+1; 100 init->print( os, indent+1 ); 103 101 os << std::endl; 102 if ( ! d->designators.empty() ) { 103 os << indent+1; 104 d->print( os, indent+1 ); 105 } 104 106 } 105 107 } … … 116 118 } 117 119 118 void ConstructorInit::print( std::ostream &os, intindent ) const {119 os << std::endl << std::string(indent, ' ') <<"Constructor initializer: " << std::endl;120 void ConstructorInit::print( std::ostream &os, Indenter indent ) const { 121 os << "Constructor initializer: " << std::endl; 120 122 if ( ctor ) { 121 os << std::string(indent+2, ' '); 122 os << "initially constructed with "; 123 ctor->print( os, indent+4 ); 123 os << indent << "... initially constructed with "; 124 ctor->print( os, indent+1 ); 124 125 } // if 125 126 126 127 if ( dtor ) { 127 os << std::string(indent+2, ' '); 128 os << "destructed with "; 129 dtor->print( os, indent+4 ); 128 os << indent << "... destructed with "; 129 dtor->print( os, indent+1 ); 130 130 } 131 131 132 132 if ( init ) { 133 os << std::string(indent+2, ' '); 134 os << "with fallback C-style initializer: "; 135 init->print( os, indent+4 ); 133 os << indent << "... with fallback C-style initializer: "; 134 init->print( os, indent+1 ); 136 135 } 137 136 } -
src/SynTree/Initializer.h
rb96ec83 r6840e7c 37 37 std::list< Expression * > & get_designators() { return designators; } 38 38 39 virtual Designation * clone() const { return new Designation( *this ); };39 virtual Designation * clone() const override { return new Designation( *this ); }; 40 40 virtual void accept( Visitor &v ) override { v.visit( this ); } 41 virtual Designation * acceptMutator( Mutator &m ) { return m.mutate( this ); }42 virtual void print( std::ostream &os, int indent = 0) const override;41 virtual Designation * acceptMutator( Mutator &m ) override { return m.mutate( this ); } 42 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 43 43 }; 44 44 … … 54 54 bool get_maybeConstructed() { return maybeConstructed; } 55 55 56 virtual Initializer *clone() const = 0;56 virtual Initializer *clone() const override = 0; 57 57 virtual void accept( Visitor &v ) override = 0; 58 virtual Initializer *acceptMutator( Mutator &m ) = 0;59 virtual void print( std::ostream &os, int indent = 0) const override = 0;58 virtual Initializer *acceptMutator( Mutator &m ) override = 0; 59 virtual void print( std::ostream &os, Indenter indent = {} ) const override = 0; 60 60 private: 61 61 bool maybeConstructed; … … 78 78 virtual void accept( Visitor &v ) override { v.visit( this ); } 79 79 virtual Initializer *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 80 virtual void print( std::ostream &os, int indent = 0) const override;80 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 81 81 }; 82 82 … … 106 106 virtual void accept( Visitor &v ) override { v.visit( this ); } 107 107 virtual Initializer *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 108 virtual void print( std::ostream &os, int indent = 0) const override;108 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 109 109 }; 110 110 … … 135 135 virtual void accept( Visitor &v ) override { v.visit( this ); } 136 136 virtual Initializer *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 137 virtual void print( std::ostream &os, int indent = 0) const override;137 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 138 138 139 139 private: -
src/SynTree/Mutator.cc
rb96ec83 r6840e7c 626 626 } 627 627 628 TypeSubstitution * Mutator::mutate( TypeSubstitution * sub ) { 629 for ( auto & p : sub->typeEnv ) { 630 p.second = maybeMutate( p.second, *this ); 631 } 632 for ( auto & p : sub->varEnv ) { 633 p.second = maybeMutate( p.second, *this ); 634 } 635 return sub; 636 } 637 628 638 // Local Variables: // 629 639 // tab-width: 4 // -
src/SynTree/Mutator.h
rb96ec83 r6840e7c 117 117 118 118 virtual Attribute * mutate( Attribute * attribute ); 119 120 virtual TypeSubstitution * mutate( TypeSubstitution * sub ); 121 119 122 private: 120 123 virtual Declaration * handleAggregateDecl(AggregateDecl * aggregateDecl ); -
src/SynTree/NamedTypeDecl.cc
rb96ec83 r6840e7c 38 38 } 39 39 40 void NamedTypeDecl::print( std::ostream &os, intindent ) const {40 void NamedTypeDecl::print( std::ostream &os, Indenter indent ) const { 41 41 using namespace std; 42 42 43 if ( get_name() != "" ) { 44 os << get_name() << ": "; 45 } // if 46 if ( get_linkage() != LinkageSpec::Cforall ) { 47 os << LinkageSpec::linkageName( get_linkage() ) << " "; 43 if ( name != "" ) os << name << ": "; 44 45 if ( linkage != LinkageSpec::Cforall ) { 46 os << LinkageSpec::linkageName( linkage ) << " "; 48 47 } // if 49 48 get_storageClasses().print( os ); … … 51 50 if ( base ) { 52 51 os << " for "; 53 base->print( os, indent );52 base->print( os, indent+1 ); 54 53 } // if 55 54 if ( ! parameters.empty() ) { 56 os << endl << string( indent, ' ' ) << "with parameters" << endl;57 printAll( parameters, os, indent+ 2);55 os << endl << indent << "... with parameters" << endl; 56 printAll( parameters, os, indent+1 ); 58 57 } // if 59 58 if ( ! assertions.empty() ) { 60 os << endl << string( indent, ' ' ) << "with assertions" << endl;61 printAll( assertions, os, indent+ 2);59 os << endl << indent << "... with assertions" << endl; 60 printAll( assertions, os, indent+1 ); 62 61 } // if 63 62 } 64 63 65 void NamedTypeDecl::printShort( std::ostream &os, intindent ) const {64 void NamedTypeDecl::printShort( std::ostream &os, Indenter indent ) const { 66 65 using namespace std; 67 66 68 if ( get_name() != "" ) { 69 os << get_name() << ": "; 70 } // if 67 if ( name != "" ) os << name << ": "; 71 68 get_storageClasses().print( os ); 72 69 os << typeString(); 73 70 if ( base ) { 74 71 os << " for "; 75 base->print( os, indent );72 base->print( os, indent+1 ); 76 73 } // if 77 74 if ( ! parameters.empty() ) { 78 os << endl << string( indent, ' ' ) << "with parameters" << endl;79 printAll( parameters, os, indent+ 2);75 os << endl << indent << "... with parameters" << endl; 76 printAll( parameters, os, indent+1 ); 80 77 } // if 81 78 } -
src/SynTree/ObjectDecl.cc
rb96ec83 r6840e7c 44 44 } 45 45 46 void ObjectDecl::print( std::ostream &os, int indent ) const { 47 if ( get_name() != "" ) { 48 os << get_name() << ": "; 46 void ObjectDecl::print( std::ostream &os, Indenter indent ) const { 47 if ( name != "" ) os << name << ": "; 48 49 if ( linkage != LinkageSpec::Cforall ) { 50 os << LinkageSpec::linkageName( linkage ) << " "; 49 51 } // if 50 51 if ( get_linkage() != LinkageSpec::Cforall ) {52 os << LinkageSpec::linkageName( get_linkage() ) << " ";53 } // if54 55 printAll( get_attributes(), os, indent );56 52 57 53 get_storageClasses().print( os ); 58 54 59 if ( get_type()) {60 get_type()->print( os, indent );55 if ( type ) { 56 type->print( os, indent ); 61 57 } else { 62 58 os << " untyped entity "; … … 64 60 65 61 if ( init ) { 66 os << " with initializer " << std::endl; 67 init->print( os, indent+2 ); 68 os << std::endl << std::string(indent+2, ' '); 69 os << "maybeConstructed? " << init->get_maybeConstructed(); 62 os << " with initializer (" << (init->get_maybeConstructed() ? "maybe constructed" : "not constructed") << ")" << std::endl << indent+1; 63 init->print( os, indent+1 ); 64 os << std::endl; 70 65 } // if 71 66 67 if ( ! attributes.empty() ) { 68 os << std::endl << indent << "... with attributes: " << std::endl; 69 printAll( attributes, os, indent+1 ); 70 } 71 72 72 if ( bitfieldWidth ) { 73 os << std::string(indent, ' '); 74 os << " with bitfield width "; 73 os << indent << " with bitfield width "; 75 74 bitfieldWidth->print( os ); 76 75 } // if 77 76 } 78 77 79 void ObjectDecl::printShort( std::ostream &os, intindent ) const {78 void ObjectDecl::printShort( std::ostream &os, Indenter indent ) const { 80 79 #if 0 81 80 if ( get_mangleName() != "") { … … 83 82 } else 84 83 #endif 85 if ( get_name() != "" ) { 86 os << get_name() << ": "; 87 } // if 88 89 // xxx - should printShort print attributes? 84 if ( name != "" ) os << name << ": "; 90 85 91 86 get_storageClasses().print( os ); 92 87 93 if ( get_type()) {94 get_type()->print( os, indent );88 if ( type ) { 89 type->print( os, indent ); 95 90 } else { 96 91 os << "untyped entity "; -
src/SynTree/PointerType.cc
rb96ec83 r6840e7c 41 41 } 42 42 43 void PointerType::print( std::ostream &os, intindent ) const {43 void PointerType::print( std::ostream &os, Indenter indent ) const { 44 44 Type::print( os, indent ); 45 45 if ( ! is_array() ) { -
src/SynTree/ReferenceToType.cc
rb96ec83 r6840e7c 14 14 // 15 15 16 #include <stddef.h> // for NULL17 16 #include <cassert> // for assert 18 17 #include <list> // for list, _List_const_iterator, list<>::cons... … … 38 37 } 39 38 40 void ReferenceToType::print( std::ostream &os, intindent ) const {39 void ReferenceToType::print( std::ostream &os, Indenter indent ) const { 41 40 using std::endl; 42 41 … … 44 43 os << "instance of " << typeString() << " " << name << " "; 45 44 if ( ! parameters.empty() ) { 46 os << endl << std::string( indent, ' ' ) << "with parameters" << endl;47 printAll( parameters, os, indent+ 2);45 os << endl << indent << "... with parameters" << endl; 46 printAll( parameters, os, indent+1 ); 48 47 } // if 49 48 } … … 65 64 66 65 std::list<TypeDecl*>* StructInstType::get_baseParameters() { 67 if ( ! baseStruct ) return NULL;66 if ( ! baseStruct ) return nullptr; 68 67 return &baseStruct->get_parameters(); 69 68 } … … 76 75 } 77 76 78 void StructInstType::print( std::ostream &os, intindent ) const {77 void StructInstType::print( std::ostream &os, Indenter indent ) const { 79 78 using std::endl; 80 79 81 if ( baseStruct == NULL) ReferenceToType::print( os, indent );80 if ( baseStruct == nullptr ) ReferenceToType::print( os, indent ); 82 81 else { 83 82 Type::print( os, indent ); 84 83 os << "instance of " << typeString() << " " << name << " with body " << baseStruct->has_body() << " "; 85 84 if ( ! parameters.empty() ) { 86 os << endl << std::string( indent, ' ' ) << "with parameters" << endl;87 printAll( parameters, os, indent+ 2);85 os << endl << indent << "... with parameters" << endl; 86 printAll( parameters, os, indent+1 ); 88 87 } // if 89 88 } // if … … 97 96 98 97 std::list< TypeDecl * > * UnionInstType::get_baseParameters() { 99 if ( ! baseUnion ) return NULL;98 if ( ! baseUnion ) return nullptr; 100 99 return &baseUnion->get_parameters(); 101 100 } … … 108 107 } 109 108 110 void UnionInstType::print( std::ostream &os, intindent ) const {109 void UnionInstType::print( std::ostream &os, Indenter indent ) const { 111 110 using std::endl; 112 111 113 if ( baseUnion == NULL) ReferenceToType::print( os, indent );112 if ( baseUnion == nullptr ) ReferenceToType::print( os, indent ); 114 113 else { 115 114 Type::print( os, indent ); 116 115 os << "instance of " << typeString() << " " << name << " with body " << baseUnion->has_body() << " "; 117 116 if ( ! parameters.empty() ) { 118 os << endl << std::string( indent, ' ' ) << "with parameters" << endl;119 printAll( parameters, os, indent+ 2);117 os << endl << indent << "... with parameters" << endl; 118 printAll( parameters, os, indent+1 ); 120 119 } // if 121 120 } // if … … 129 128 130 129 bool EnumInstType::isComplete() const { return baseEnum ? baseEnum->has_body() : false; } 130 131 void EnumInstType::print( std::ostream &os, Indenter indent ) const { 132 using std::endl; 133 134 if ( baseEnum == nullptr ) ReferenceToType::print( os, indent ); 135 else { 136 Type::print( os, indent ); 137 os << "instance of " << typeString() << " " << name << " with body " << baseEnum->has_body() << " "; 138 } // if 139 } 140 131 141 132 142 std::string TraitInstType::typeString() const { return "trait"; } … … 166 176 bool TypeInstType::isComplete() const { return baseType->isComplete(); } 167 177 168 void TypeInstType::print( std::ostream &os, intindent ) const {178 void TypeInstType::print( std::ostream &os, Indenter indent ) const { 169 179 using std::endl; 170 180 … … 172 182 os << "instance of " << typeString() << " " << get_name() << " (" << ( isFtype ? "" : "not" ) << " function type) "; 173 183 if ( ! parameters.empty() ) { 174 os << endl << std::string( indent, ' ' ) << "with parameters" << endl;175 printAll( parameters, os, indent+ 2);184 os << endl << indent << "... with parameters" << endl; 185 printAll( parameters, os, indent+1 ); 176 186 } // if 177 187 } -
src/SynTree/ReferenceType.cc
rb96ec83 r6840e7c 35 35 } 36 36 37 void ReferenceType::print( std::ostream &os, intindent ) const {37 void ReferenceType::print( std::ostream &os, Indenter indent ) const { 38 38 Type::print( os, indent ); 39 39 os << "reference to "; -
src/SynTree/Statement.cc
rb96ec83 r6840e7c 34 34 Statement::Statement( std::list<Label> labels ) : labels( labels ) {} 35 35 36 void Statement::print( __attribute__((unused)) std::ostream &, __attribute__((unused)) int indent ) const {} 36 void Statement::print( std::ostream & os, Indenter ) const { 37 if ( ! labels.empty() ) { 38 os << "Labels: {"; 39 for ( const Label & l : labels ) { 40 os << l << ","; 41 } 42 os << "}" << endl; 43 } 44 } 37 45 38 46 Statement::~Statement() {} … … 46 54 } 47 55 48 void ExprStmt::print( std::ostream &os, intindent ) const {49 os << "Expression Statement:" << endl << std::string( indent + 2, ' ' );50 expr->print( os, indent + 2);56 void ExprStmt::print( std::ostream &os, Indenter indent ) const { 57 os << "Expression Statement:" << endl << indent+1; 58 expr->print( os, indent+1 ); 51 59 } 52 60 … … 67 75 } 68 76 69 void AsmStmt::print( std::ostream &os, intindent ) const {77 void AsmStmt::print( std::ostream &os, Indenter indent ) const { 70 78 os << "Assembler Statement:" << endl; 71 os << std::string( indent, ' ' ) << "instruction: " << endl << std::string( indent, ' ' );72 instruction->print( os, indent + 2);79 os << indent+1 << "instruction: " << endl << indent; 80 instruction->print( os, indent+1 ); 73 81 if ( ! output.empty() ) { 74 os << endl << std::string( indent, ' ' )<< "output: " << endl;75 printAll( output, os, indent + 2);82 os << endl << indent+1 << "output: " << endl; 83 printAll( output, os, indent+1 ); 76 84 } // if 77 85 if ( ! input.empty() ) { 78 os << std::string( indent, ' ' ) << "input: " << endl << std::string( indent, ' ' );79 printAll( input, os, indent + 2);86 os << indent+1 << "input: " << endl; 87 printAll( input, os, indent+1 ); 80 88 } // if 81 89 if ( ! clobber.empty() ) { 82 os << std::string( indent, ' ' )<< "clobber: " << endl;83 printAll( clobber, os, indent + 2);90 os << indent+1 << "clobber: " << endl; 91 printAll( clobber, os, indent+1 ); 84 92 } // if 85 93 } … … 103 111 } 104 112 105 void BranchStmt::print( std::ostream &os, intindent ) const {106 os << string( indent, ' ' ) <<"Branch (" << brType[type] << ")" << endl ;107 if ( target != "" ) os << string( indent+2, ' ' )<< "with target: " << target << endl;108 if ( originalTarget != "" ) os << string( indent+2, ' ' )<< "with original target: " << originalTarget << endl;109 if ( computedTarget != nullptr ) os << string( indent+2, ' ' )<< "with computed target: " << computedTarget << endl;113 void BranchStmt::print( std::ostream &os, Indenter indent ) const { 114 os << "Branch (" << brType[type] << ")" << endl ; 115 if ( target != "" ) os << indent+1 << "with target: " << target << endl; 116 if ( originalTarget != "" ) os << indent+1 << "with original target: " << originalTarget << endl; 117 if ( computedTarget != nullptr ) os << indent+1 << "with computed target: " << computedTarget << endl; 110 118 } 111 119 … … 118 126 } 119 127 120 void ReturnStmt::print( std::ostream &os, intindent ) const {121 os << 122 if ( expr != 0) {123 os << endl << string( indent+2, ' ' );124 expr->print( os, indent + 2);128 void ReturnStmt::print( std::ostream &os, Indenter indent ) const { 129 os << "Return Statement, returning: "; 130 if ( expr != nullptr ) { 131 os << endl << indent+1; 132 expr->print( os, indent+1 ); 125 133 } 126 134 os << endl; … … 142 150 } 143 151 144 void IfStmt::print( std::ostream &os, intindent ) const {145 os << "If on condition: " << endl 146 os << string( indent+4, ' ' );147 condition->print( os, indent + 4);152 void IfStmt::print( std::ostream &os, Indenter indent ) const { 153 os << "If on condition: " << endl; 154 os << indent+1; 155 condition->print( os, indent+1 ); 148 156 149 157 if ( !initialization.empty() ) { 150 os << string( indent + 2, ' ' ) << "initialization: \n";151 for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it) {152 os << string( indent + 4, ' ' );153 (*it)->print( os, indent + 4);158 os << indent << "... with initialization: \n"; 159 for ( const Statement * stmt : initialization ) { 160 os << indent+1; 161 stmt->print( os, indent+1 ); 154 162 } 155 163 os << endl; 156 164 } 157 165 158 os << string( indent+2, ' ' )<< "... then: " << endl;159 160 os << string( indent+4, ' ' );161 thenPart->print( os, indent + 4);166 os << indent << "... then: " << endl; 167 168 os << indent+1; 169 thenPart->print( os, indent+1 ); 162 170 163 171 if ( elsePart != 0 ) { 164 os << string( indent+2, ' ' )<< "... else: " << endl;165 os << string( indent+4, ' ' );166 elsePart->print( os, indent + 4);172 os << indent << "... else: " << endl; 173 os << indent+1; 174 elsePart->print( os, indent+1 ); 167 175 } // if 168 176 } … … 183 191 } 184 192 185 void SwitchStmt::print( std::ostream &os, intindent ) const {193 void SwitchStmt::print( std::ostream &os, Indenter indent ) const { 186 194 os << "Switch on condition: "; 187 195 condition->print( os ); 188 196 os << endl; 189 197 190 // statements 191 std::list<Statement *>::const_iterator i; 192 for ( i = statements.begin(); i != statements.end(); i++) 193 (*i)->print( os, indent + 4 ); 194 195 //for_each( statements.begin(), statements.end(), mem_fun( bind1st(&Statement::print ), os )); 198 for ( const Statement * stmt : statements ) { 199 stmt->print( os, indent+1 ); 200 } 196 201 } 197 202 198 203 CaseStmt::CaseStmt( std::list<Label> labels, Expression *condition, const std::list<Statement *> &statements, bool deflt ) throw ( SemanticError ) : 199 204 Statement( labels ), condition( condition ), stmts( statements ), _isDefault( deflt ) { 200 if ( isDefault() && condition != 0 ) 201 throw SemanticError("default with conditions"); 205 if ( isDefault() && condition != 0 ) throw SemanticError("default case with condition: ", condition); 202 206 } 203 207 … … 216 220 } 217 221 218 void CaseStmt::print( std::ostream &os, int indent ) const { 219 os << string( indent, ' ' ); 220 221 if ( isDefault() ) 222 os << "Default "; 222 void CaseStmt::print( std::ostream &os, Indenter indent ) const { 223 if ( isDefault() ) os << "Default "; 223 224 else { 224 225 os << "Case "; 225 condition->print( os ); 226 } // if 227 228 os << endl; 229 230 std::list<Statement *>::const_iterator i; 231 for ( i = stmts.begin(); i != stmts.end(); i++) 232 (*i )->print( os, indent + 4 ); 226 condition->print( os, indent ); 227 } // if 228 os << endl; 229 230 for ( Statement * stmt : stmts ) { 231 stmt->print( os, indent+1 ); 232 } 233 233 } 234 234 … … 246 246 } 247 247 248 void WhileStmt::print( std::ostream &os, intindent ) const {248 void WhileStmt::print( std::ostream &os, Indenter indent ) const { 249 249 os << "While on condition: " << endl ; 250 condition->print( os, indent + 4);251 252 os << string( indent, ' ' ) << ".... with body: " << endl;253 254 if ( body != 0 ) body->print( os, indent + 4);250 condition->print( os, indent+1 ); 251 252 os << indent << "... with body: " << endl; 253 254 if ( body != 0 ) body->print( os, indent+1 ); 255 255 } 256 256 … … 272 272 } 273 273 274 void ForStmt::print( std::ostream &os, int indent ) const { 275 os << "Labels: {"; 276 for ( std::list<Label>::const_iterator it = get_labels().begin(); it != get_labels().end(); ++it) { 277 os << *it << ","; 278 } 279 os << "}" << endl; 280 281 os << string( indent, ' ' ) << "For Statement" << endl ; 282 283 os << string( indent + 2, ' ' ) << "initialization: \n"; 284 for ( std::list<Statement *>::const_iterator it = initialization.begin(); it != initialization.end(); ++it ) { 285 os << string( indent + 4, ' ' ); 286 (*it)->print( os, indent + 4 ); 287 } 288 289 os << "\n" << string( indent + 2, ' ' ) << "condition: \n"; 290 if ( condition != 0 ) { 291 os << string( indent + 4, ' ' ); 292 condition->print( os, indent + 4 ); 293 } 294 295 os << "\n" << string( indent + 2, ' ' ) << "increment: \n"; 296 if ( increment != 0 ) { 297 os << string( indent + 4, ' ' ); 298 increment->print( os, indent + 4 ); 299 } 300 301 os << "\n" << string( indent + 2, ' ' ) << "statement block: \n"; 274 void ForStmt::print( std::ostream &os, Indenter indent ) const { 275 Statement::print( os, indent ); // print labels 276 277 os << "For Statement" << endl; 278 279 if ( ! initialization.empty() ) { 280 os << indent << "... initialization: \n"; 281 for ( Statement * stmt : initialization ) { 282 os << indent+1; 283 stmt->print( os, indent+1 ); 284 } 285 } 286 287 if ( condition != nullptr ) { 288 os << indent << "... condition: \n" << indent+1; 289 condition->print( os, indent+1 ); 290 } 291 292 if ( increment != nullptr ) { 293 os << "\n" << indent << "... increment: \n" << indent+1; 294 increment->print( os, indent+1 ); 295 } 296 302 297 if ( body != 0 ) { 303 os << string( indent + 4, ' ' ); 304 body->print( os, indent + 4 ); 305 } 306 298 os << "\n" << indent << "... with body: \n" << indent+1; 299 body->print( os, indent+1 ); 300 } 307 301 os << endl; 308 302 } … … 322 316 } 323 317 324 void ThrowStmt::print( std::ostream &os, int indent) const { 318 void ThrowStmt::print( std::ostream &os, Indenter indent) const { 319 if ( target ) os << "Non-Local "; 320 os << "Throw Statement, raising: "; 321 expr->print(os, indent+1); 325 322 if ( target ) { 326 os << "Non-Local "; 327 } 328 os << "Throw Statement, raising: "; 329 expr->print(os, indent + 4); 330 if ( target ) { 331 os << "At: "; 332 target->print(os, indent + 4); 323 os << "... at: "; 324 target->print(os, indent+1); 333 325 } 334 326 } … … 348 340 } 349 341 350 void TryStmt::print( std::ostream &os, intindent ) const {342 void TryStmt::print( std::ostream &os, Indenter indent ) const { 351 343 os << "Try Statement" << endl; 352 os << string( indent + 2, ' ' ) << "with block:" << endl; 353 os << string( indent + 4, ' ' ); 354 block->print( os, indent + 4 ); 344 os << indent << "... with block:" << endl << indent+1; 345 block->print( os, indent+1 ); 355 346 356 347 // handlers 357 os << string( indent + 2, ' ' ) << "and handlers:" << endl;358 for ( std::list<CatchStmt *>::const_iterator i = handlers.begin(); i != handlers.end(); i++) {359 os << string( indent + 4, ' ' );360 (*i )->print( os, indent + 4);348 os << indent << "... and handlers:" << endl; 349 for ( const CatchStmt * stmt : handlers ) { 350 os << indent+1; 351 stmt->print( os, indent+1 ); 361 352 } 362 353 363 354 // finally block 364 355 if ( finallyBlock != 0 ) { 365 os << string( indent + 2, ' ' ) << "and finally:" << endl;366 finallyBlock->print( os, indent + 4);356 os << indent << "... and finally:" << endl << indent+1; 357 finallyBlock->print( os, indent+1 ); 367 358 } // if 368 359 } … … 370 361 CatchStmt::CatchStmt( std::list<Label> labels, Kind kind, Declaration *decl, Expression *cond, Statement *body ) : 371 362 Statement( labels ), kind ( kind ), decl ( decl ), cond ( cond ), body( body ) { 363 assertf( decl, "Catch clause must have a declaration." ); 372 364 } 373 365 … … 381 373 } 382 374 383 void CatchStmt::print( std::ostream &os, intindent ) const {375 void CatchStmt::print( std::ostream &os, Indenter indent ) const { 384 376 os << "Catch " << ((Terminate == kind) ? "Terminate" : "Resume") << " Statement" << endl; 385 377 386 os << string( indent + 2, ' ' ) << "... catching: "; 387 if ( decl ) { 388 decl->printShort( os, indent + 4 ); 389 os << endl; 390 } 391 else 392 os << string( indent + 4 , ' ' ) << ">>> Error: this catch clause must have a declaration <<<" << endl; 378 os << indent << "... catching: "; 379 decl->printShort( os, indent+1 ); 380 os << endl; 393 381 394 382 if ( cond ) { 395 os << string( indent + 2, ' ' ) << "with conditional:" << endl; 396 os << string( indent + 4, ' ' ); 397 cond->print( os, indent + 4 ); 398 } 399 else 400 os << string( indent + 2, ' ' ) << "with no conditional" << endl; 401 402 os << string( indent + 2, ' ' ) << "with block:" << endl; 403 os << string( indent + 4, ' ' ); 404 body->print( os, indent + 4 ); 383 os << indent << "... with conditional:" << endl << indent+1; 384 cond->print( os, indent+1 ); 385 } 386 387 os << indent << "... with block:" << endl; 388 os << indent+1; 389 body->print( os, indent+1 ); 405 390 } 406 391 … … 417 402 } 418 403 419 void FinallyStmt::print( std::ostream &os, intindent ) const {404 void FinallyStmt::print( std::ostream &os, Indenter indent ) const { 420 405 os << "Finally Statement" << endl; 421 os << string( indent + 2, ' ' ) << "with block:" << endl; 422 os << string( indent + 4, ' ' ); 423 block->print( os, indent + 4 ); 406 os << indent << "... with block:" << endl << indent+1; 407 block->print( os, indent+1 ); 424 408 } 425 409 … … 465 449 } 466 450 467 void WaitForStmt::print( std::ostream &os, intindent ) const {451 void WaitForStmt::print( std::ostream &os, Indenter indent ) const { 468 452 os << "Waitfor Statement" << endl; 469 os << string( indent + 2, ' ' ) << "with block:" << endl; 470 os << string( indent + 4, ' ' ); 453 os << indent << "... with block:" << endl << indent+1; 471 454 // block->print( os, indent + 4 ); 472 455 } … … 475 458 NullStmt::NullStmt() : Statement( std::list<Label>() ) {} 476 459 477 void NullStmt::print( std::ostream &os, __attribute__((unused)) int indent) const {478 os << "Null Statement" << endl 460 void NullStmt::print( std::ostream &os, Indenter ) const { 461 os << "Null Statement" << endl; 479 462 } 480 463 … … 490 473 } 491 474 492 void ImplicitCtorDtorStmt::print( std::ostream &os, intindent ) const {475 void ImplicitCtorDtorStmt::print( std::ostream &os, Indenter indent ) const { 493 476 os << "Implicit Ctor Dtor Statement" << endl; 494 os << string( indent + 2, ' ' ) << "with Ctor/Dtor: ";495 callStmt->print( os, indent + 2);477 os << indent << "... with Ctor/Dtor: "; 478 callStmt->print( os, indent+1); 496 479 os << endl; 497 480 } -
src/SynTree/Statement.h
rb96ec83 r6840e7c 43 43 const std::list<Label> & get_labels() const { return labels; } 44 44 45 virtual Statement *clone() const = 0;45 virtual Statement *clone() const override = 0; 46 46 virtual void accept( Visitor &v ) override = 0; 47 virtual Statement *acceptMutator( Mutator &m ) = 0;48 virtual void print( std::ostream &os, int indent = 0) const override;47 virtual Statement *acceptMutator( Mutator &m ) override = 0; 48 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 49 49 }; 50 50 … … 65 65 virtual void accept( Visitor &v ) override { v.visit( this ); } 66 66 virtual CompoundStmt *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 67 virtual void print( std::ostream &os, int indent = 0) const override;67 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 68 68 }; 69 69 … … 76 76 virtual void accept( Visitor &v ) override { v.visit( this ); } 77 77 virtual NullStmt *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 78 virtual void print( std::ostream &os, int indent = 0) const override;78 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 79 79 }; 80 80 … … 93 93 virtual void accept( Visitor &v ) override { v.visit( this ); } 94 94 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 95 virtual void print( std::ostream &os, int indent = 0) const override;95 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 96 96 }; 97 97 … … 124 124 virtual void accept( Visitor & v ) { v.visit( this ); } 125 125 virtual Statement * acceptMutator( Mutator & m ) { return m.mutate( this ); } 126 virtual void print( std::ostream & os, int indent = 0) const;126 virtual void print( std::ostream & os, Indenter indent = {} ) const; 127 127 }; 128 128 … … 150 150 virtual void accept( Visitor &v ) override { v.visit( this ); } 151 151 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 152 virtual void print( std::ostream &os, int indent = 0) const override;152 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 153 153 }; 154 154 … … 171 171 172 172 virtual SwitchStmt *clone() const override { return new SwitchStmt( *this ); } 173 virtual void print( std::ostream &os, int indent = 0) const override;173 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 174 174 175 175 }; … … 199 199 200 200 virtual CaseStmt *clone() const override { return new CaseStmt( *this ); } 201 virtual void print( std::ostream &os, int indent = 0) const override;201 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 202 202 private: 203 203 bool _isDefault; … … 225 225 virtual void accept( Visitor &v ) override { v.visit( this ); } 226 226 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 227 virtual void print( std::ostream &os, int indent = 0) const override;227 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 228 228 }; 229 229 … … 251 251 virtual void accept( Visitor &v ) override { v.visit( this ); } 252 252 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 253 virtual void print( std::ostream &os, int indent = 0) const override;253 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 254 254 }; 255 255 … … 280 280 virtual void accept( Visitor &v ) override { v.visit( this ); } 281 281 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 282 virtual void print( std::ostream &os, int indent = 0) const override;282 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 283 283 private: 284 284 static const char *brType[]; … … 299 299 virtual void accept( Visitor &v ) override { v.visit( this ); } 300 300 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 301 virtual void print( std::ostream &os, int indent = 0) const override;301 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 302 302 }; 303 303 … … 323 323 virtual void accept( Visitor &v ) override { v.visit( this ); } 324 324 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 325 virtual void print( std::ostream &os, int indent = 0) const override;325 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 326 326 }; 327 327 … … 346 346 virtual void accept( Visitor &v ) override { v.visit( this ); } 347 347 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 348 virtual void print( std::ostream &os, int indent = 0) const override;348 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 349 349 }; 350 350 … … 374 374 virtual void accept( Visitor &v ) override { v.visit( this ); } 375 375 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 376 virtual void print( std::ostream &os, int indent = 0) const override;376 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 377 377 }; 378 378 … … 391 391 virtual void accept( Visitor &v ) override { v.visit( this ); } 392 392 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 393 virtual void print( std::ostream &os, int indent = 0) const override;393 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 394 394 }; 395 395 … … 428 428 virtual void accept( Visitor &v ) override { v.visit( this ); } 429 429 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 430 virtual void print( std::ostream &os, int indent = 0) const override;430 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 431 431 432 432 }; … … 448 448 virtual void accept( Visitor &v ) override { v.visit( this ); } 449 449 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 450 virtual void print( std::ostream &os, int indent = 0) const override;450 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 451 451 }; 452 452 … … 470 470 virtual void accept( Visitor &v ) override { v.visit( this ); } 471 471 virtual Statement *acceptMutator( Mutator &m ) override { return m.mutate( this ); } 472 virtual void print( std::ostream &os, int indent = 0) const override;472 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 473 473 }; 474 474 -
src/SynTree/TupleExpr.cc
rb96ec83 r6840e7c 28 28 #include "Type.h" // for TupleType, Type 29 29 30 UntypedTupleExpr::UntypedTupleExpr( const std::list< Expression * > & exprs , Expression *_aname ) : Expression( _aname), exprs( exprs ) {30 UntypedTupleExpr::UntypedTupleExpr( const std::list< Expression * > & exprs ) : Expression(), exprs( exprs ) { 31 31 } 32 32 … … 39 39 } 40 40 41 void UntypedTupleExpr::print( std::ostream &os, intindent ) const {41 void UntypedTupleExpr::print( std::ostream &os, Indenter indent ) const { 42 42 os << "Untyped Tuple:" << std::endl; 43 printAll( exprs, os, indent+ 2);43 printAll( exprs, os, indent+1 ); 44 44 Expression::print( os, indent ); 45 45 } 46 46 47 TupleExpr::TupleExpr( const std::list< Expression * > & exprs , Expression *_aname ) : Expression( _aname), exprs( exprs ) {47 TupleExpr::TupleExpr( const std::list< Expression * > & exprs ) : Expression(), exprs( exprs ) { 48 48 set_result( Tuples::makeTupleType( exprs ) ); 49 49 } … … 57 57 } 58 58 59 void TupleExpr::print( std::ostream &os, intindent ) const {59 void TupleExpr::print( std::ostream &os, Indenter indent ) const { 60 60 os << "Tuple:" << std::endl; 61 printAll( exprs, os, indent+ 2);61 printAll( exprs, os, indent+1 ); 62 62 Expression::print( os, indent ); 63 63 } … … 78 78 } 79 79 80 void TupleIndexExpr::print( std::ostream &os, intindent ) const {80 void TupleIndexExpr::print( std::ostream &os, Indenter indent ) const { 81 81 os << "Tuple Index Expression, with tuple:" << std::endl; 82 os << std::string( indent+2, ' ' );83 tuple->print( os, indent+ 2);84 os << std::string( indent+2, ' ' )<< "with index: " << index << std::endl;82 os << indent+1; 83 tuple->print( os, indent+1 ); 84 os << indent+1 << "with index: " << index << std::endl; 85 85 Expression::print( os, indent ); 86 86 } 87 87 88 TupleAssignExpr::TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls , Expression * _aname ) : Expression( _aname) {88 TupleAssignExpr::TupleAssignExpr( const std::list< Expression * > & assigns, const std::list< ObjectDecl * > & tempDecls ) : Expression() { 89 89 // convert internally into a StmtExpr which contains the declarations and produces the tuple of the assignments 90 90 set_result( Tuples::makeTupleType( assigns ) ); … … 109 109 } 110 110 111 void TupleAssignExpr::print( std::ostream &os, intindent ) const {111 void TupleAssignExpr::print( std::ostream &os, Indenter indent ) const { 112 112 os << "Tuple Assignment Expression, with stmt expr:" << std::endl; 113 os << std::string( indent+2, ' ' );114 stmtExpr->print( os, indent+ 4);113 os << indent+1; 114 stmtExpr->print( os, indent+1 ); 115 115 Expression::print( os, indent ); 116 116 } -
src/SynTree/TupleType.cc
rb96ec83 r6840e7c 48 48 } 49 49 50 void TupleType::print( std::ostream &os, intindent ) const {50 void TupleType::print( std::ostream &os, Indenter indent ) const { 51 51 Type::print( os, indent ); 52 52 os << "tuple of types" << std::endl; 53 printAll( types, os, indent+ 2);53 printAll( types, os, indent+1 ); 54 54 } 55 55 -
src/SynTree/Type.cc
rb96ec83 r6840e7c 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Sep 11 13:21:25201713 // Update Count : 3 712 // Last Modified On : Mon Sep 25 15:16:32 2017 13 // Update Count : 38 14 14 // 15 15 #include "Type.h" … … 45 45 "double _Imaginary", 46 46 "long double _Imaginary", 47 "__int128", 48 "unsigned __int128", 47 49 }; 48 50 … … 73 75 Type * type; 74 76 ReferenceType * ref; 75 for ( type = this; (ref = dynamic_cast<ReferenceType *>( type )); type = ref-> get_base());77 for ( type = this; (ref = dynamic_cast<ReferenceType *>( type )); type = ref->base ); 76 78 return type; 77 79 } … … 79 81 int Type::referenceDepth() const { return 0; } 80 82 81 void Type::print( std::ostream &os, intindent ) const {83 void Type::print( std::ostream &os, Indenter indent ) const { 82 84 if ( ! forall.empty() ) { 83 85 os << "forall" << std::endl; 84 printAll( forall, os, indent + 4);85 os << std::string( indent+2, ' ' );86 printAll( forall, os, indent+1 ); 87 os << ++indent; 86 88 } // if 87 89 88 90 if ( ! attributes.empty() ) { 89 os << endl << string( indent+2, ' ' ) <<"with attributes" << endl;90 printAll( attributes, os, indent+ 4);91 os << "with attributes" << endl; 92 printAll( attributes, os, indent+1 ); 91 93 } // if 92 94 -
src/SynTree/Type.h
rb96ec83 r6840e7c 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Aug 9 14:25:00201713 // Update Count : 15 211 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Sep 25 14:14:01 2017 13 // Update Count : 154 14 14 // 15 15 … … 181 181 virtual void accept( Visitor & v ) = 0; 182 182 virtual Type *acceptMutator( Mutator & m ) = 0; 183 virtual void print( std::ostream & os, int indent = 0) const;183 virtual void print( std::ostream & os, Indenter indent = {} ) const; 184 184 }; 185 185 … … 198 198 virtual void accept( Visitor & v ) override { v.visit( this ); } 199 199 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 200 virtual void print( std::ostream & os, int indent = 0) const override;200 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 201 201 }; 202 202 … … 225 225 DoubleImaginary, 226 226 LongDoubleImaginary, 227 SignedInt128, 228 UnsignedInt128, 227 229 NUMBER_OF_BASIC_TYPES 228 230 } kind; … … 238 240 virtual void accept( Visitor & v ) override { v.visit( this ); } 239 241 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 240 virtual void print( std::ostream & os, int indent = 0) const override;242 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 241 243 242 244 bool isInteger() const; … … 273 275 virtual void accept( Visitor & v ) override { v.visit( this ); } 274 276 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 275 virtual void print( std::ostream & os, int indent = 0) const override;277 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 276 278 }; 277 279 … … 301 303 virtual void accept( Visitor & v ) override { v.visit( this ); } 302 304 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 303 virtual void print( std::ostream & os, int indent = 0) const override;305 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 304 306 }; 305 307 … … 325 327 virtual void accept( Visitor & v ) override { v.visit( this ); } 326 328 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 327 virtual void print( std::ostream & os, int indent = 0) const override;329 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 328 330 }; 329 331 … … 352 354 virtual void accept( Visitor & v ) override { v.visit( this ); } 353 355 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 354 virtual void print( std::ostream & os, int indent = 0) const override;356 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 355 357 }; 356 358 … … 374 376 virtual void accept( Visitor & v ) override = 0; 375 377 virtual Type *acceptMutator( Mutator & m ) override = 0; 376 virtual void print( std::ostream & os, int indent = 0) const override;378 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 377 379 378 380 virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused)) std::list< Declaration* > & foundDecls ) const {} … … 408 410 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 409 411 410 virtual void print( std::ostream & os, int indent = 0) const override;412 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 411 413 private: 412 414 virtual std::string typeString() const override; … … 440 442 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 441 443 442 virtual void print( std::ostream & os, int indent = 0) const override;444 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 443 445 private: 444 446 virtual std::string typeString() const override; … … 464 466 virtual void accept( Visitor & v ) override { v.visit( this ); } 465 467 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 468 469 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 466 470 private: 467 471 virtual std::string typeString() const override; … … 512 516 virtual void accept( Visitor & v ) override { v.visit( this ); } 513 517 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 514 virtual void print( std::ostream & os, int indent = 0) const override;518 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 515 519 private: 516 520 virtual std::string typeString() const override; … … 549 553 virtual void accept( Visitor & v ) override { v.visit( this ); } 550 554 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 551 virtual void print( std::ostream & os, int indent = 0) const override;555 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 552 556 }; 553 557 … … 568 572 virtual void accept( Visitor & v ) override { v.visit( this ); } 569 573 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 570 virtual void print( std::ostream & os, int indent = 0) const override;574 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 571 575 }; 572 576 … … 597 601 virtual void accept( Visitor & v ) override { v.visit( this ); } 598 602 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 599 virtual void print( std::ostream & os, int indent = 0) const override;603 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 600 604 }; 601 605 … … 611 615 virtual void accept( Visitor & v ) override { v.visit( this ); } 612 616 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 613 virtual void print( std::ostream & os, int indent = 0) const override;617 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 614 618 }; 615 619 … … 623 627 virtual void accept( Visitor & v ) override { v.visit( this ); } 624 628 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 625 virtual void print( std::ostream & os, int indent = 0) const override;629 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 626 630 }; 627 631 … … 635 639 virtual void accept( Visitor & v ) override { v.visit( this ); } 636 640 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 637 virtual void print( std::ostream & os, int indent = 0) const override;641 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 638 642 }; 639 643 -
src/SynTree/TypeDecl.cc
rb96ec83 r6840e7c 41 41 } 42 42 43 void TypeDecl::print( std::ostream &os, intindent ) const {43 void TypeDecl::print( std::ostream &os, Indenter indent ) const { 44 44 NamedTypeDecl::print( os, indent ); 45 45 if ( init ) { 46 os << std::endl << std::string( indent, ' ' )<< "with type initializer: ";47 init->print( os, indent + 2);46 os << std::endl << indent << "with type initializer: "; 47 init->print( os, indent + 1 ); 48 48 } 49 49 } -
src/SynTree/TypeExpr.cc
rb96ec83 r6840e7c 30 30 } 31 31 32 void TypeExpr::print( std::ostream &os, intindent ) const {32 void TypeExpr::print( std::ostream &os, Indenter indent ) const { 33 33 if ( type ) type->print( os, indent ); 34 34 Expression::print( os, indent ); -
src/SynTree/TypeSubstitution.cc
rb96ec83 r6840e7c 148 148 template< typename TypeClass > 149 149 Type *TypeSubstitution::handleType( TypeClass *type ) { 150 BoundVarsTypeoldBoundVars( boundVars );150 ValueGuard<BoundVarsType> oldBoundVars( boundVars ); 151 151 // bind type variables from forall-qualifiers 152 152 if ( freeOnly ) { … … 156 156 } // if 157 157 Type *ret = Mutator::mutate( type ); 158 boundVars = oldBoundVars;159 158 return ret; 160 159 } … … 162 161 template< typename TypeClass > 163 162 Type *TypeSubstitution::handleAggregateType( TypeClass *type ) { 164 BoundVarsTypeoldBoundVars( boundVars );163 ValueGuard<BoundVarsType> oldBoundVars( boundVars ); 165 164 // bind type variables from forall-qualifiers 166 165 if ( freeOnly ) { … … 177 176 } // if 178 177 Type *ret = Mutator::mutate( type ); 179 boundVars = oldBoundVars;180 178 return ret; 181 179 } … … 233 231 } 234 232 235 TypeSubstitution * TypeSubstitution::acceptMutator( Mutator & mutator ) { 236 for ( auto & p : typeEnv ) { 237 p.second = maybeMutate( p.second, mutator ); 238 } 239 for ( auto & p : varEnv ) { 240 p.second = maybeMutate( p.second, mutator ); 241 } 242 return this; 243 } 244 245 void TypeSubstitution::print( std::ostream &os, int indent ) const { 246 os << std::string( indent, ' ' ) << "Types:" << std::endl; 233 void TypeSubstitution::print( std::ostream &os, Indenter indent ) const { 234 os << indent << "Types:" << std::endl; 247 235 for ( TypeEnvType::const_iterator i = typeEnv.begin(); i != typeEnv.end(); ++i ) { 248 os << std::string( indent+2, ' ' )<< i->first << " -> ";249 i->second->print( os, indent+ 4);236 os << indent+1 << i->first << " -> "; 237 i->second->print( os, indent+2 ); 250 238 os << std::endl; 251 239 } // for 252 os << std::string( indent, ' ' )<< "Non-types:" << std::endl;240 os << indent << "Non-types:" << std::endl; 253 241 for ( VarEnvType::const_iterator i = varEnv.begin(); i != varEnv.end(); ++i ) { 254 os << std::string( indent+2, ' ' )<< i->first << " -> ";255 i->second->print( os, indent+ 4);242 os << indent+1 << i->first << " -> "; 243 i->second->print( os, indent+2 ); 256 244 os << std::endl; 257 245 } // for -
src/SynTree/TypeSubstitution.h
rb96ec83 r6840e7c 59 59 void normalize(); 60 60 61 TypeSubstitution * acceptMutator( Mutator & m utator );61 TypeSubstitution * acceptMutator( Mutator & m ) { return m.mutate( this ); } 62 62 63 void print( std::ostream &os, int indent = 0) const;63 void print( std::ostream &os, Indenter indent = {} ) const; 64 64 TypeSubstitution *clone() const { return new TypeSubstitution( *this ); } 65 65 private: … … 89 89 90 90 void initialize( const TypeSubstitution &src, TypeSubstitution &dest ); 91 92 friend class Mutator; 93 94 template<typename pass_type> 95 friend class PassVisitor; 91 96 92 97 typedef std::map< std::string, Type* > TypeEnvType; -
src/SynTree/TypeofType.cc
rb96ec83 r6840e7c 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // TypeofType.cc -- 7 // TypeofType.cc -- 8 8 // 9 9 // Author : Richard C. Bilson … … 33 33 } 34 34 35 void TypeofType::print( std::ostream &os, intindent ) const {35 void TypeofType::print( std::ostream &os, Indenter indent ) const { 36 36 Type::print( os, indent ); 37 37 os << "type-of expression "; -
src/SynTree/VarArgsType.cc
rb96ec83 r6840e7c 25 25 VarArgsType::VarArgsType( Type::Qualifiers tq, const std::list< Attribute * > & attributes ) : Type( tq, attributes ) {} 26 26 27 void VarArgsType::print( std::ostream &os, intindent ) const {27 void VarArgsType::print( std::ostream &os, Indenter indent ) const { 28 28 Type::print( os, indent ); 29 29 os << "builtin var args pack"; -
src/SynTree/VoidType.cc
rb96ec83 r6840e7c 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // VoidType.cc -- 7 // VoidType.cc -- 8 8 // 9 9 // Author : Richard C. Bilson … … 24 24 } 25 25 26 void VoidType::print( std::ostream &os, intindent ) const {26 void VoidType::print( std::ostream &os, Indenter indent ) const { 27 27 Type::print( os, indent ); 28 28 os << "void "; -
src/SynTree/ZeroOneType.cc
rb96ec83 r6840e7c 25 25 ZeroType::ZeroType( Type::Qualifiers tq, const std::list< Attribute * > & attributes ) : Type( tq, attributes ) {} 26 26 27 void ZeroType::print( std::ostream &os, __attribute__((unused)) int indent) const {27 void ZeroType::print( std::ostream &os, Indenter ) const { 28 28 os << "zero_t"; 29 29 } … … 33 33 OneType::OneType( Type::Qualifiers tq, const std::list< Attribute * > & attributes ) : Type( tq, attributes ) {} 34 34 35 void OneType::print( std::ostream &os, __attribute__((unused)) int indent) const {35 void OneType::print( std::ostream &os, Indenter ) const { 36 36 os << "one_t"; 37 37 }
Note:
See TracChangeset
for help on using the changeset viewer.