Changes in src/AST/Print.cpp [94b1f718:20a5977]
- File:
-
- 1 edited
-
src/AST/Print.cpp (modified) (33 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/AST/Print.cpp
r94b1f718 r20a5977 118 118 } 119 119 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 131 120 void print( const ast::Expr::InferUnion & inferred, unsigned level = 0 ) { 132 121 switch ( inferred.mode ) { 133 122 case ast::Expr::InferUnion::Empty: return; 134 123 case ast::Expr::InferUnion::Slots: { 135 os << indent << "with " << inferred.data.resnSlots.size() 136 << " pending inference slots" <<endl;124 os << indent << "with " << inferred.data.resnSlots.size() << " pending inference slots" 125 << std::endl; 137 126 return; 138 127 } 139 128 case ast::Expr::InferUnion::Params: { 140 os << indent << "with inferred parameters " << level << ":" << endl;129 os << indent << "with inferred parameters " << level << ":" << std::endl; 141 130 ++indent; 142 131 for ( const auto & i : inferred.data.inferParams ) { 143 132 os << indent; 144 133 short_print( Decl::fromId( i.second.decl ) ); 145 os << endl;134 os << std::endl; 146 135 print( i.second.expr->inferred, level+1 ); 147 136 } … … 154 143 void print( const ast::ParameterizedType::ForallList & forall ) { 155 144 if ( forall.empty() ) return; 156 os << "forall" << endl;145 os << "forall" << std::endl; 157 146 ++indent; 158 147 printAll( forall ); … … 163 152 void print( const std::vector<ptr<Attribute>> & attrs ) { 164 153 if ( attrs.empty() ) return; 165 os << "with attributes" << endl;154 os << "with attributes" << std::endl; 166 155 ++indent; 167 156 printAll( attrs ); … … 171 160 void print( const std::vector<ptr<Expr>> & params ) { 172 161 if ( params.empty() ) return; 173 os << endl << indent << "... with parameters" <<endl;162 os << std::endl << indent << "... with parameters" << std::endl; 174 163 ++indent; 175 164 printAll( params ); … … 237 226 238 227 if ( node->env ) { 239 os << endl << indent << "... with environment:" <<endl;228 os << std::endl << indent << "... with environment:" << std::endl; 240 229 ++indent; 241 230 node->env->accept( *this ); 242 231 --indent; 243 232 } 244 233 245 234 if ( node->extension ) { 246 os << endl << indent << "... with extension";235 os << std::endl << indent << "... with extension"; 247 236 } 248 237 } … … 389 378 390 379 virtual const ast::CompoundStmt * visit( const ast::CompoundStmt * node ) { 391 os << "Compound Statement:" << endl;380 os << "CompoundStmt" << endl; 392 381 ++indent; 393 382 printAll( node->kids ); … … 407 396 os << "Assembler Statement:" << endl; 408 397 ++indent; 409 os << indent -1 << "instruction:" << endl << indent;410 safe_print( node->instruction);398 os << indent << "instruction: " << endl << indent; 399 node->instruction->accept( *this ); 411 400 if ( ! node->output.empty() ) { 412 os << endl << indent << "output:" << endl;401 os << endl << indent+1 << "output: " << endl; 413 402 printAll( node->output ); 414 403 } // if 415 404 if ( ! node->input.empty() ) { 416 os << indent << "input:" << endl;405 os << indent+1 << "input: " << endl; 417 406 printAll( node->input ); 418 407 } // if 419 408 if ( ! node->clobber.empty() ) { 420 os << indent << "clobber:" << endl;409 os << indent+1 << "clobber: " << endl; 421 410 printAll( node->clobber ); 422 411 } // if … … 426 415 427 416 virtual const ast::Stmt * visit( const ast::DirectiveStmt * node ) { 428 os << "GCC Directive: " << node->directive << endl;417 os << "GCC Directive:" << node->directive << endl; 429 418 return node; 430 419 } 431 420 432 421 virtual const ast::Stmt * visit( const ast::IfStmt * node ) { 433 os << "If on condition: " << endl;434 ++indent;435 os <<indent;422 os << "If on condition: " << endl; 423 os << indent+1; 424 ++indent; 436 425 safe_print( node->cond ); 437 426 --indent; 438 427 439 if ( ! node->inits.empty() ) {440 os << indent << "... with initialization: " << endl;441 ++indent; 442 for ( const ast::Stmt * stmt : node->inits ) {428 if ( !node->inits.empty() ) { 429 os << indent << "... with initialization: \n"; 430 ++indent; 431 for ( const Stmt * stmt : node->inits ) { 443 432 os << indent; 444 s afe_print( stmt);433 stmt->accept( *this ); 445 434 } 446 435 --indent; … … 448 437 } 449 438 450 os << indent << "... then: " << endl;439 os << indent << "... then: " << endl; 451 440 452 441 ++indent; … … 456 445 457 446 if ( node->elsePart != 0 ) { 458 os << indent << "... else: " << endl;447 os << indent << "... else: " << endl; 459 448 ++indent; 460 449 os << indent; … … 466 455 467 456 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 481 457 return node; 482 458 } 483 459 484 460 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 523 461 return node; 524 462 } 525 463 526 464 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 537 465 return node; 538 466 } 539 467 540 468 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 } // if547 os << endl;548 549 ++indent;550 for ( const ast::Stmt * stmt : node->stmts ) {551 os << indent;552 stmt->accept( *this );553 }554 --indent;555 556 469 return node; 557 470 } 558 471 559 472 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 577 473 return node; 578 474 } 579 475 580 476 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 592 477 return node; 593 478 } … … 618 503 619 504 virtual const ast::NullStmt * visit( const ast::NullStmt * node ) { 620 os << "Null Statement" << endl;621 print( node->labels );622 623 505 return node; 624 506 } … … 634 516 virtual const ast::Expr * visit( const ast::ApplicationExpr * node ) { 635 517 ++indent; 636 os << "Application of" << endl << indent;518 os << "Application of" << std::endl << indent; 637 519 safe_print( node->func ); 638 os << endl;520 os << std::endl; 639 521 if ( ! node->args.empty() ) { 640 os << indent << "... to arguments" << endl;522 os << indent << "... to arguments" << std::endl; 641 523 printAll( node->args ); 642 524 } … … 649 531 virtual const ast::Expr * visit( const ast::UntypedExpr * node ) { 650 532 ++indent; 651 os << "Applying untyped:" << endl;533 os << "Applying untyped:" << std::endl; 652 534 os << indent; 653 535 safe_print( node->func ); 654 os << endl << indent-1 << "...to:" <<endl;536 os << std::endl << indent-1 << "...to:" << std::endl; 655 537 printAll( node->args ); 656 538 --indent; … … 668 550 669 551 virtual const ast::Expr * visit( const ast::AddressExpr * node ) { 670 os << "Address of:" << endl;552 os << "Address of:" << std::endl; 671 553 ++indent; 672 554 os << indent; … … 686 568 virtual const ast::Expr * visit( const ast::CastExpr * node ) { 687 569 ++indent; 688 os << (node->isGenerated ? "Generated" : "Explicit") << " cast of:" << endl << indent;570 os << (node->isGenerated ? "Generated" : "Explicit") << " cast of:" << std::endl << indent; 689 571 safe_print( node->arg ); 690 os << endl << indent-1 << "... to:";572 os << std::endl << indent-1 << "... to:"; 691 573 if ( ! node->result ) { 692 574 os << " "; … … 695 577 os << " nothing"; 696 578 } else { 697 os << endl << indent;579 os << std::endl << indent; 698 580 node->result->accept( *this ); 699 581 } // if … … 706 588 virtual const ast::Expr * visit( const ast::KeywordCastExpr * node ) { 707 589 ++indent; 708 os << "Keyword Cast of:" << endl << indent;590 os << "Keyword Cast of:" << std::endl << indent; 709 591 safe_print( node->arg ); 710 592 --indent; 711 os << endl << indent << "... to: " << node->targetString();593 os << std::endl << indent << "... to: " << node->targetString(); 712 594 postprint( node ); 713 595 … … 717 599 virtual const ast::Expr * visit( const ast::VirtualCastExpr * node ) { 718 600 ++indent; 719 os << "Virtual Cast of:" << endl << indent;601 os << "Virtual Cast of:" << std::endl << indent; 720 602 safe_print( node->arg ); 721 os << endl << indent-1 << "... to:";603 os << std::endl << indent-1 << "... to:"; 722 604 if ( ! node->result ) { 723 605 os << " unknown"; 724 606 } else { 725 os << endl << indent;607 os << std::endl << indent; 726 608 node->result->accept( *this ); 727 609 } … … 734 616 virtual const ast::Expr * visit( const ast::UntypedMemberExpr * node ) { 735 617 ++indent; 736 os << "Untyped Member Expression, with field: " << endl << indent;618 os << "Untyped Member Expression, with field: " << std::endl << indent; 737 619 safe_print( node->member ); 738 os << indent-1 << "... from aggregate:" << endl << indent;620 os << indent-1 << "... from aggregate:" << std::endl << indent; 739 621 safe_print( node->aggregate ); 740 622 --indent; … … 746 628 virtual const ast::Expr * visit( const ast::MemberExpr * node ) { 747 629 ++indent; 748 os << "Member Expression, with field:" << endl << indent;630 os << "Member Expression, with field:" << std::endl << indent; 749 631 safe_print( node->member ); 750 os << endl << indent-1 << "... from aggregate:" <<endl << indent;632 os << std::endl << indent-1 << "... from aggregate:" << std::endl << indent; 751 633 safe_print( node->aggregate ); 752 634 --indent; … … 777 659 778 660 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 786 661 return node; 787 662 } 788 663 789 664 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 797 665 return node; 798 666 } 799 667 800 668 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 807 669 return node; 808 670 } 809 671 810 672 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 817 673 return node; 818 674 } 819 675 820 676 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 827 677 return node; 828 678 } 829 679 830 680 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 837 681 return node; 838 682 } 839 683 840 684 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 851 685 return node; 852 686 } 853 687 854 688 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 863 689 return node; 864 690 } 865 691 866 692 virtual const ast::Expr * visit( const ast::TypeExpr * node ) { 867 safe_print( node->type );868 postprint( node );869 870 693 return node; 871 694 } 872 695 873 696 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 881 697 return node; 882 698 } 883 699 884 700 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 895 701 return node; 896 702 } 897 703 898 704 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 905 705 return node; 906 706 } 907 707 908 708 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 917 709 return node; 918 710 } 919 711 920 712 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 927 713 return node; 928 714 } 929 715 930 716 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 937 717 return node; 938 718 } 939 719 940 720 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 947 721 return node; 948 722 } 949 723 950 724 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 959 725 return node; 960 726 } 961 727 962 728 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 970 729 return node; 971 730 } 972 731 973 732 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 988 733 return node; 989 734 } 990 735 991 736 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 1002 737 return node; 1003 738 } 1004 739 1005 740 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 1018 741 return node; 1019 742 } 1020 743 1021 744 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 1029 745 return node; 1030 746 } 1031 747 1032 748 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 1040 749 return node; 1041 750 } 1042 751 1043 752 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 1049 753 return node; 1050 754 } 1051 755 1052 756 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 1072 757 return node; 1073 758 } … … 1143 828 preprint( node ); 1144 829 ++indent; 1145 os << "Qualified Type:" << endl << indent;830 os << "Qualified Type:" << std::endl << indent; 1146 831 safe_print( node->parent ); 1147 os << endl << indent;832 os << std::endl << indent; 1148 833 safe_print( node->child ); 1149 os << endl;834 os << std::endl; 1150 835 --indent; 1151 836 … … 1156 841 preprint( node ); 1157 842 1158 os << "function" << endl;843 os << "function" << std::endl; 1159 844 if ( ! node->params.empty() ) { 1160 os << indent << "... with parameters" << endl;845 os << indent << "... with parameters" << std::endl; 1161 846 ++indent; 1162 847 printAll( node->params ); 1163 848 if ( node->isVarArgs ) { 1164 os << indent << "and a variable number of other arguments" << endl;849 os << indent << "and a variable number of other arguments" << std::endl; 1165 850 } 1166 851 --indent; 1167 852 } else if ( node->isVarArgs ) { 1168 os << indent+1 << "accepting unspecified arguments" << endl;853 os << indent+1 << "accepting unspecified arguments" << std::endl; 1169 854 } 1170 855 1171 856 os << indent << "... returning"; 1172 857 if ( node->returns.empty() ) { 1173 os << " nothing" << endl;858 os << " nothing" << std::endl; 1174 859 } else { 1175 os << endl;860 os << std::endl; 1176 861 ++indent; 1177 862 printAll( node->returns ); … … 1234 919 virtual const ast::Type * visit( const ast::TupleType * node ) { 1235 920 preprint( node ); 1236 os << "tuple of types" << endl;921 os << "tuple of types" << std::endl; 1237 922 ++indent; 1238 923 printAll( node->types ); … … 1277 962 virtual const ast::Designation * visit( const ast::Designation * node ) { 1278 963 if ( node->designators.empty() ) return node; 1279 os << "... designated by: " << endl;964 os << "... designated by: " << std::endl; 1280 965 ++indent; 1281 966 for ( const ast::Expr * d : node->designators ) { 1282 967 os << indent; 1283 968 d->accept( *this ); 1284 os << endl;969 os << std::endl; 1285 970 } 1286 971 --indent; … … 1295 980 1296 981 virtual const ast::Init * visit( const ast::ListInit * node ) { 1297 os << "Compound initializer: " << endl;982 os << "Compound initializer: " << std::endl; 1298 983 ++indent; 1299 984 for ( auto p : group_iterate( node->designations, node->initializers ) ) { … … 1302 987 os << indent; 1303 988 init->accept( *this ); 1304 os << endl;989 os << std::endl; 1305 990 if ( ! d->designators.empty() ) { 1306 991 os << indent; … … 1313 998 1314 999 virtual const ast::Init * visit( const ast::ConstructorInit * node ) { 1315 os << "Constructor initializer: " << endl;1000 os << "Constructor initializer: " << std::endl; 1316 1001 if ( node->ctor ) { 1317 1002 os << indent << "... initially constructed with "; … … 1341 1026 os << "Attribute with name: " << node->name; 1342 1027 if ( node->params.empty() ) return node; 1343 os << " with parameters: " << endl;1028 os << " with parameters: " << std::endl; 1344 1029 ++indent; 1345 1030 printAll( node->params ); … … 1349 1034 1350 1035 virtual const ast::TypeSubstitution * visit( const ast::TypeSubstitution * node ) { 1351 os << indent << "Types:" << endl;1036 os << indent << "Types:" << std::endl; 1352 1037 for ( const auto& i : *node ) { 1353 1038 os << indent+1 << i.first << " -> "; … … 1355 1040 safe_print( i.second ); 1356 1041 indent -= 2; 1357 os << endl;1358 } 1359 os << indent << "Non-types:" << endl;1042 os << std::endl; 1043 } 1044 os << indent << "Non-types:" << std::endl; 1360 1045 for ( auto i = node->beginVar(); i != node->endVar(); ++i ) { 1361 1046 os << indent+1 << i->first << " -> "; … … 1363 1048 safe_print( i->second ); 1364 1049 indent -= 2; 1365 os << endl;1050 os << std::endl; 1366 1051 } 1367 1052 return node;
Note:
See TracChangeset
for help on using the changeset viewer.