Changeset b7778c1
- Timestamp:
- Oct 4, 2017, 3:31:43 PM (5 years ago)
- Branches:
- aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 3364962
- Parents:
- 3628765 (diff), bb9d8e8 (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
- Files:
-
- 2 added
- 64 edited
Legend:
- Unmodified
- Added
- Removed
-
src/CodeGen/CodeGenerator.cc
r3628765 rb7778c1 1088 1088 } // namespace CodeGen 1089 1089 1090 1091 unsigned Indenter::tabsize = 2; 1092 1090 1093 std::ostream & operator<<( std::ostream & out, const BaseSyntaxNode * node ) { 1091 1094 if ( node ) { -
src/Common/Indenter.h
r3628765 rb7778c1 18 18 19 19 struct Indenter { 20 Indenter( unsigned int amt = 2 ) : amt( amt ) {} 21 unsigned int amt = 2; // amount 1 level increases indent by (i.e. how much to increase by in operator++) 22 unsigned int indent = 0; 20 static unsigned tabsize; 21 22 Indenter( unsigned int amt = tabsize, unsigned int indent = 0 ) : amt( amt ), indent( indent ) {} 23 unsigned int amt; // amount 1 level increases indent by (i.e. how much to increase by in operator++) 24 unsigned int indent; 23 25 24 26 Indenter & operator+=(int nlevels) { indent += amt*nlevels; return *this; } … … 30 32 }; 31 33 32 inline std::ostream & operator<<( std::ostream & out, Indenter & indent ) {34 inline std::ostream & operator<<( std::ostream & out, const Indenter & indent ) { 33 35 return out << std::string(indent.indent, ' '); 34 36 } -
src/Common/utility.h
r3628765 rb7778c1 28 28 #include <cassert> 29 29 30 #include "Common/Indenter.h" 31 30 32 template< typename T > 31 33 static inline T * maybeClone( const T *orig ) { … … 75 77 76 78 template< typename Container > 77 void printAll( const Container &container, std::ostream &os, int indent = 0) {79 void printAll( const Container &container, std::ostream &os, Indenter indent = {} ) { 78 80 for ( typename Container::const_iterator i = container.begin(); i != container.end(); ++i ) { 79 81 if ( *i ) { 80 os << std::string( indent, ' ' );81 (*i)->print( os, indent + 2);82 os << indent; 83 (*i)->print( os, indent ); 82 84 // need an endl after each element because it's not easy to know when each individual item should end 83 85 os << std::endl; … … 351 353 template< typename T1, typename T2 > 352 354 struct group_iterate_t { 355 private: 356 std::tuple<T1, T2> args; 357 public: 353 358 group_iterate_t( bool skipBoundsCheck, const T1 & v1, const T2 & v2 ) : args(v1, v2) { 354 359 assertf(skipBoundsCheck || v1.size() == v2.size(), "group iteration requires containers of the same size: <%zd, %zd>.", v1.size(), v2.size()); 355 360 }; 356 361 362 typedef std::tuple<decltype(*std::get<0>(args).begin()), decltype(*std::get<1>(args).begin())> value_type; 363 typedef decltype(std::get<0>(args).begin()) T1Iter; 364 typedef decltype(std::get<1>(args).begin()) T2Iter; 365 357 366 struct iterator { 358 typedef typename std::remove_reference<T1>::type T1val;359 typedef typename std::remove_reference<T2>::type T2val;360 typedef std::tuple<typename T1val::value_type &, typename T2val::value_type &> value_type;361 typedef typename T1val::iterator T1Iter;362 typedef typename T2val::iterator T2Iter;363 367 typedef std::tuple<T1Iter, T2Iter> IterTuple; 364 368 IterTuple it; … … 370 374 value_type operator*() const { return std::tie( *std::get<0>(it), *std::get<1>(it) ); } 371 375 }; 376 372 377 iterator begin() { return iterator( std::get<0>(args).begin(), std::get<1>(args).begin() ); } 373 378 iterator end() { return iterator( std::get<0>(args).end(), std::get<1>(args).end() ); } 374 375 private:376 std::tuple<T1, T2> args;377 379 }; 378 380 -
src/GenPoly/Box.cc
r3628765 rb7778c1 600 600 601 601 // add size/align for generic types to parameter list 602 if ( ! appExpr->get_function()-> has_result()) return;602 if ( ! appExpr->get_function()->result ) return; 603 603 FunctionType *funcType = getFunctionType( appExpr->get_function()->get_result() ); 604 604 assert( funcType ); … … 714 714 715 715 void Pass1::boxParam( Type *param, Expression *&arg, const TyVarMap &exprTyVars ) { 716 assertf( arg-> has_result(), "arg does not have result: %s", toString( arg ).c_str() );716 assertf( arg->result, "arg does not have result: %s", toString( arg ).c_str() ); 717 717 if ( isPolyType( param, exprTyVars ) ) { 718 718 Type * newType = arg->get_result()->clone(); … … 965 965 if ( varExpr->get_var()->get_linkage() == LinkageSpec::Intrinsic ) { 966 966 if ( varExpr->get_var()->get_name() == "?[?]" ) { 967 assert( appExpr-> has_result());967 assert( appExpr->result ); 968 968 assert( appExpr->get_args().size() == 2 ); 969 969 Type *baseType1 = isPolyPtr( appExpr->get_args().front()->get_result(), scopeTyVars, env ); … … 999 999 } // if 1000 1000 } else if ( varExpr->get_var()->get_name() == "*?" ) { 1001 assert( appExpr-> has_result());1001 assert( appExpr->result ); 1002 1002 assert( ! appExpr->get_args().empty() ); 1003 1003 if ( isPolyType( appExpr->get_result(), scopeTyVars, env ) ) { … … 1016 1016 } // if 1017 1017 } else if ( varExpr->get_var()->get_name() == "?++" || varExpr->get_var()->get_name() == "?--" ) { 1018 assert( appExpr-> has_result());1018 assert( appExpr->result ); 1019 1019 assert( appExpr->get_args().size() == 1 ); 1020 1020 if ( Type *baseType = isPolyPtr( appExpr->get_result(), scopeTyVars, env ) ) { … … 1036 1036 } // if 1037 1037 } else if ( varExpr->get_var()->get_name() == "++?" || varExpr->get_var()->get_name() == "--?" ) { 1038 assert( appExpr-> has_result());1038 assert( appExpr->result ); 1039 1039 assert( appExpr->get_args().size() == 1 ); 1040 1040 if ( Type *baseType = isPolyPtr( appExpr->get_result(), scopeTyVars, env ) ) { … … 1042 1042 } // if 1043 1043 } else if ( varExpr->get_var()->get_name() == "?+?" || varExpr->get_var()->get_name() == "?-?" ) { 1044 assert( appExpr-> has_result());1044 assert( appExpr->result ); 1045 1045 assert( appExpr->get_args().size() == 2 ); 1046 1046 Type *baseType1 = isPolyPtr( appExpr->get_args().front()->get_result(), scopeTyVars, env ); … … 1068 1068 } // if 1069 1069 } else if ( varExpr->get_var()->get_name() == "?+=?" || varExpr->get_var()->get_name() == "?-=?" ) { 1070 assert( appExpr-> has_result());1070 assert( appExpr->result ); 1071 1071 assert( appExpr->get_args().size() == 2 ); 1072 1072 Type *baseType = isPolyPtr( appExpr->get_result(), scopeTyVars, env ); … … 1162 1162 void Pass1::premutate( AddressExpr * ) { visit_children = false; } 1163 1163 Expression * Pass1::postmutate( AddressExpr * addrExpr ) { 1164 assert( addrExpr->get_arg()-> has_result()&& ! addrExpr->get_arg()->get_result()->isVoid() );1164 assert( addrExpr->get_arg()->result && ! addrExpr->get_arg()->get_result()->isVoid() ); 1165 1165 1166 1166 bool needs = false; 1167 1167 if ( UntypedExpr *expr = dynamic_cast< UntypedExpr *>( addrExpr->get_arg() ) ) { 1168 if ( expr-> has_result()&& isPolyType( expr->get_result(), scopeTyVars, env ) ) {1168 if ( expr->result && isPolyType( expr->get_result(), scopeTyVars, env ) ) { 1169 1169 if ( NameExpr *name = dynamic_cast< NameExpr *>( expr->get_function() ) ) { 1170 1170 if ( name->get_name() == "*?" ) { 1171 1171 if ( ApplicationExpr * appExpr = dynamic_cast< ApplicationExpr * >( expr->get_args().front() ) ) { 1172 assert( appExpr->get_function()-> has_result());1172 assert( appExpr->get_function()->result ); 1173 1173 FunctionType *function = getFunctionType( appExpr->get_function()->get_result() ); 1174 1174 assert( function ); -
src/GenPoly/FindFunction.cc
r3628765 rb7778c1 18 18 #include <utility> // for pair 19 19 20 #include "Common/PassVisitor.h" // for PassVisitor 20 21 #include "Common/SemanticError.h" // for SemanticError 21 22 #include "GenPoly/ErasableScopedMap.h" // for ErasableScopedMap<>::iterator … … 27 28 28 29 namespace GenPoly { 29 class FindFunction : public Mutator{30 class FindFunction : public WithGuards, public WithVisitorRef<FindFunction>, public WithShortCircuiting { 30 31 public: 31 32 FindFunction( std::list< FunctionType* > &functions, const TyVarMap &tyVars, bool replaceMode, FindFunctionPredicate predicate ); 32 33 33 virtual Type *mutate( FunctionType *functionType ); 34 virtual Type *mutate( PointerType *pointerType ); 34 void premutate( FunctionType * functionType ); 35 Type * postmutate( FunctionType * functionType ); 36 void premutate( PointerType * pointerType ); 35 37 private: 36 38 void handleForall( const Type::ForallList &forall ); … … 43 45 44 46 void findFunction( Type *type, std::list< FunctionType* > &functions, const TyVarMap &tyVars, FindFunctionPredicate predicate ) { 45 FindFunctionfinder( functions, tyVars, false, predicate );47 PassVisitor<FindFunction> finder( functions, tyVars, false, predicate ); 46 48 type->acceptMutator( finder ); 47 49 } 48 50 49 51 void findAndReplaceFunction( Type *&type, std::list< FunctionType* > &functions, const TyVarMap &tyVars, FindFunctionPredicate predicate ) { 50 FindFunctionfinder( functions, tyVars, true, predicate );52 PassVisitor<FindFunction> finder( functions, tyVars, true, predicate ); 51 53 type = type->acceptMutator( finder ); 52 54 } … … 57 59 58 60 void FindFunction::handleForall( const Type::ForallList &forall ) { 59 for ( Type::ForallList::const_iterator i = forall.begin(); i != forall.end(); ++i) {60 TyVarMap::iterator var = tyVars.find( (*i)->get_name());61 for ( const Declaration * td : forall ) { 62 TyVarMap::iterator var = tyVars.find( td->name ); 61 63 if ( var != tyVars.end() ) { 62 64 tyVars.erase( var->first ); … … 65 67 } 66 68 67 Type * FindFunction::mutate( FunctionType *functionType ) { 68 tyVars.beginScope(); 69 void FindFunction::premutate( FunctionType * functionType ) { 70 visit_children = false; 71 GuardScope( tyVars ); 69 72 handleForall( functionType->get_forall() ); 70 mutateAll( functionType->get_returnVals(), *this ); 73 mutateAll( functionType->get_returnVals(), *visitor ); 74 } 75 76 Type * FindFunction::postmutate( FunctionType * functionType ) { 71 77 Type *ret = functionType; 72 78 if ( predicate( functionType, tyVars ) ) { … … 77 83 } // if 78 84 } // if 79 tyVars.endScope();80 85 return ret; 81 86 } 82 87 83 Type * FindFunction::mutate( PointerType *pointerType ) {84 tyVars.beginScope();88 void FindFunction::premutate( PointerType * pointerType ) { 89 GuardScope( tyVars ); 85 90 handleForall( pointerType->get_forall() ); 86 Type *ret = Mutator::mutate( pointerType );87 tyVars.endScope();88 return ret;89 91 } 90 92 } // namespace GenPoly -
src/GenPoly/Specialize.cc
r3628765 rb7778c1 147 147 148 148 Expression * Specialize::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) { 149 assertf( actual-> has_result(), "attempting to specialize an untyped expression" );149 assertf( actual->result, "attempting to specialize an untyped expression" ); 150 150 if ( needsSpecialization( formalType, actual->get_result(), env ) ) { 151 151 if ( FunctionType *funType = getFunctionType( formalType ) ) { -
src/InitTweak/FixInit.cc
r3628765 rb7778c1 390 390 assert( env ); 391 391 CP_CTOR_PRINT( std::cerr << "Type Substitution: " << *env << std::endl; ) 392 assert( arg-> has_result());392 assert( arg->result ); 393 393 Type * result = arg->get_result(); 394 394 if ( skipCopyConstruct( result ) ) return; // skip certain non-copyable types … … 552 552 Expression * retExpr = new CommaExpr( assign, new VariableExpr( returnDecl ) ); 553 553 // move env from callExpr to retExpr 554 retExpr->set_env( callExpr->get_env() ); 555 callExpr->set_env( nullptr ); 554 std::swap( retExpr->env, callExpr->env ); 556 555 return retExpr; 557 556 } else { … … 811 810 GuardValue( labelVars ); 812 811 labelVars.clear(); 812 // LabelFinder does not recurse into FunctionDecl, so need to visit 813 // its children manually. 813 814 maybeAccept( funcDecl->type, finder ); 814 815 maybeAccept( funcDecl->statements, finder ); … … 1126 1127 static UniqueName tempNamer( "_tmp_ctor_expr" ); 1127 1128 // xxx - is the size check necessary? 1128 assert( ctorExpr-> has_result()&& ctorExpr->get_result()->size() == 1 );1129 assert( ctorExpr->result && ctorExpr->get_result()->size() == 1 ); 1129 1130 1130 1131 // xxx - ideally we would reuse the temporary generated from the copy constructor passes from within firstArg if it exists and not generate a temporary if it's unnecessary. -
src/Parser/ExpressionNode.cc
r3628765 rb7778c1 87 87 } else { 88 88 assertf( false, "internal error, bad integral length %s", str.c_str() ); 89 } // if 89 } // if 90 90 posn += 1; 91 91 } // if … … 397 397 398 398 NameExpr * build_varref( const string * name ) { 399 NameExpr * expr = new NameExpr( *name , nullptr);399 NameExpr * expr = new NameExpr( *name ); 400 400 delete name; 401 401 return expr; … … 488 488 list< Expression * > args; 489 489 buildMoveList( expr_node, args ); 490 return new UntypedExpr( maybeMoveBuild< Expression >(function), args , nullptr);490 return new UntypedExpr( maybeMoveBuild< Expression >(function), args ); 491 491 } // build_func 492 492 -
src/ResolvExpr/AdjustExprType.cc
r3628765 rb7778c1 14 14 // 15 15 16 #include "Common/PassVisitor.h" 16 17 #include "SymTab/Indexer.h" // for Indexer 17 18 #include "SynTree/Declaration.h" // for TypeDecl, TypeDecl::Kind::Ftype … … 21 22 22 23 namespace ResolvExpr { 23 class AdjustExprType : public Mutator { 24 typedef Mutator Parent; 25 using Parent::mutate; 24 class AdjustExprType : public WithShortCircuiting { 26 25 public: 27 26 AdjustExprType( const TypeEnvironment &env, const SymTab::Indexer &indexer ); 27 void premutate( VoidType * ) { visit_children = false; } 28 void premutate( BasicType * ) { visit_children = false; } 29 void premutate( PointerType * ) { visit_children = false; } 30 void premutate( FunctionType * ) { visit_children = false; } 31 void premutate( StructInstType * ) { visit_children = false; } 32 void premutate( UnionInstType * ) { visit_children = false; } 33 void premutate( EnumInstType * ) { visit_children = false; } 34 void premutate( TraitInstType * ) { visit_children = false; } 35 void premutate( TypeInstType * ) { visit_children = false; } 36 void premutate( TupleType * ) { visit_children = false; } 37 void premutate( VarArgsType * ) { visit_children = false; } 38 void premutate( ZeroType * ) { visit_children = false; } 39 void premutate( OneType * ) { visit_children = false; } 40 41 Type * postmutate( ArrayType *arrayType ); 42 Type * postmutate( FunctionType *functionType ); 43 Type * postmutate( TypeInstType *aggregateUseType ); 44 28 45 private: 29 virtual Type* mutate( VoidType *voidType );30 virtual Type* mutate( BasicType *basicType );31 virtual Type* mutate( PointerType *pointerType );32 virtual Type* mutate( ArrayType *arrayType );33 virtual Type* mutate( FunctionType *functionType );34 virtual Type* mutate( StructInstType *aggregateUseType );35 virtual Type* mutate( UnionInstType *aggregateUseType );36 virtual Type* mutate( EnumInstType *aggregateUseType );37 virtual Type* mutate( TraitInstType *aggregateUseType );38 virtual Type* mutate( TypeInstType *aggregateUseType );39 virtual Type* mutate( TupleType *tupleType );40 virtual Type* mutate( VarArgsType *varArgsType );41 virtual Type* mutate( ZeroType *zeroType );42 virtual Type* mutate( OneType *oneType );43 44 46 const TypeEnvironment &env; 45 47 const SymTab::Indexer &indexer; … … 47 49 48 50 void adjustExprType( Type *&type, const TypeEnvironment &env, const SymTab::Indexer &indexer ) { 49 AdjustExprTypeadjuster( env, indexer );51 PassVisitor<AdjustExprType> adjuster( env, indexer ); 50 52 Type *newType = type->acceptMutator( adjuster ); 51 53 type = newType; … … 56 58 } 57 59 58 Type *AdjustExprType::mutate( VoidType *voidType ) { 59 return voidType; 60 } 61 62 Type *AdjustExprType::mutate( BasicType *basicType ) { 63 return basicType; 64 } 65 66 Type *AdjustExprType::mutate( PointerType *pointerType ) { 67 return pointerType; 68 } 69 70 Type *AdjustExprType::mutate( ArrayType *arrayType ) { 60 Type * AdjustExprType::postmutate( ArrayType * arrayType ) { 71 61 // need to recursively mutate the base type in order for multi-dimensional arrays to work. 72 PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->get_base()->clone()->acceptMutator( *this ) ); 62 PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->base ); 63 arrayType->base = nullptr; 73 64 delete arrayType; 74 65 return pointerType; 75 66 } 76 67 77 Type *AdjustExprType::mutate( FunctionType *functionType ) { 78 PointerType *pointerType = new PointerType( Type::Qualifiers(), functionType ); 79 return pointerType; 68 Type * AdjustExprType::postmutate( FunctionType * functionType ) { 69 return new PointerType( Type::Qualifiers(), functionType ); 80 70 } 81 71 82 Type *AdjustExprType::mutate( StructInstType *aggregateUseType ) { 83 return aggregateUseType; 84 } 85 86 Type *AdjustExprType::mutate( UnionInstType *aggregateUseType ) { 87 return aggregateUseType; 88 } 89 90 Type *AdjustExprType::mutate( EnumInstType *aggregateUseType ) { 91 return aggregateUseType; 92 } 93 94 Type *AdjustExprType::mutate( TraitInstType *aggregateUseType ) { 95 return aggregateUseType; 96 } 97 98 Type *AdjustExprType::mutate( TypeInstType *typeInst ) { 72 Type * AdjustExprType::postmutate( TypeInstType * typeInst ) { 99 73 EqvClass eqvClass; 100 74 if ( env.lookup( typeInst->get_name(), eqvClass ) ) { … … 113 87 return typeInst; 114 88 } 115 116 Type *AdjustExprType::mutate( TupleType *tupleType ) {117 return tupleType;118 }119 120 Type *AdjustExprType::mutate( VarArgsType *varArgsType ) {121 return varArgsType;122 }123 124 Type *AdjustExprType::mutate( ZeroType *zeroType ) {125 return zeroType;126 }127 128 Type *AdjustExprType::mutate( OneType *oneType ) {129 return oneType;130 }131 89 } // namespace ResolvExpr 132 90 -
src/ResolvExpr/Alternative.cc
r3628765 rb7778c1 66 66 } 67 67 68 void Alternative::print( std::ostream &os, intindent ) const {69 os << std::string( indent, ' ' ) <<"Cost " << cost << ": ";68 void Alternative::print( std::ostream &os, Indenter indent ) const { 69 os << "Cost " << cost << ": "; 70 70 if ( expr ) { 71 expr->print( os, indent );72 os << "(types:" << std::endl;73 os << std::string( indent+4, ' ' );74 expr-> get_result()->print( os, indent + 4);75 os << std::endl << ")" << std::endl;71 expr->print( os, indent+1 ); 72 os << std::endl << indent << "(types:" << std::endl; 73 os << indent+1; 74 expr->result->print( os, indent+1 ); 75 os << std::endl << indent << ")" << std::endl; 76 76 } else { 77 77 os << "Null expression!" << std::endl; 78 78 } // if 79 os << std::string( indent, ' ' )<< "Environment: ";80 env.print( os, indent+ 2);79 os << indent << "Environment: "; 80 env.print( os, indent+1 ); 81 81 os << std::endl; 82 82 } -
src/ResolvExpr/Alternative.h
r3628765 rb7778c1 39 39 ~Alternative(); 40 40 41 void print( std::ostream &os, int indent = 0) const;41 void print( std::ostream &os, Indenter indent = {} ) const; 42 42 43 43 Cost cost; -
src/ResolvExpr/AlternativeFinder.cc
r3628765 rb7778c1 75 75 76 76 namespace { 77 void printAlts( const AltList &list, std::ostream &os, int indent = 0 ) { 77 void printAlts( const AltList &list, std::ostream &os, unsigned int indentAmt = 0 ) { 78 Indenter indent = { Indenter::tabsize, indentAmt }; 78 79 for ( AltList::const_iterator i = list.begin(); i != list.end(); ++i ) { 79 80 i->print( os, indent ); … … 195 196 AltList winners; 196 197 findMinCost( alternatives.begin(), alternatives.end(), back_inserter( winners ) ); 197 stream << "Cannot choose between " << winners.size() << " alternatives for expression 198 stream << "Cannot choose between " << winners.size() << " alternatives for expression\n"; 198 199 expr->print( stream ); 199 stream << "Alternatives are: ";200 printAlts( winners, stream, 8);200 stream << "Alternatives are:\n"; 201 printAlts( winners, stream, 1 ); 201 202 throw SemanticError( stream.str() ); 202 203 } … … 728 729 PRINT( 729 730 std::cerr << "known function ops:" << std::endl; 730 printAlts( funcOpFinder.alternatives, std::cerr, 8);731 printAlts( funcOpFinder.alternatives, std::cerr, 1 ); 731 732 ) 732 733 … … 838 839 bool isLvalue( Expression *expr ) { 839 840 // xxx - recurse into tuples? 840 return expr-> has_result()&& ( expr->get_result()->get_lvalue() || dynamic_cast< ReferenceType * >( expr->get_result() ) );841 return expr->result && ( expr->get_result()->get_lvalue() || dynamic_cast< ReferenceType * >( expr->get_result() ) ); 841 842 } 842 843 … … 972 973 PRINT( std::cerr << "nameExpr is " << nameExpr->get_name() << std::endl; ) 973 974 for ( std::list< DeclarationWithType* >::iterator i = declList.begin(); i != declList.end(); ++i ) { 974 VariableExpr newExpr( *i , nameExpr->get_argName());975 VariableExpr newExpr( *i ); 975 976 alternatives.push_back( Alternative( newExpr.clone(), env, Cost::zero ) ); 976 977 PRINT( -
src/ResolvExpr/ResolveTypeof.cc
r3628765 rb7778c1 18 18 #include <cassert> // for assert 19 19 20 #include "Common/PassVisitor.h" // for PassVisitor 20 21 #include "Resolver.h" // for resolveInVoidContext 21 22 #include "SynTree/Expression.h" // for Expression … … 41 42 } 42 43 43 class ResolveTypeof : public Mutator{44 class ResolveTypeof : public WithShortCircuiting { 44 45 public: 45 46 ResolveTypeof( const SymTab::Indexer &indexer ) : indexer( indexer ) {} 46 Type *mutate( TypeofType *typeofType ); 47 void premutate( TypeofType *typeofType ); 48 Type * postmutate( TypeofType *typeofType ); 47 49 48 50 private: … … 50 52 }; 51 53 52 Type * resolveTypeof( Type *type, const SymTab::Indexer &indexer ) {53 ResolveTypeofmutator( indexer );54 Type * resolveTypeof( Type *type, const SymTab::Indexer &indexer ) { 55 PassVisitor<ResolveTypeof> mutator( indexer ); 54 56 return type->acceptMutator( mutator ); 55 57 } 56 58 57 Type *ResolveTypeof::mutate( TypeofType *typeofType ) { 59 void ResolveTypeof::premutate( TypeofType * ) { 60 visit_children = false; 61 } 62 63 Type * ResolveTypeof::postmutate( TypeofType *typeofType ) { 58 64 #if 0 59 std::c out<< "resolving typeof: ";60 typeofType->print( std::c out);61 std::c out<< std::endl;65 std::cerr << "resolving typeof: "; 66 typeofType->print( std::cerr ); 67 std::cerr << std::endl; 62 68 #endif 63 if ( typeofType-> get_expr()) {64 Expression * newExpr = resolveInVoidContext( typeofType->get_expr(), indexer );65 assert( newExpr-> has_result() && ! newExpr->get_result()->isVoid() );66 Type * newType = newExpr->get_result();67 newExpr-> set_result( nullptr );69 if ( typeofType->expr ) { 70 Expression * newExpr = resolveInVoidContext( typeofType->expr, indexer ); 71 assert( newExpr->result && ! newExpr->result->isVoid() ); 72 Type * newType = newExpr->result; 73 newExpr->result = nullptr; 68 74 delete typeofType; 69 75 delete newExpr; -
src/ResolvExpr/TypeEnvironment.cc
r3628765 rb7778c1 68 68 } 69 69 70 void EqvClass::print( std::ostream &os, intindent ) const {71 os << std::string( indent, ' ' ) <<"( ";70 void EqvClass::print( std::ostream &os, Indenter indent ) const { 71 os << "( "; 72 72 std::copy( vars.begin(), vars.end(), std::ostream_iterator< std::string >( os, " " ) ); 73 73 os << ")"; 74 74 if ( type ) { 75 75 os << " -> "; 76 type->print( os, indent );76 type->print( os, indent+1 ); 77 77 } // if 78 78 if ( ! allowWidening ) { … … 144 144 } 145 145 146 void TypeEnvironment::print( std::ostream &os, intindent ) const {146 void TypeEnvironment::print( std::ostream &os, Indenter indent ) const { 147 147 for ( std::list< EqvClass >::const_iterator i = env.begin(); i != env.end(); ++i ) { 148 148 i->print( os, indent ); -
src/ResolvExpr/TypeEnvironment.h
r3628765 rb7778c1 68 68 EqvClass &operator=( const EqvClass &other ); 69 69 ~EqvClass(); 70 void print( std::ostream &os, int indent = 0) const;70 void print( std::ostream &os, Indenter indent = {} ) const; 71 71 }; 72 72 … … 80 80 void makeSubstitution( TypeSubstitution &result ) const; 81 81 bool isEmpty() const { return env.empty(); } 82 void print( std::ostream &os, int indent = 0) const;82 void print( std::ostream &os, Indenter indent = {} ) const; 83 83 void combine( const TypeEnvironment &second, Type *(*combineFunc)( Type*, Type* ) ); 84 84 void simpleCombine( const TypeEnvironment &second ); -
src/ResolvExpr/Unify.cc
r3628765 rb7778c1 22 22 #include <utility> // for pair 23 23 24 #include "Common/PassVisitor.h" // for PassVisitor 24 25 #include "FindOpenVars.h" // for findOpenVars 25 26 #include "Parser/LinkageSpec.h" // for C … … 537 538 /// If this isn't done then argument lists can have wildly different 538 539 /// size and structure, when they should be compatible. 539 struct TtypeExpander : public Mutator { 540 TypeEnvironment & env; 541 TtypeExpander( TypeEnvironment & env ) : env( env ) {} 542 Type * mutate( TypeInstType * typeInst ) { 540 struct TtypeExpander : public WithShortCircuiting { 541 TypeEnvironment & tenv; 542 TtypeExpander( TypeEnvironment & tenv ) : tenv( tenv ) {} 543 void premutate( TypeInstType * ) { visit_children = false; } 544 Type * postmutate( TypeInstType * typeInst ) { 543 545 EqvClass eqvClass; 544 if ( env.lookup( typeInst->get_name(), eqvClass ) ) {546 if ( tenv.lookup( typeInst->get_name(), eqvClass ) ) { 545 547 if ( eqvClass.data.kind == TypeDecl::Ttype ) { 546 548 // expand ttype parameter into its actual type … … 560 562 dst.clear(); 561 563 for ( DeclarationWithType * dcl : src ) { 562 TtypeExpanderexpander( env );564 PassVisitor<TtypeExpander> expander( env ); 563 565 dcl->acceptMutator( expander ); 564 566 std::list< Type * > types; … … 750 752 std::list<Type *> types1, types2; 751 753 752 TtypeExpanderexpander( env );754 PassVisitor<TtypeExpander> expander( env ); 753 755 flat1->acceptMutator( expander ); 754 756 flat2->acceptMutator( expander ); -
src/SymTab/FixFunction.cc
r3628765 rb7778c1 26 26 FixFunction::FixFunction() : isVoid( false ) {} 27 27 28 DeclarationWithType * FixFunction::mutate(FunctionDecl *functionDecl) { 28 29 DeclarationWithType * FixFunction::postmutate(FunctionDecl *functionDecl) { 29 30 // can't delete function type because it may contain assertions, so transfer ownership to new object 30 ObjectDecl *pointer = new ObjectDecl( functionDecl-> get_name(), functionDecl->get_storageClasses(), functionDecl->get_linkage(), 0, new PointerType( Type::Qualifiers(), functionDecl->get_type() ), 0, functionDecl->get_attributes());31 functionDecl-> get_attributes().clear();31 ObjectDecl *pointer = new ObjectDecl( functionDecl->name, functionDecl->get_storageClasses(), functionDecl->linkage, nullptr, new PointerType( Type::Qualifiers(), functionDecl->type ), nullptr, functionDecl->attributes ); 32 functionDecl->attributes.clear(); 32 33 functionDecl->type = nullptr; 33 34 delete functionDecl; … … 35 36 } 36 37 37 Type * FixFunction::mutate(VoidType *voidType) { 38 isVoid = true; 39 return voidType; 40 } 41 42 Type * FixFunction::mutate(BasicType *basicType) { 43 return basicType; 44 } 45 46 Type * FixFunction::mutate(PointerType *pointerType) { 47 return pointerType; 48 } 49 50 Type * FixFunction::mutate(ArrayType *arrayType) { 38 Type * FixFunction::postmutate(ArrayType *arrayType) { 51 39 // need to recursively mutate the base type in order for multi-dimensional arrays to work. 52 PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->get_base()->clone()->acceptMutator( *this ), maybeClone( arrayType->get_dimension() ), arrayType->get_isVarLen(), arrayType->get_isStatic() ); 40 PointerType *pointerType = new PointerType( arrayType->get_qualifiers(), arrayType->base, arrayType->dimension, arrayType->isVarLen, arrayType->isStatic ); 41 arrayType->base = nullptr; 42 arrayType->dimension = nullptr; 53 43 delete arrayType; 54 44 return pointerType; 55 45 } 56 46 57 Type * FixFunction::mutate(StructInstType *aggregateUseType) {58 return aggregateUseType;47 void FixFunction::premutate(VoidType *) { 48 isVoid = true; 59 49 } 60 50 61 Type * FixFunction::mutate(UnionInstType *aggregateUseType) { 62 return aggregateUseType; 63 } 64 65 Type * FixFunction::mutate(EnumInstType *aggregateUseType) { 66 return aggregateUseType; 67 } 68 69 Type * FixFunction::mutate(TraitInstType *aggregateUseType) { 70 return aggregateUseType; 71 } 72 73 Type * FixFunction::mutate(TypeInstType *aggregateUseType) { 74 return aggregateUseType; 75 } 76 77 Type * FixFunction::mutate(TupleType *tupleType) { 78 return tupleType; 79 } 80 81 Type * FixFunction::mutate(VarArgsType *varArgsType) { 82 return varArgsType; 83 } 84 85 Type * FixFunction::mutate(ZeroType *zeroType) { 86 return zeroType; 87 } 88 89 Type * FixFunction::mutate(OneType *oneType) { 90 return oneType; 91 } 51 void FixFunction::premutate(FunctionDecl *) { visit_children = false; } 52 void FixFunction::premutate(BasicType *) { visit_children = false; } 53 void FixFunction::premutate(PointerType *) { visit_children = false; } 54 void FixFunction::premutate(StructInstType *) { visit_children = false; } 55 void FixFunction::premutate(UnionInstType *) { visit_children = false; } 56 void FixFunction::premutate(EnumInstType *) { visit_children = false; } 57 void FixFunction::premutate(TraitInstType *) { visit_children = false; } 58 void FixFunction::premutate(TypeInstType *) { visit_children = false; } 59 void FixFunction::premutate(TupleType *) { visit_children = false; } 60 void FixFunction::premutate(VarArgsType *) { visit_children = false; } 61 void FixFunction::premutate(ZeroType *) { visit_children = false; } 62 void FixFunction::premutate(OneType *) { visit_children = false; } 92 63 } // namespace SymTab 93 64 -
src/SymTab/FixFunction.h
r3628765 rb7778c1 16 16 #pragma once 17 17 18 #include " SynTree/Mutator.h" // for Mutator19 #include "SynTree/SynTree.h" // for Types18 #include "Common/PassVisitor.h" // for PassVisitor 19 #include "SynTree/SynTree.h" // for Types 20 20 21 21 namespace SymTab { 22 22 /// Replaces function and array types by equivalent pointer types. 23 class FixFunction : public Mutator{23 class FixFunction : public WithShortCircuiting { 24 24 typedef Mutator Parent; 25 25 public: 26 26 FixFunction(); 27 27 28 bool get_isVoid() const { return isVoid; } 29 void set_isVoid( bool newValue ) { isVoid = newValue; } 30 private: 31 virtual DeclarationWithType* mutate(FunctionDecl *functionDecl); 28 void premutate(FunctionDecl *functionDecl); 29 DeclarationWithType* postmutate(FunctionDecl *functionDecl); 32 30 33 virtual Type* mutate(VoidType *voidType); 34 virtual Type* mutate(BasicType *basicType); 35 virtual Type* mutate(PointerType *pointerType); 36 virtual Type* mutate(ArrayType *arrayType); 37 virtual Type* mutate(StructInstType *aggregateUseType); 38 virtual Type* mutate(UnionInstType *aggregateUseType); 39 virtual Type* mutate(EnumInstType *aggregateUseType); 40 virtual Type* mutate(TraitInstType *aggregateUseType); 41 virtual Type* mutate(TypeInstType *aggregateUseType); 42 virtual Type* mutate(TupleType *tupleType); 43 virtual Type* mutate(VarArgsType *varArgsType); 44 virtual Type* mutate(ZeroType *zeroType); 45 virtual Type* mutate(OneType *oneType); 31 Type * postmutate(ArrayType * arrayType); 32 33 void premutate(VoidType * voidType); 34 void premutate(BasicType * basicType); 35 void premutate(PointerType * pointerType); 36 void premutate(StructInstType * aggregateUseType); 37 void premutate(UnionInstType * aggregateUseType); 38 void premutate(EnumInstType * aggregateUseType); 39 void premutate(TraitInstType * aggregateUseType); 40 void premutate(TypeInstType * aggregateUseType); 41 void premutate(TupleType * tupleType); 42 void premutate(VarArgsType * varArgsType); 43 void premutate(ZeroType * zeroType); 44 void premutate(OneType * oneType); 46 45 47 46 bool isVoid; -
src/SymTab/Validate.cc
r3628765 rb7778c1 369 369 DWTIterator begin( dwts.begin() ), end( dwts.end() ); 370 370 if ( begin == end ) return; 371 FixFunctionfixer;371 PassVisitor<FixFunction> fixer; 372 372 DWTIterator i = begin; 373 373 *i = (*i)->acceptMutator( fixer ); 374 if ( fixer. get_isVoid()) {374 if ( fixer.pass.isVoid ) { 375 375 DWTIterator j = i; 376 376 ++i; … … 383 383 ++i; 384 384 for ( ; i != end; ++i ) { 385 FixFunctionfixer;385 PassVisitor<FixFunction> fixer; 386 386 *i = (*i)->acceptMutator( fixer ); 387 if ( fixer. get_isVoid()) {387 if ( fixer.pass.isVoid ) { 388 388 throw SemanticError( "invalid type void in function type ", func ); 389 389 } // if … … 597 597 // apply FixFunction to every assertion to check for invalid void type 598 598 for ( DeclarationWithType *& assertion : type->assertions ) { 599 FixFunctionfixer;599 PassVisitor<FixFunction> fixer; 600 600 assertion = assertion->acceptMutator( fixer ); 601 if ( fixer. get_isVoid()) {601 if ( fixer.pass.isVoid ) { 602 602 throw SemanticError( "invalid type void in assertion of function ", node ); 603 603 } // if -
src/SynTree/AddressExpr.cc
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 46 46 virtual void accept( Visitor & v ) override { v.visit( this ); } 47 47 virtual Attribute * acceptMutator( Mutator & m ) override { return m.mutate( this ); } 48 virtual void print( std::ostream & os, int indent = 0) const override;48 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 49 49 }; 50 50 -
src/SynTree/BaseSyntaxNode.h
r3628765 rb7778c1 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
r3628765 rb7778c1 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // BasicType.cc -- 7 // BasicType.cc -- 8 8 // 9 9 // Author : Richard C. Bilson … … 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 ]; -
src/SynTree/CommaExpr.cc
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 71 71 } 72 72 73 void Constant::print( std::ostream &os, int indent) const {73 void Constant::print( std::ostream &os, Indenter ) const { 74 74 os << "(" << rep << " " << val.ival; 75 75 if ( type ) { -
src/SynTree/Constant.h
r3628765 rb7778c1 57 57 virtual void accept( Visitor & v ) { v.visit( this ); } 58 58 virtual Constant * acceptMutator( Mutator & m ) { return m.mutate( this ); } 59 virtual void print( std::ostream & os, intindent = 0 ) const;59 virtual void print( std::ostream & os, Indenter indent = 0 ) const; 60 60 private: 61 61 Type * type; -
src/SynTree/DeclStmt.cc
r3628765 rb7778c1 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
r3628765 rb7778c1 70 70 } 71 71 72 void AsmDecl::print( std::ostream &os, intindent ) const {72 void AsmDecl::print( std::ostream &os, Indenter indent ) const { 73 73 stmt->print( os, indent ); 74 74 } 75 75 76 void AsmDecl::printShort( std::ostream &os, intindent ) const {76 void AsmDecl::printShort( std::ostream &os, Indenter indent ) const { 77 77 stmt->print( os, indent ); 78 78 } -
src/SynTree/Declaration.h
r3628765 rb7778c1 64 64 virtual void accept( Visitor &v ) override = 0; 65 65 virtual Declaration *acceptMutator( Mutator &m ) override = 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;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
r3628765 rb7778c1 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
r3628765 rb7778c1 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; } … … 58 54 virtual void accept( Visitor & v ) override = 0; 59 55 virtual Expression * acceptMutator( Mutator & m ) override = 0; 60 virtual void print( std::ostream & os, int indent = 0) const override;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
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 40 40 virtual void accept( Visitor &v ) override { v.visit( this ); } 41 41 virtual Designation * acceptMutator( Mutator &m ) override { return m.mutate( this ); } 42 virtual void print( std::ostream &os, int indent = 0) const override;42 virtual void print( std::ostream &os, Indenter indent = {} ) const override; 43 43 }; 44 44 … … 57 57 virtual void accept( Visitor &v ) override = 0; 58 58 virtual Initializer *acceptMutator( Mutator &m ) override = 0; 59 virtual void print( std::ostream &os, int indent = 0) const 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/NamedTypeDecl.cc
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 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 … … 166 165 bool TypeInstType::isComplete() const { return baseType->isComplete(); } 167 166 168 void TypeInstType::print( std::ostream &os, intindent ) const {167 void TypeInstType::print( std::ostream &os, Indenter indent ) const { 169 168 using std::endl; 170 169 … … 172 171 os << "instance of " << typeString() << " " << get_name() << " (" << ( isFtype ? "" : "not" ) << " function type) "; 173 172 if ( ! parameters.empty() ) { 174 os << endl << std::string( indent, ' ' ) << "with parameters" << endl;175 printAll( parameters, os, indent+ 2);173 os << endl << indent << "... with parameters" << endl; 174 printAll( parameters, os, indent+1 ); 176 175 } // if 177 176 } -
src/SynTree/ReferenceType.cc
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 46 46 virtual void accept( Visitor &v ) override = 0; 47 47 virtual Statement *acceptMutator( Mutator &m ) override = 0; 48 virtual void print( std::ostream &os, int indent = 0) const override;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
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 75 75 Type * type; 76 76 ReferenceType * ref; 77 for ( type = this; (ref = dynamic_cast<ReferenceType *>( type )); type = ref-> get_base());77 for ( type = this; (ref = dynamic_cast<ReferenceType *>( type )); type = ref->base ); 78 78 return type; 79 79 } … … 81 81 int Type::referenceDepth() const { return 0; } 82 82 83 void Type::print( std::ostream &os, intindent ) const {83 void Type::print( std::ostream &os, Indenter indent ) const { 84 84 if ( ! forall.empty() ) { 85 85 os << "forall" << std::endl; 86 printAll( forall, os, indent + 4);87 os << std::string( indent+2, ' ' );86 printAll( forall, os, indent+1 ); 87 os << ++indent; 88 88 } // if 89 89 90 90 if ( ! attributes.empty() ) { 91 os << endl << string( indent+2, ' ' ) <<"with attributes" << endl;92 printAll( attributes, os, indent+ 4);91 os << "with attributes" << endl; 92 printAll( attributes, os, indent+1 ); 93 93 } // if 94 94 -
src/SynTree/Type.h
r3628765 rb7778c1 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 … … 240 240 virtual void accept( Visitor & v ) override { v.visit( this ); } 241 241 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 242 virtual void print( std::ostream & os, int indent = 0) const override;242 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 243 243 244 244 bool isInteger() const; … … 275 275 virtual void accept( Visitor & v ) override { v.visit( this ); } 276 276 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 277 virtual void print( std::ostream & os, int indent = 0) const override;277 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 278 278 }; 279 279 … … 303 303 virtual void accept( Visitor & v ) override { v.visit( this ); } 304 304 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 305 virtual void print( std::ostream & os, int indent = 0) const override;305 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 306 306 }; 307 307 … … 327 327 virtual void accept( Visitor & v ) override { v.visit( this ); } 328 328 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 329 virtual void print( std::ostream & os, int indent = 0) const override;329 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 330 330 }; 331 331 … … 354 354 virtual void accept( Visitor & v ) override { v.visit( this ); } 355 355 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 356 virtual void print( std::ostream & os, int indent = 0) const override;356 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 357 357 }; 358 358 … … 376 376 virtual void accept( Visitor & v ) override = 0; 377 377 virtual Type *acceptMutator( Mutator & m ) override = 0; 378 virtual void print( std::ostream & os, int indent = 0) const override;378 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 379 379 380 380 virtual void lookup( __attribute__((unused)) const std::string & name, __attribute__((unused)) std::list< Declaration* > & foundDecls ) const {} … … 410 410 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 411 411 412 virtual void print( std::ostream & os, int indent = 0) const override;412 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 413 413 private: 414 414 virtual std::string typeString() const override; … … 442 442 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 443 443 444 virtual void print( std::ostream & os, int indent = 0) const override;444 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 445 445 private: 446 446 virtual std::string typeString() const override; … … 514 514 virtual void accept( Visitor & v ) override { v.visit( this ); } 515 515 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 516 virtual void print( std::ostream & os, int indent = 0) const override;516 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 517 517 private: 518 518 virtual std::string typeString() const override; … … 551 551 virtual void accept( Visitor & v ) override { v.visit( this ); } 552 552 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 553 virtual void print( std::ostream & os, int indent = 0) const override;553 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 554 554 }; 555 555 … … 570 570 virtual void accept( Visitor & v ) override { v.visit( this ); } 571 571 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 572 virtual void print( std::ostream & os, int indent = 0) const override;572 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 573 573 }; 574 574 … … 599 599 virtual void accept( Visitor & v ) override { v.visit( this ); } 600 600 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 601 virtual void print( std::ostream & os, int indent = 0) const override;601 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 602 602 }; 603 603 … … 613 613 virtual void accept( Visitor & v ) override { v.visit( this ); } 614 614 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 615 virtual void print( std::ostream & os, int indent = 0) const override;615 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 616 616 }; 617 617 … … 625 625 virtual void accept( Visitor & v ) override { v.visit( this ); } 626 626 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 627 virtual void print( std::ostream & os, int indent = 0) const override;627 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 628 628 }; 629 629 … … 637 637 virtual void accept( Visitor & v ) override { v.visit( this ); } 638 638 virtual Type *acceptMutator( Mutator & m ) override { return m.mutate( this ); } 639 virtual void print( std::ostream & os, int indent = 0) const override;639 virtual void print( std::ostream & os, Indenter indent = {} ) const override; 640 640 }; 641 641 -
src/SynTree/TypeDecl.cc
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 243 243 } 244 244 245 void TypeSubstitution::print( std::ostream &os, intindent ) const {246 os << std::string( indent, ' ' )<< "Types:" << std::endl;245 void TypeSubstitution::print( std::ostream &os, Indenter indent ) const { 246 os << indent << "Types:" << std::endl; 247 247 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);248 os << indent+1 << i->first << " -> "; 249 i->second->print( os, indent+2 ); 250 250 os << std::endl; 251 251 } // for 252 os << std::string( indent, ' ' )<< "Non-types:" << std::endl;252 os << indent << "Non-types:" << std::endl; 253 253 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);254 os << indent+1 << i->first << " -> "; 255 i->second->print( os, indent+2 ); 256 256 os << std::endl; 257 257 } // for -
src/SynTree/TypeSubstitution.h
r3628765 rb7778c1 61 61 TypeSubstitution * acceptMutator( Mutator & mutator ); 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: -
src/SynTree/TypeofType.cc
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 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
r3628765 rb7778c1 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 } -
src/Tuples/TupleAssignment.cc
r3628765 rb7778c1 84 84 bool isTuple( Expression *expr ) { 85 85 if ( ! expr ) return false; 86 assert( expr-> has_result());86 assert( expr->result ); 87 87 return dynamic_cast< TupleType * >( expr->get_result()->stripReferences() ); 88 88 } … … 238 238 239 239 ObjectDecl * TupleAssignSpotter::Matcher::newObject( UniqueName & namer, Expression * expr ) { 240 assert( expr-> has_result()&& ! expr->get_result()->isVoid() );240 assert( expr->result && ! expr->get_result()->isVoid() ); 241 241 ObjectDecl * ret = new ObjectDecl( namer.newName(), Type::StorageClasses(), LinkageSpec::Cforall, nullptr, expr->get_result()->clone(), new SingleInit( expr->clone() ) ); 242 242 // if expression type is a reference, don't need to construct anything, a simple initializer is sufficient. -
src/libcfa/concurrency/monitor
r3628765 rb7778c1 88 88 }; 89 89 90 void ?{}(__condition_node_t & this, thread_desc * waiting_thread, unsigned short count, uintptr_t user_info ); 91 void ?{}(__condition_criterion_t & this ); 92 void ?{}(__condition_criterion_t & this, monitor_desc * target, __condition_node_t * owner ); 93 90 94 void ?{}( __condition_blocked_queue_t & ); 91 95 void append( __condition_blocked_queue_t *, __condition_node_t * ); -
src/tests/.expect/castError.txt
r3628765 rb7778c1 1 castError.c:7:1 error: Cannot choose between 3 alternatives for expression Cast of: 1 castError.c:7:1 error: Cannot choose between 3 alternatives for expression 2 Cast of: 2 3 Name: f 4 ... to: 5 charAlternatives are: 6 Cost ( 1, 0, 0, 0 ): Cast of: 7 Variable Expression: f: function 8 accepting unspecified arguments 9 ... returning nothing 3 10 4 to: 5 char 6 Alternatives are: Cost ( 1, 0, 0, 0 ): Cast of: 7 Variable Expression: f: function 8 accepting unspecified arguments 9 returning 10 nothing 11 ... to: 12 char 13 (types: 14 char 15 ) 16 Environment: 17 18 Cost ( 1, 0, 0, 0 ): Cast of: 19 Variable Expression: f: signed int 20 ... to: 21 char 22 (types: 23 char 24 ) 25 Environment: 26 27 Cost ( 1, 0, 0, 0 ): Cast of: 28 Variable Expression: f: double 29 ... to: 30 char 31 (types: 32 char 33 ) 34 Environment: 11 35 12 36 13 to:14 char15 (types:16 char17 )18 Environment:19 20 Cost ( 1, 0, 0, 0 ): Cast of:21 Variable Expression: f: signed int22 23 to:24 char25 (types:26 char27 )28 Environment:29 30 Cost ( 1, 0, 0, 0 ): Cast of:31 Variable Expression: f: double32 33 to:34 char35 (types:36 char37 )38 Environment:39 40 -
src/tests/.expect/scopeErrors.txt
r3628765 rb7778c1 1 1 scopeErrors.c:2:1 error: duplicate object definition for thisIsAnError: signed int 2 2 scopeErrors.c:20:1 error: duplicate function definition for butThisIsAnError: function 3 with parameters 4 double 5 returning 6 _retval_butThisIsAnError: Attribute with name: unused 7 double 8 with body 9 CompoundStmt 3 ... with parameters 4 double 5 ... returning 6 _retval_butThisIsAnError: double 7 ... with attributes: 8 Attribute with name: unused 10 9 10 ... with body 11 CompoundStmt 12
Note: See TracChangeset
for help on using the changeset viewer.