Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Print.cpp

    r20a5977 r94b1f718  
    118118        }
    119119
     120        void print( const std::vector<ast::Label> & labels ) {
     121                if ( labels.empty() ) return;
     122                os << indent << "... Labels: {";
     123                bool isFirst = true;
     124                for ( const Label & l : labels ) {
     125                        if ( isFirst ) { isFirst = false; } else { os << ","; }
     126                        os << l;
     127                }
     128                os << "}" << endl;
     129        }
     130
    120131        void print( const ast::Expr::InferUnion & inferred, unsigned level = 0 ) {
    121132                switch ( inferred.mode ) {
    122133                case ast::Expr::InferUnion::Empty: return;
    123134                case ast::Expr::InferUnion::Slots: {
    124                         os << indent << "with " << inferred.data.resnSlots.size() << " pending inference slots"
    125                            << std::endl;
     135                        os << indent << "with " << inferred.data.resnSlots.size()
     136                           << " pending inference slots" << endl;
    126137                        return;
    127138                }
    128139                case ast::Expr::InferUnion::Params: {
    129                         os << indent << "with inferred parameters " << level << ":" << std::endl;
     140                        os << indent << "with inferred parameters " << level << ":" << endl;
    130141                        ++indent;
    131142                        for ( const auto & i : inferred.data.inferParams ) {
    132143                                os << indent;
    133144                                short_print( Decl::fromId( i.second.decl ) );
    134                                 os << std::endl;
     145                                os << endl;
    135146                                print( i.second.expr->inferred, level+1 );
    136147                        }
     
    143154        void print( const ast::ParameterizedType::ForallList & forall ) {
    144155                if ( forall.empty() ) return;   
    145                 os << "forall" << std::endl;
     156                os << "forall" << endl;
    146157                ++indent;
    147158                printAll( forall );
     
    152163        void print( const std::vector<ptr<Attribute>> & attrs ) {
    153164                if ( attrs.empty() ) return;
    154                 os << "with attributes" << std::endl;
     165                os << "with attributes" << endl;
    155166                ++indent;
    156167                printAll( attrs );
     
    160171        void print( const std::vector<ptr<Expr>> & params ) {
    161172                if ( params.empty() ) return;
    162                 os << std::endl << indent << "... with parameters" << std::endl;
     173                os << endl << indent << "... with parameters" << endl;
    163174                ++indent;
    164175                printAll( params );
     
    226237
    227238                if ( node->env ) {
    228                         os << std::endl << indent << "... with environment:" << std::endl;
     239                        os << endl << indent << "... with environment:" << endl;
    229240                        ++indent;
    230241                        node->env->accept( *this );
    231242                        --indent;
    232243                }
    233                
     244
    234245                if ( node->extension ) {
    235                         os << std::endl << indent << "... with extension";
     246                        os << endl << indent << "... with extension";
    236247                }
    237248        }
     
    378389
    379390        virtual const ast::CompoundStmt * visit( const ast::CompoundStmt * node ) {
    380                 os << "CompoundStmt" << endl;
     391                os << "Compound Statement:" << endl;
    381392                ++indent;
    382393                printAll( node->kids );
     
    396407                os << "Assembler Statement:" << endl;
    397408                ++indent;
    398                 os << indent << "instruction: " << endl << indent;
    399                 node->instruction->accept( *this );
     409                os << indent-1 << "instruction:" << endl << indent;
     410                safe_print( node->instruction );
    400411                if ( ! node->output.empty() ) {
    401                         os << endl << indent+1 << "output: " << endl;
     412                        os << endl << indent << "output:" << endl;
    402413                        printAll( node->output );
    403414                } // if
    404415                if ( ! node->input.empty() ) {
    405                         os << indent+1 << "input: " << endl;
     416                        os << indent << "input:" << endl;
    406417                        printAll( node->input );
    407418                } // if
    408419                if ( ! node->clobber.empty() ) {
    409                         os << indent+1 << "clobber: " << endl;
     420                        os << indent << "clobber:" << endl;
    410421                        printAll( node->clobber );
    411422                } // if
     
    415426
    416427        virtual const ast::Stmt * visit( const ast::DirectiveStmt * node ) {
    417                 os << "GCC Directive:" << node->directive << endl;
     428                os << "GCC Directive: " << node->directive << endl;
    418429                return node;
    419430        }
    420431
    421432        virtual const ast::Stmt * visit( const ast::IfStmt * node ) {
    422                 os << "If on condition: " << endl;
    423                 os << indent+1;
    424                 ++indent;
     433                os << "If on condition:" << endl;
     434                ++indent;
     435                os << indent;
    425436                safe_print( node->cond );
    426437                --indent;
    427438
    428                 if ( !node->inits.empty() ) {
    429                         os << indent << "... with initialization: \n";
    430                         ++indent;
    431                         for ( const Stmt * stmt : node->inits ) {
     439                if ( ! node->inits.empty() ) {
     440                        os << indent << "... with initialization:" << endl;
     441                        ++indent;
     442                        for ( const ast::Stmt * stmt : node->inits ) {
    432443                                os << indent;
    433                                 stmt->accept( *this );
     444                                safe_print( stmt );
    434445                        }
    435446                        --indent;
     
    437448                }
    438449
    439                 os << indent << "... then: " << endl;
     450                os << indent << "... then:" << endl;
    440451
    441452                ++indent;
     
    445456
    446457                if ( node->elsePart != 0 ) {
    447                         os << indent << "... else: " << endl;
     458                        os << indent << "... else:" << endl;
    448459                        ++indent;
    449460                        os << indent;
     
    455466
    456467        virtual const ast::Stmt * visit( const ast::WhileStmt * node ) {
     468                if ( node->isDoWhile ) { os << "Do-"; }
     469                os << "While on condition:" << endl;
     470                ++indent;
     471                safe_print( node->cond );
     472                os << indent-1 << "... with body:" << endl;
     473                safe_print( node->body );
     474
     475                if ( ! node->inits.empty() ) {
     476                        os << indent-1 << "... with inits:" << endl;
     477                        printAll( node->inits );
     478                }
     479                --indent;
     480
    457481                return node;
    458482        }
    459483
    460484        virtual const ast::Stmt * visit( const ast::ForStmt * node ) {
     485                os << "For Statement" << endl;
     486
     487                if ( ! node->inits.empty() ) {
     488                        os << indent << "... initialization:" << endl;
     489                        ++indent;
     490                        for ( const ast::Stmt * stmt : node->inits ) {
     491                                os << indent+1;
     492                                safe_print( stmt );
     493                        }
     494                        --indent;
     495                }
     496
     497                if ( node->cond ) {
     498                        os << indent << "... condition:" << endl;
     499                        ++indent;
     500                        os << indent;
     501                        node->cond->accept( *this );
     502                        --indent;
     503                }
     504
     505                if ( node->inc ) {
     506                        os << indent << "... increment:" << endl;
     507                        ++indent;
     508                        os << indent;
     509                        node->inc->accept( *this );
     510                        --indent;
     511                }
     512
     513                if ( node->body ) {
     514                        os << indent << "... with body:" << endl;
     515                        ++indent;
     516                        os << indent;
     517                        node->body->accept( *this );
     518                        --indent;
     519                }
     520                os << endl;
     521                print( node->labels );
     522
    461523                return node;
    462524        }
    463525
    464526        virtual const ast::Stmt * visit( const ast::SwitchStmt * node ) {
     527                os << "Switch on condition: ";
     528                safe_print( node->cond );
     529                os << endl;
     530
     531                ++indent;
     532                for ( const ast::Stmt * stmt : node->stmts ) {
     533                        stmt->accept( *this );
     534                }
     535                --indent;
     536
    465537                return node;
    466538        }
    467539
    468540        virtual const ast::Stmt * visit( const ast::CaseStmt * node ) {
     541                if ( node->isDefault() ) {
     542                        os << indent << "Default ";
     543                } else {
     544                        os << indent << "Case ";
     545                        safe_print( node->cond );
     546                } // if
     547                os << endl;
     548
     549                ++indent;
     550                for ( const ast::Stmt * stmt : node->stmts ) {
     551                        os << indent;
     552                        stmt->accept( *this );
     553                }
     554                --indent;
     555
    469556                return node;
    470557        }
    471558
    472559        virtual const ast::Stmt * visit( const ast::BranchStmt * node ) {
     560                os << "Branch (" << node->kindName() << ")" << endl;
     561                ++indent;
     562                if ( ! node->target.empty() ) {
     563                        os << indent << "with target: " << node->target << endl;
     564                }
     565
     566                if ( ! node->originalTarget.empty() ) {
     567                        os << indent << "with original target: " << node->originalTarget << endl;
     568                }
     569
     570                if ( node->computedTarget ) {
     571                        os << indent << "with computed target: ";
     572                        node->computedTarget->accept( *this );
     573                        os << endl;
     574                }
     575                --indent;
     576
    473577                return node;
    474578        }
    475579
    476580        virtual const ast::Stmt * visit( const ast::ReturnStmt * node ) {
     581                os << "Return Statement, returning";
     582                if ( node->expr ) {
     583                        ++indent;
     584                        os << ":" << endl << indent;
     585                        node->expr->accept( *this );
     586                        --indent;
     587                } else {
     588                        os << " void";
     589                }
     590                os << endl;
     591
    477592                return node;
    478593        }
     
    503618
    504619        virtual const ast::NullStmt * visit( const ast::NullStmt * node ) {
     620                os << "Null Statement" << endl;
     621                print( node->labels );
     622
    505623                return node;
    506624        }
     
    516634        virtual const ast::Expr * visit( const ast::ApplicationExpr * node ) {
    517635                ++indent;
    518                 os << "Application of" << std::endl << indent;
     636                os << "Application of" << endl << indent;
    519637                safe_print( node->func );
    520                 os << std::endl;
     638                os << endl;
    521639                if ( ! node->args.empty() ) {
    522                         os << indent << "... to arguments" << std::endl;
     640                        os << indent << "... to arguments" << endl;
    523641                        printAll( node->args );
    524642                }
     
    531649        virtual const ast::Expr * visit( const ast::UntypedExpr * node ) {
    532650                ++indent;
    533                 os << "Applying untyped:" << std::endl;
     651                os << "Applying untyped:" << endl;
    534652                os << indent;
    535653                safe_print( node->func );
    536                 os << std::endl << indent-1 << "...to:" << std::endl;
     654                os << endl << indent-1 << "...to:" << endl;
    537655                printAll( node->args );
    538656                --indent;
     
    550668
    551669        virtual const ast::Expr * visit( const ast::AddressExpr * node ) {
    552                 os << "Address of:" << std::endl;
     670                os << "Address of:" << endl;
    553671                ++indent;
    554672                os << indent;
     
    568686        virtual const ast::Expr * visit( const ast::CastExpr * node ) {
    569687                ++indent;
    570                 os << (node->isGenerated ? "Generated" : "Explicit") << " cast of:" << std::endl << indent;
     688                os << (node->isGenerated ? "Generated" : "Explicit") << " cast of:" << endl << indent;
    571689                safe_print( node->arg );
    572                 os << std::endl << indent-1 << "... to:";
     690                os << endl << indent-1 << "... to:";
    573691                if ( ! node->result ) {
    574692                        os << " ";
     
    577695                        os << " nothing";
    578696                } else {
    579                         os << std::endl << indent;
     697                        os << endl << indent;
    580698                        node->result->accept( *this );
    581699                } // if
     
    588706        virtual const ast::Expr * visit( const ast::KeywordCastExpr * node ) {
    589707                ++indent;
    590                 os << "Keyword Cast of:" << std::endl << indent;
     708                os << "Keyword Cast of:" << endl << indent;
    591709                safe_print( node->arg );
    592710                --indent;
    593                 os << std::endl << indent << "... to: " << node->targetString();
     711                os << endl << indent << "... to: " << node->targetString();
    594712                postprint( node );
    595713
     
    599717        virtual const ast::Expr * visit( const ast::VirtualCastExpr * node ) {
    600718                ++indent;
    601                 os << "Virtual Cast of:" << std::endl << indent;
     719                os << "Virtual Cast of:" << endl << indent;
    602720                safe_print( node->arg );
    603                 os << std::endl << indent-1 << "... to:";
     721                os << endl << indent-1 << "... to:";
    604722                if ( ! node->result ) {
    605723                        os << " unknown";
    606724                } else {
    607                         os << std::endl << indent;
     725                        os << endl << indent;
    608726                        node->result->accept( *this );
    609727                }
     
    616734        virtual const ast::Expr * visit( const ast::UntypedMemberExpr * node ) {
    617735                ++indent;
    618                 os << "Untyped Member Expression, with field: " << std::endl << indent;
     736                os << "Untyped Member Expression, with field: " << endl << indent;
    619737                safe_print( node->member );
    620                 os << indent-1 << "... from aggregate:" << std::endl << indent;
     738                os << indent-1 << "... from aggregate:" << endl << indent;
    621739                safe_print( node->aggregate );
    622740                --indent;
     
    628746        virtual const ast::Expr * visit( const ast::MemberExpr * node ) {
    629747                ++indent;
    630                 os << "Member Expression, with field:" << std::endl << indent;
     748                os << "Member Expression, with field:" << endl << indent;
    631749                safe_print( node->member );
    632                 os << std::endl << indent-1 << "... from aggregate:" << std::endl << indent;
     750                os << endl << indent-1 << "... from aggregate:" << endl << indent;
    633751                safe_print( node->aggregate );
    634752                --indent;
     
    659777
    660778        virtual const ast::Expr * visit( const ast::SizeofExpr * node ) {
     779                os << "Sizeof Expression on: ";
     780                ++indent;
     781                if ( node->type ) node->type->accept( *this );
     782                else safe_print( node->expr );
     783                --indent;
     784                postprint( node );
     785
    661786                return node;
    662787        }
    663788
    664789        virtual const ast::Expr * visit( const ast::AlignofExpr * node ) {
     790                os << "Alignof Expression on: ";
     791                ++indent;
     792                if ( node->type ) node->type->accept( *this );
     793                else safe_print( node->expr );
     794                --indent;
     795                postprint( node );
     796               
    665797                return node;
    666798        }
    667799
    668800        virtual const ast::Expr * visit( const ast::UntypedOffsetofExpr * node ) {
     801                os << "Untyped Offsetof Expression on member " << node->member << " of ";
     802                ++indent;
     803                safe_print( node->type );
     804                --indent;
     805                postprint( node );
     806
    669807                return node;
    670808        }
    671809
    672810        virtual const ast::Expr * visit( const ast::OffsetofExpr * node ) {
     811                os << "Offsetof Expression on member " << node->member->name << " of ";
     812                ++indent;
     813                safe_print( node->type );
     814                --indent;
     815                postprint( node );
     816
    673817                return node;
    674818        }
    675819
    676820        virtual const ast::Expr * visit( const ast::OffsetPackExpr * node ) {
     821                os << "Offset Pack Expression on: ";
     822                ++indent;
     823                safe_print( node->type );
     824                --indent;
     825                postprint( node );
     826
    677827                return node;
    678828        }
    679829
    680830        virtual const ast::Expr * visit( const ast::LogicalExpr * node ) {
     831                os << "Short-circuited operation (" << (node->isAnd ? "and" : "or") << ") on: ";
     832                safe_print( node->arg1 );
     833                os << " and ";
     834                safe_print( node->arg2 );
     835                postprint( node );
     836
    681837                return node;
    682838        }
    683839
    684840        virtual const ast::Expr * visit( const ast::ConditionalExpr * node ) {
     841                ++indent;
     842                os << "Conditional expression on:" << endl << indent;
     843                safe_print( node->arg1 );
     844                os << indent-1 << "First alternative:" << endl << indent;
     845                safe_print( node->arg2 );
     846                os << indent-1 << "Second alternative:" << endl << indent;
     847                safe_print( node->arg3 );
     848                --indent;
     849                postprint( node );
     850
    685851                return node;
    686852        }
    687853
    688854        virtual const ast::Expr * visit( const ast::CommaExpr * node ) {
     855                ++indent;
     856                os << "Comma Expression:" << endl << indent;
     857                safe_print( node->arg1 );
     858                os << endl << indent;
     859                safe_print( node->arg2 );
     860                --indent;
     861                postprint( node );
     862
    689863                return node;
    690864        }
    691865
    692866        virtual const ast::Expr * visit( const ast::TypeExpr * node ) {
     867                safe_print( node->type );
     868                postprint( node );
     869
    693870                return node;
    694871        }
    695872
    696873        virtual const ast::Expr * visit( const ast::AsmExpr * node ) {
     874                os << "Asm Expression:" << endl;
     875                ++indent;
     876                if ( node->inout ) node->inout->accept( *this );
     877                if ( node->constraint ) node->constraint->accept( *this );
     878                if ( node->operand ) node->operand->accept( *this );
     879                --indent;
     880               
    697881                return node;
    698882        }
    699883
    700884        virtual const ast::Expr * visit( const ast::ImplicitCopyCtorExpr * node ) {
     885                ++indent;
     886                os << "Implicit Copy Constructor Expression:" << endl << indent;
     887                safe_print( node->callExpr );
     888                os << endl << indent-1 << "... with temporaries:" << endl;
     889                printAll( node->tempDecls );
     890                os << endl << indent-1 << "... with return temporaries:" << endl;
     891                printAll( node->returnDecls );
     892                --indent;
     893                postprint( node );
     894
    701895                return node;
    702896        }
    703897
    704898        virtual const ast::Expr * visit( const ast::ConstructorExpr * node ) {
     899                os <<  "Constructor Expression:" << endl << indent+1;
     900                indent += 2;
     901                safe_print( node->callExpr );
     902                indent -= 2;
     903                postprint( node );
     904
    705905                return node;
    706906        }
    707907
    708908        virtual const ast::Expr * visit( const ast::CompoundLiteralExpr * node ) {
     909                ++indent;
     910                os << "Compound Literal Expression: " << endl << indent;
     911                safe_print( node->result );
     912                os << indent;
     913                safe_print( node->init );
     914                --indent;
     915                postprint( node );
     916
    709917                return node;
    710918        }
    711919
    712920        virtual const ast::Expr * visit( const ast::RangeExpr * node ) {
     921                os << "Range Expression: ";
     922                safe_print( node->low );
     923                os << " ... ";
     924                safe_print( node->high );
     925                postprint( node );
     926
    713927                return node;
    714928        }
    715929
    716930        virtual const ast::Expr * visit( const ast::UntypedTupleExpr * node ) {
     931                os << "Untyped Tuple:" << endl;
     932                ++indent;
     933                printAll( node->exprs );
     934                --indent;
     935                postprint( node );
     936
    717937                return node;
    718938        }
    719939
    720940        virtual const ast::Expr * visit( const ast::TupleExpr * node ) {
     941                os << "Tuple:" << endl;
     942                ++indent;
     943                printAll( node->exprs );
     944                --indent;
     945                postprint( node );
     946
    721947                return node;
    722948        }
    723949
    724950        virtual const ast::Expr * visit( const ast::TupleIndexExpr * node ) {
     951                os << "Tuple Index Expression, with tuple:" << endl;
     952                ++indent;
     953                os << indent;
     954                safe_print( node->tuple );
     955                os << indent << "with index: " << node->index << endl;
     956                --indent;
     957                postprint( node );
     958               
    725959                return node;
    726960        }
    727961
    728962        virtual const ast::Expr * visit( const ast::TupleAssignExpr * node ) {
     963                os << "Tuple Assignment Expression, with stmt expr:" << endl;
     964                ++indent;
     965                os << indent;
     966                safe_print( node->stmtExpr );
     967                --indent;
     968                postprint( node );
     969
    729970                return node;
    730971        }
    731972
    732973        virtual const ast::Expr * visit( const ast::StmtExpr * node ) {
     974                ++indent;
     975                os << "Statement Expression:" << endl << indent;
     976                safe_print( node->stmts );
     977                if ( ! node->returnDecls.empty() ) {
     978                        os << indent << "... with returnDecls: ";
     979                        printAll( node->returnDecls );
     980                }
     981                if ( ! node->dtors.empty() ) {
     982                        os << indent << "... with dtors: ";
     983                        printAll( node->dtors );
     984                }
     985                --indent;
     986                postprint( node );
     987
    733988                return node;
    734989        }
    735990
    736991        virtual const ast::Expr * visit( const ast::UniqueExpr * node ) {
     992                ++indent;
     993                os << "Unique Expression with id: " << node->id << endl << indent;
     994                safe_print( node->expr );
     995                if ( node->object ) {
     996                        os << indent-1 << "... with decl: ";
     997                        short_print( node->object );
     998                }
     999                --indent;
     1000                postprint( node );
     1001
    7371002                return node;
    7381003        }
    7391004
    7401005        virtual const ast::Expr * visit( const ast::UntypedInitExpr * node ) {
     1006                ++indent;
     1007                os << "Untyped Init Expression" << endl << indent;
     1008                safe_print( node->expr );
     1009                if ( ! node->initAlts.empty() ) {
     1010                        for ( const InitAlternative & alt : node->initAlts ) {
     1011                                os << indent <<  "InitAlternative: ";
     1012                                safe_print( alt.type );
     1013                                safe_print( alt.designation );
     1014                        }
     1015                }
     1016                --indent;
     1017
    7411018                return node;
    7421019        }
    7431020
    7441021        virtual const ast::Expr * visit( const ast::InitExpr * node ) {
     1022                ++indent;
     1023                os << "Init Expression" << endl << indent;
     1024                safe_print( node->expr );
     1025                os << indent << "... with designation: ";
     1026                safe_print( node->designation );
     1027                --indent;
     1028
    7451029                return node;
    7461030        }
    7471031
    7481032        virtual const ast::Expr * visit( const ast::DeletedExpr * node ) {
     1033                ++indent;
     1034                os << "Deleted Expression" << endl << indent;
     1035                safe_print( node->expr );
     1036                os << endl << indent << "... deleted by: ";
     1037                safe_print( node->deleteStmt );
     1038                --indent;
     1039
    7491040                return node;
    7501041        }
    7511042
    7521043        virtual const ast::Expr * visit( const ast::DefaultArgExpr * node ) {
     1044                ++indent;
     1045                os << "Default Argument Expression" << endl << indent;
     1046                safe_print( node->expr );
     1047                --indent;
     1048
    7531049                return node;
    7541050        }
    7551051
    7561052        virtual const ast::Expr * visit( const ast::GenericExpr * node ) {
     1053                ++indent;
     1054                os << "C11 _Generic Expression" << endl << indent;
     1055                safe_print( node->control );
     1056                os << endl << indent << "... with associations:" << endl;
     1057                for ( const auto & assoc : node->associations ) {
     1058                        os << indent;
     1059                        if ( assoc.type ) {
     1060                                os << "... type: ";
     1061                                assoc.type->accept( *this );
     1062                                os << endl << indent << "... expression: ";
     1063                                safe_print( assoc.expr );
     1064                        } else {
     1065                                os << "... default: ";
     1066                                safe_print( assoc.expr );
     1067                        }
     1068                        os << endl;
     1069                }
     1070                --indent;
     1071
    7571072                return node;
    7581073        }
     
    8281143                preprint( node );
    8291144                ++indent;
    830                 os << "Qualified Type:" << std::endl << indent;
     1145                os << "Qualified Type:" << endl << indent;
    8311146                safe_print( node->parent );
    832                 os << std::endl << indent;
     1147                os << endl << indent;
    8331148                safe_print( node->child );
    834                 os << std::endl;
     1149                os << endl;
    8351150                --indent;
    8361151
     
    8411156                preprint( node );
    8421157               
    843                 os << "function" << std::endl;
     1158                os << "function" << endl;
    8441159                if ( ! node->params.empty() ) {
    845                         os << indent << "... with parameters" << std::endl;
     1160                        os << indent << "... with parameters" << endl;
    8461161                        ++indent;
    8471162                        printAll( node->params );
    8481163                        if ( node->isVarArgs ) {
    849                                 os << indent << "and a variable number of other arguments" << std::endl;
     1164                                os << indent << "and a variable number of other arguments" << endl;
    8501165                        }
    8511166                        --indent;
    8521167                } else if ( node->isVarArgs ) {
    853                         os << indent+1 << "accepting unspecified arguments" << std::endl;
     1168                        os << indent+1 << "accepting unspecified arguments" << endl;
    8541169                }
    8551170
    8561171                os << indent << "... returning";
    8571172                if ( node->returns.empty() ) {
    858                         os << " nothing" << std::endl;
     1173                        os << " nothing" << endl;
    8591174                } else {
    860                         os << std::endl;
     1175                        os << endl;
    8611176                        ++indent;
    8621177                        printAll( node->returns );
     
    9191234        virtual const ast::Type * visit( const ast::TupleType * node ) {
    9201235                preprint( node );
    921                 os << "tuple of types" << std::endl;
     1236                os << "tuple of types" << endl;
    9221237                ++indent;
    9231238                printAll( node->types );
     
    9621277        virtual const ast::Designation * visit( const ast::Designation * node ) {
    9631278                if ( node->designators.empty() ) return node;
    964                 os << "... designated by: " << std::endl;
     1279                os << "... designated by: " << endl;
    9651280                ++indent;
    9661281                for ( const ast::Expr * d : node->designators ) {
    9671282                        os << indent;
    9681283                        d->accept( *this );
    969                         os << std::endl;
     1284                        os << endl;
    9701285                }
    9711286                --indent;
     
    9801295
    9811296        virtual const ast::Init * visit( const ast::ListInit * node ) {
    982                 os << "Compound initializer: " << std::endl;
     1297                os << "Compound initializer: " << endl;
    9831298                ++indent;
    9841299                for ( auto p : group_iterate( node->designations, node->initializers ) ) {
     
    9871302                        os << indent;
    9881303                        init->accept( *this );
    989                         os << std::endl;
     1304                        os << endl;
    9901305                        if ( ! d->designators.empty() ) {
    9911306                                os << indent;
     
    9981313
    9991314        virtual const ast::Init * visit( const ast::ConstructorInit * node ) {
    1000                 os << "Constructor initializer: " << std::endl;
     1315                os << "Constructor initializer: " << endl;
    10011316                if ( node->ctor ) {
    10021317                        os << indent << "... initially constructed with ";
     
    10261341                os << "Attribute with name: " << node->name;
    10271342                if ( node->params.empty() ) return node;
    1028                 os << " with parameters: " << std::endl;
     1343                os << " with parameters: " << endl;
    10291344                ++indent;
    10301345                printAll( node->params );
     
    10341349
    10351350        virtual const ast::TypeSubstitution * visit( const ast::TypeSubstitution * node ) {
    1036                 os << indent << "Types:" << std::endl;
     1351                os << indent << "Types:" << endl;
    10371352                for ( const auto& i : *node ) {
    10381353                        os << indent+1 << i.first << " -> ";
     
    10401355                        safe_print( i.second );
    10411356                        indent -= 2;
    1042                         os << std::endl;
    1043                 }
    1044                 os << indent << "Non-types:" << std::endl;
     1357                        os << endl;
     1358                }
     1359                os << indent << "Non-types:" << endl;
    10451360                for ( auto i = node->beginVar(); i != node->endVar(); ++i ) {
    10461361                        os << indent+1 << i->first << " -> ";
     
    10481363                        safe_print( i->second );
    10491364                        indent -= 2;
    1050                         os << std::endl;
     1365                        os << endl;
    10511366                }
    10521367                return node;
Note: See TracChangeset for help on using the changeset viewer.