Changes in / [cef7430:6b2d444]
- Files:
-
- 4 deleted
- 14 edited
-
libcfa/src/concurrency/io.cfa (modified) (1 diff)
-
libcfa/src/concurrency/kernel.cfa (modified) (2 diffs)
-
libcfa/src/concurrency/stats.cfa (modified) (3 diffs)
-
libcfa/src/concurrency/stats.hfa (modified) (1 diff)
-
src/AST/Copy.hpp (modified) (2 diffs)
-
src/AST/Node.hpp (modified) (1 diff)
-
src/AST/Pass.impl.hpp (modified) (121 diffs)
-
src/ControlStruct/HoistControlDecls.cpp (deleted)
-
src/ControlStruct/HoistControlDecls.hpp (deleted)
-
src/ControlStruct/module.mk (modified) (1 diff)
-
src/InitTweak/InitTweak.cc (modified) (2 diffs)
-
src/InitTweak/InitTweak.h (modified) (2 diffs)
-
src/SymTab/Validate.cc (modified) (2 diffs)
-
src/SymTab/Validate.h (modified) (1 diff)
-
src/Validate/Autogen.cpp (deleted)
-
src/Validate/Autogen.hpp (deleted)
-
src/Validate/module.mk (modified) (1 diff)
-
src/main.cc (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/io.cfa
rcef7430 r6b2d444 306 306 ctx->proc->io.pending = true; 307 307 ctx->proc->io.dirty = true; 308 if(sq.to_submit > 30) { 309 __tls_stats()->io.flush.full++; 310 __cfa_io_flush( ctx->proc, 0 ); 311 } 312 if(!lazy) { 313 __tls_stats()->io.flush.eager++; 308 if(sq.to_submit > 30 || !lazy) { 314 309 __cfa_io_flush( ctx->proc, 0 ); 315 310 } -
libcfa/src/concurrency/kernel.cfa
rcef7430 r6b2d444 196 196 197 197 if( !readyThread ) { 198 __tls_stats()->io.flush.idle++;199 198 __cfa_io_flush( this, 0 ); 200 199 … … 245 244 246 245 if(this->io.pending && !this->io.dirty) { 247 __tls_stats()->io.flush.dirty++;248 246 __cfa_io_flush( this, 0 ); 249 247 } -
libcfa/src/concurrency/stats.cfa
rcef7430 r6b2d444 45 45 stats->io.submit.slow = 0; 46 46 stats->io.flush.external = 0; 47 stats->io.flush.dirty = 0;48 stats->io.flush.full = 0;49 stats->io.flush.idle = 0;50 stats->io.flush.eager = 0;51 47 stats->io.calls.flush = 0; 52 48 stats->io.calls.submitted = 0; … … 111 107 tally_one( &cltr->io.submit.slow , &proc->io.submit.slow ); 112 108 tally_one( &cltr->io.flush.external , &proc->io.flush.external ); 113 tally_one( &cltr->io.flush.dirty , &proc->io.flush.dirty );114 tally_one( &cltr->io.flush.full , &proc->io.flush.full );115 tally_one( &cltr->io.flush.idle , &proc->io.flush.idle );116 tally_one( &cltr->io.flush.eager , &proc->io.flush.eager );117 109 tally_one( &cltr->io.calls.flush , &proc->io.calls.flush ); 118 110 tally_one( &cltr->io.calls.submitted , &proc->io.calls.submitted ); … … 192 184 if(io.alloc.fail || io.alloc.revoke || io.alloc.block) 193 185 sstr | "- failures : " | eng3(io.alloc.fail) | "oom, " | eng3(io.alloc.revoke) | "rvk, " | eng3(io.alloc.block) | "blk"; 194 //if(io.flush.external)195 //sstr | "- flush external : " | eng3(io.flush.external);186 if(io.flush.external) 187 sstr | "- flush external : " | eng3(io.flush.external); 196 188 197 189 double avgsubs = ((double)io.calls.submitted) / io.calls.flush; 198 190 double avgcomp = ((double)io.calls.completed) / io.calls.drain; 199 191 sstr | "- syscll : " 200 | " sub " | eng3(io.calls. submitted) | "/" | eng3(io.calls.flush) | "(" | ws(3, 3, avgsubs) | "/flush)"201 | " - cmp " | eng3(io.calls. completed) | "/" | eng3(io.calls.drain) | "(" | ws(3, 3, avgcomp) | "/drain)"192 | " sub " | eng3(io.calls.flush) | "/" | eng3(io.calls.submitted) | "(" | ws(3, 3, avgsubs) | "/flush)" 193 | " - cmp " | eng3(io.calls.drain) | "/" | eng3(io.calls.completed) | "(" | ws(3, 3, avgcomp) | "/drain)" 202 194 | " - " | eng3(io.calls.errors.busy) | " EBUSY"; 203 sstr | " - sub: " | eng3(io.flush.full) | "full, " | eng3(io.flush.dirty) | "drty, " | eng3(io.flush.idle) | "idle, " | eng3(io.flush.eager) | "eagr, " | eng3(io.flush.external) | "ext";204 195 sstr | "- ops blk: " 205 196 | " sk rd: " | eng3(io.ops.sockread) | "epll: " | eng3(io.ops.epllread) -
libcfa/src/concurrency/stats.hfa
rcef7430 r6b2d444 91 91 struct { 92 92 volatile uint64_t external; 93 volatile uint64_t dirty;94 volatile uint64_t full;95 volatile uint64_t idle;96 volatile uint64_t eager;97 93 } flush; 98 94 struct { -
src/AST/Copy.hpp
rcef7430 r6b2d444 10 10 // Created On : Wed Jul 10 16:13:00 2019 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Wed Dec 15 11:07:00 202113 // Update Count : 312 // Last Modified On : Thr Nov 11 9:22:00 2021 13 // Update Count : 2 14 14 // 15 15 … … 52 52 Node * deepCopy<Node>( const Node * localRoot ); 53 53 54 template<typename node_t, enum Node::ref_type ref_t>55 node_t * shallowCopy( const ptr_base<node_t, ref_t> & localRoot ) {56 return shallowCopy( localRoot.get() );57 }58 59 template<typename node_t, enum Node::ref_type ref_t>60 node_t * deepCopy( const ptr_base<node_t, ref_t> & localRoot ) {61 return deepCopy( localRoot.get() );62 }63 64 54 } 65 55 -
src/AST/Node.hpp
rcef7430 r6b2d444 188 188 } 189 189 190 ptr_base & operator=( const node_t * node ) {191 assign( node );192 return *this;193 }194 195 190 template<typename o_node_t> 196 191 ptr_base & operator=( const o_node_t * node ) { -
src/AST/Pass.impl.hpp
rcef7430 r6b2d444 33 33 /* call the implementation of the previsit of this pass */ \ 34 34 __pass::previsit( core, node, 0 ); 35 36 #define VISIT( code... ) \ 37 /* if this node should visit its children */ \ 38 if ( __visit_children() ) { \ 39 /* visit the children */ \ 40 code \ 41 } 35 42 36 43 #define VISIT_END( type, node ) \ … … 445 452 VISIT_START( node ); 446 453 447 if ( __visit_children() ) {454 VISIT( 448 455 { 449 456 guard_symtab guard { *this }; … … 453 460 maybe_accept( node, &ObjectDecl::bitfieldWidth ); 454 461 maybe_accept( node, &ObjectDecl::attributes ); 455 }462 ) 456 463 457 464 __pass::symtab::addId( core, 0, node ); … … 468 475 __pass::symtab::addId( core, 0, node ); 469 476 470 if ( __visit_children() ) { 471 maybe_accept( node, &FunctionDecl::withExprs ); 472 } 477 VISIT(maybe_accept( node, &FunctionDecl::withExprs );) 473 478 { 474 479 // with clause introduces a level of scope (for the with expression members). … … 488 493 } }; 489 494 __pass::symtab::addId( core, 0, func ); 490 if ( __visit_children() ) {495 VISIT( 491 496 // parameter declarations 492 497 maybe_accept( node, &FunctionDecl::params ); … … 504 509 maybe_accept( node, &FunctionDecl::stmts ); 505 510 maybe_accept( node, &FunctionDecl::attributes ); 506 }511 ) 507 512 } 508 513 } … … 521 526 __pass::symtab::addStructFwd( core, 0, node ); 522 527 523 if ( __visit_children() ){528 VISIT({ 524 529 guard_symtab guard { * this }; 525 530 maybe_accept( node, &StructDecl::params ); 526 531 maybe_accept( node, &StructDecl::members ); 527 532 maybe_accept( node, &StructDecl::attributes ); 528 } 533 }) 529 534 530 535 // this addition replaces the forward declaration … … 543 548 __pass::symtab::addUnionFwd( core, 0, node ); 544 549 545 if ( __visit_children() ){550 VISIT({ 546 551 guard_symtab guard { * this }; 547 552 maybe_accept( node, &UnionDecl::params ); 548 553 maybe_accept( node, &UnionDecl::members ); 549 554 maybe_accept( node, &UnionDecl::attributes ); 550 } 555 }) 551 556 552 557 __pass::symtab::addUnion( core, 0, node ); … … 563 568 __pass::symtab::addEnum( core, 0, node ); 564 569 565 if ( __visit_children() ) {570 VISIT( 566 571 // unlike structs, traits, and unions, enums inject their members into the global scope 567 572 maybe_accept( node, &EnumDecl::params ); 568 573 maybe_accept( node, &EnumDecl::members ); 569 574 maybe_accept( node, &EnumDecl::attributes ); 570 }575 ) 571 576 572 577 VISIT_END( Decl, node ); … … 579 584 VISIT_START( node ); 580 585 581 if ( __visit_children() ){586 VISIT({ 582 587 guard_symtab guard { *this }; 583 588 maybe_accept( node, &TraitDecl::params ); 584 589 maybe_accept( node, &TraitDecl::members ); 585 590 maybe_accept( node, &TraitDecl::attributes ); 586 } 591 }) 587 592 588 593 __pass::symtab::addTrait( core, 0, node ); … … 597 602 VISIT_START( node ); 598 603 599 if ( __visit_children() ){604 VISIT({ 600 605 guard_symtab guard { *this }; 601 606 maybe_accept( node, &TypeDecl::base ); 602 } 607 }) 603 608 604 609 // see A NOTE ON THE ORDER OF TRAVERSAL, above … … 607 612 __pass::symtab::addType( core, 0, node ); 608 613 609 if ( __visit_children() ) {614 VISIT( 610 615 maybe_accept( node, &TypeDecl::assertions ); 611 616 … … 614 619 maybe_accept( node, &TypeDecl::init ); 615 620 } 616 }621 ) 617 622 618 623 VISIT_END( Decl, node ); … … 625 630 VISIT_START( node ); 626 631 627 if ( __visit_children() ){632 VISIT({ 628 633 guard_symtab guard { *this }; 629 634 maybe_accept( node, &TypedefDecl::base ); 630 } 635 }) 631 636 632 637 __pass::symtab::addType( core, 0, node ); 633 638 634 if ( __visit_children() ) { 635 maybe_accept( node, &TypedefDecl::assertions ); 636 } 639 VISIT( maybe_accept( node, &TypedefDecl::assertions ); ) 637 640 638 641 VISIT_END( Decl, node ); … … 645 648 VISIT_START( node ); 646 649 647 if ( __visit_children() ) {650 VISIT( 648 651 maybe_accept( node, &AsmDecl::stmt ); 649 }652 ) 650 653 651 654 VISIT_END( AsmDecl, node ); … … 658 661 VISIT_START( node ); 659 662 660 if ( __visit_children() ) {663 VISIT( 661 664 maybe_accept( node, &DirectiveDecl::stmt ); 662 }665 ) 663 666 664 667 VISIT_END( DirectiveDecl, node ); … … 671 674 VISIT_START( node ); 672 675 673 if ( __visit_children() ) {676 VISIT( 674 677 maybe_accept( node, &StaticAssertDecl::cond ); 675 678 maybe_accept( node, &StaticAssertDecl::msg ); 676 }679 ) 677 680 678 681 VISIT_END( StaticAssertDecl, node ); … … 684 687 const ast::CompoundStmt * ast::Pass< core_t >::visit( const ast::CompoundStmt * node ) { 685 688 VISIT_START( node ); 686 687 if ( __visit_children() ) { 689 VISIT( 688 690 // Do not enter (or leave) a new scope if atFunctionTop. Remember to save the result. 689 691 auto guard1 = makeFuncGuard( [this, enterScope = !this->atFunctionTop]() { … … 702 704 guard_scope guard3 { *this }; 703 705 maybe_accept( node, &CompoundStmt::kids ); 704 } 705 706 ) 706 707 VISIT_END( CompoundStmt, node ); 707 708 } … … 713 714 VISIT_START( node ); 714 715 715 if ( __visit_children() ) {716 VISIT( 716 717 maybe_accept( node, &ExprStmt::expr ); 717 }718 ) 718 719 719 720 VISIT_END( Stmt, node ); … … 726 727 VISIT_START( node ) 727 728 728 if ( __visit_children() ) {729 VISIT( 729 730 maybe_accept( node, &AsmStmt::instruction ); 730 731 maybe_accept( node, &AsmStmt::output ); 731 732 maybe_accept( node, &AsmStmt::input ); 732 733 maybe_accept( node, &AsmStmt::clobber ); 733 }734 ) 734 735 735 736 VISIT_END( Stmt, node ); … … 751 752 VISIT_START( node ); 752 753 753 if ( __visit_children() ){754 VISIT({ 754 755 // if statements introduce a level of scope (for the initialization) 755 756 guard_symtab guard { *this }; … … 758 759 maybe_accept_as_compound( node, &IfStmt::thenPart ); 759 760 maybe_accept_as_compound( node, &IfStmt::elsePart ); 760 } 761 }) 761 762 762 763 VISIT_END( Stmt, node ); … … 769 770 VISIT_START( node ); 770 771 771 if ( __visit_children() ){772 VISIT({ 772 773 // while statements introduce a level of scope (for the initialization) 773 774 guard_symtab guard { *this }; … … 775 776 maybe_accept( node, &WhileStmt::cond ); 776 777 maybe_accept_as_compound( node, &WhileStmt::body ); 777 } 778 }) 778 779 779 780 VISIT_END( Stmt, node ); … … 786 787 VISIT_START( node ); 787 788 788 if ( __visit_children() ){789 VISIT({ 789 790 // for statements introduce a level of scope (for the initialization) 790 791 guard_symtab guard { *this }; … … 794 795 maybe_accept( node, &ForStmt::inc ); 795 796 maybe_accept_as_compound( node, &ForStmt::body ); 796 } 797 }) 797 798 798 799 VISIT_END( Stmt, node ); … … 805 806 VISIT_START( node ); 806 807 807 if ( __visit_children() ) {808 VISIT( 808 809 maybe_accept( node, &SwitchStmt::cond ); 809 810 maybe_accept( node, &SwitchStmt::stmts ); 810 }811 ) 811 812 812 813 VISIT_END( Stmt, node ); … … 819 820 VISIT_START( node ); 820 821 821 if ( __visit_children() ) {822 VISIT( 822 823 maybe_accept( node, &CaseStmt::cond ); 823 824 maybe_accept( node, &CaseStmt::stmts ); 824 }825 ) 825 826 826 827 VISIT_END( Stmt, node ); … … 841 842 VISIT_START( node ); 842 843 843 if ( __visit_children() ) {844 VISIT( 844 845 maybe_accept( node, &ReturnStmt::expr ); 845 }846 ) 846 847 847 848 VISIT_END( Stmt, node ); … … 854 855 VISIT_START( node ); 855 856 856 if ( __visit_children() ) {857 VISIT( 857 858 maybe_accept( node, &ThrowStmt::expr ); 858 859 maybe_accept( node, &ThrowStmt::target ); 859 }860 ) 860 861 861 862 VISIT_END( Stmt, node ); … … 868 869 VISIT_START( node ); 869 870 870 if ( __visit_children() ) {871 VISIT( 871 872 maybe_accept( node, &TryStmt::body ); 872 873 maybe_accept( node, &TryStmt::handlers ); 873 874 maybe_accept( node, &TryStmt::finally ); 874 }875 ) 875 876 876 877 VISIT_END( Stmt, node ); … … 883 884 VISIT_START( node ); 884 885 885 if ( __visit_children() ){886 VISIT({ 886 887 // catch statements introduce a level of scope (for the caught exception) 887 888 guard_symtab guard { *this }; … … 889 890 maybe_accept( node, &CatchStmt::cond ); 890 891 maybe_accept_as_compound( node, &CatchStmt::body ); 891 } 892 }) 892 893 893 894 VISIT_END( Stmt, node ); … … 900 901 VISIT_START( node ); 901 902 902 if ( __visit_children() ) {903 VISIT( 903 904 maybe_accept( node, &FinallyStmt::body ); 904 }905 ) 905 906 906 907 VISIT_END( Stmt, node ); … … 913 914 VISIT_START( node ); 914 915 915 if ( __visit_children() ) {916 VISIT( 916 917 maybe_accept( node, &SuspendStmt::then ); 917 }918 ) 918 919 919 920 VISIT_END( Stmt, node ); … … 933 934 // } 934 935 935 if ( __visit_children() ){936 VISIT({ 936 937 std::vector<WaitForStmt::Clause> new_clauses; 937 938 new_clauses.reserve( node->clauses.size() ); … … 964 965 node = n; 965 966 } 966 } 967 }) 967 968 968 969 #define maybe_accept(field) \ … … 976 977 } 977 978 978 if ( __visit_children() ) {979 VISIT( 979 980 maybe_accept( timeout.time ); 980 981 maybe_accept( timeout.stmt ); … … 982 983 maybe_accept( orElse.stmt ); 983 984 maybe_accept( orElse.cond ); 984 }985 ) 985 986 986 987 #undef maybe_accept … … 995 996 VISIT_START( node ); 996 997 997 if ( __visit_children() ) {998 VISIT( 998 999 maybe_accept( node, &WithStmt::exprs ); 999 1000 { … … 1003 1004 maybe_accept( node, &WithStmt::stmt ); 1004 1005 } 1005 } 1006 1006 ) 1007 1007 VISIT_END( Stmt, node ); 1008 1008 } … … 1022 1022 VISIT_START( node ); 1023 1023 1024 if ( __visit_children() ) {1024 VISIT( 1025 1025 maybe_accept( node, &DeclStmt::decl ); 1026 }1026 ) 1027 1027 1028 1028 VISIT_END( Stmt, node ); … … 1037 1037 // For now this isn't visited, it is unclear if this causes problem 1038 1038 // if all tests are known to pass, remove this code 1039 if ( __visit_children() ) {1039 VISIT( 1040 1040 maybe_accept( node, &ImplicitCtorDtorStmt::callStmt ); 1041 }1041 ) 1042 1042 1043 1043 VISIT_END( Stmt, node ); … … 1050 1050 VISIT_START( node ); 1051 1051 1052 <<<<<<< HEAD1053 1052 VISIT( 1054 1053 maybe_accept( node, &MutexStmt::mutexObjs ); … … 1060 1059 } 1061 1060 ) 1062 =======1063 if ( __visit_children() ) {1064 // mutex statements introduce a level of scope (for the initialization)1065 guard_symtab guard { *this };1066 maybe_accept( node, &MutexStmt::stmt );1067 maybe_accept( node, &MutexStmt::mutexObjs );1068 }1069 >>>>>>> e21f2536b7495654ded040259b42b7e2325b83601070 1061 1071 1062 VISIT_END( Stmt, node ); … … 1078 1069 VISIT_START( node ); 1079 1070 1080 if ( __visit_children() ) {1071 VISIT( 1081 1072 { 1082 1073 guard_symtab guard { *this }; … … 1085 1076 maybe_accept( node, &ApplicationExpr::func ); 1086 1077 maybe_accept( node, &ApplicationExpr::args ); 1087 }1078 ) 1088 1079 1089 1080 VISIT_END( Expr, node ); … … 1096 1087 VISIT_START( node ); 1097 1088 1098 if ( __visit_children() ) {1089 VISIT( 1099 1090 { 1100 1091 guard_symtab guard { *this }; … … 1103 1094 1104 1095 maybe_accept( node, &UntypedExpr::args ); 1105 }1096 ) 1106 1097 1107 1098 VISIT_END( Expr, node ); … … 1114 1105 VISIT_START( node ); 1115 1106 1116 if ( __visit_children() ){1107 VISIT({ 1117 1108 guard_symtab guard { *this }; 1118 1109 maybe_accept( node, &NameExpr::result ); 1119 } 1110 }) 1120 1111 1121 1112 VISIT_END( Expr, node ); … … 1128 1119 VISIT_START( node ); 1129 1120 1130 if ( __visit_children() ) { 1131 { 1121 VISIT({ 1132 1122 guard_symtab guard { *this }; 1133 1123 maybe_accept( node, &CastExpr::result ); 1134 1124 } 1135 1125 maybe_accept( node, &CastExpr::arg ); 1136 }1126 ) 1137 1127 1138 1128 VISIT_END( Expr, node ); … … 1145 1135 VISIT_START( node ); 1146 1136 1147 if ( __visit_children() ) { 1148 { 1137 VISIT({ 1149 1138 guard_symtab guard { *this }; 1150 1139 maybe_accept( node, &KeywordCastExpr::result ); 1151 1140 } 1152 1141 maybe_accept( node, &KeywordCastExpr::arg ); 1153 }1142 ) 1154 1143 1155 1144 VISIT_END( Expr, node ); … … 1162 1151 VISIT_START( node ); 1163 1152 1164 if ( __visit_children() ) { 1165 { 1153 VISIT({ 1166 1154 guard_symtab guard { *this }; 1167 1155 maybe_accept( node, &VirtualCastExpr::result ); 1168 1156 } 1169 1157 maybe_accept( node, &VirtualCastExpr::arg ); 1170 }1158 ) 1171 1159 1172 1160 VISIT_END( Expr, node ); … … 1179 1167 VISIT_START( node ); 1180 1168 1181 if ( __visit_children() ) { 1182 { 1169 VISIT({ 1183 1170 guard_symtab guard { *this }; 1184 1171 maybe_accept( node, &AddressExpr::result ); 1185 1172 } 1186 1173 maybe_accept( node, &AddressExpr::arg ); 1187 }1174 ) 1188 1175 1189 1176 VISIT_END( Expr, node ); … … 1196 1183 VISIT_START( node ); 1197 1184 1198 if ( __visit_children() ){1185 VISIT({ 1199 1186 guard_symtab guard { *this }; 1200 1187 maybe_accept( node, &LabelAddressExpr::result ); 1201 } 1188 }) 1202 1189 1203 1190 VISIT_END( Expr, node ); … … 1210 1197 VISIT_START( node ); 1211 1198 1212 if ( __visit_children() ) { 1213 { 1199 VISIT({ 1214 1200 guard_symtab guard { *this }; 1215 1201 maybe_accept( node, &UntypedMemberExpr::result ); … … 1217 1203 maybe_accept( node, &UntypedMemberExpr::aggregate ); 1218 1204 maybe_accept( node, &UntypedMemberExpr::member ); 1219 }1205 ) 1220 1206 1221 1207 VISIT_END( Expr, node ); … … 1228 1214 VISIT_START( node ); 1229 1215 1230 if ( __visit_children() ) { 1231 { 1216 VISIT({ 1232 1217 guard_symtab guard { *this }; 1233 1218 maybe_accept( node, &MemberExpr::result ); 1234 1219 } 1235 1220 maybe_accept( node, &MemberExpr::aggregate ); 1236 }1221 ) 1237 1222 1238 1223 VISIT_END( Expr, node ); … … 1245 1230 VISIT_START( node ); 1246 1231 1247 if ( __visit_children() ){1232 VISIT({ 1248 1233 guard_symtab guard { *this }; 1249 1234 maybe_accept( node, &VariableExpr::result ); 1250 } 1235 }) 1251 1236 1252 1237 VISIT_END( Expr, node ); … … 1259 1244 VISIT_START( node ); 1260 1245 1261 if ( __visit_children() ){1246 VISIT({ 1262 1247 guard_symtab guard { *this }; 1263 1248 maybe_accept( node, &ConstantExpr::result ); 1264 } 1249 }) 1265 1250 1266 1251 VISIT_END( Expr, node ); … … 1273 1258 VISIT_START( node ); 1274 1259 1275 if ( __visit_children() ) { 1276 { 1260 VISIT({ 1277 1261 guard_symtab guard { *this }; 1278 1262 maybe_accept( node, &SizeofExpr::result ); … … 1283 1267 maybe_accept( node, &SizeofExpr::expr ); 1284 1268 } 1285 }1269 ) 1286 1270 1287 1271 VISIT_END( Expr, node ); … … 1294 1278 VISIT_START( node ); 1295 1279 1296 if ( __visit_children() ) { 1297 { 1280 VISIT({ 1298 1281 guard_symtab guard { *this }; 1299 1282 maybe_accept( node, &AlignofExpr::result ); … … 1304 1287 maybe_accept( node, &AlignofExpr::expr ); 1305 1288 } 1306 }1289 ) 1307 1290 1308 1291 VISIT_END( Expr, node ); … … 1315 1298 VISIT_START( node ); 1316 1299 1317 if ( __visit_children() ) { 1318 { 1300 VISIT({ 1319 1301 guard_symtab guard { *this }; 1320 1302 maybe_accept( node, &UntypedOffsetofExpr::result ); 1321 1303 } 1322 1304 maybe_accept( node, &UntypedOffsetofExpr::type ); 1323 }1305 ) 1324 1306 1325 1307 VISIT_END( Expr, node ); … … 1332 1314 VISIT_START( node ); 1333 1315 1334 if ( __visit_children() ) { 1335 { 1316 VISIT({ 1336 1317 guard_symtab guard { *this }; 1337 1318 maybe_accept( node, &OffsetofExpr::result ); 1338 1319 } 1339 1320 maybe_accept( node, &OffsetofExpr::type ); 1340 }1321 ) 1341 1322 1342 1323 VISIT_END( Expr, node ); … … 1349 1330 VISIT_START( node ); 1350 1331 1351 if ( __visit_children() ) { 1352 { 1332 VISIT({ 1353 1333 guard_symtab guard { *this }; 1354 1334 maybe_accept( node, &OffsetPackExpr::result ); 1355 1335 } 1356 1336 maybe_accept( node, &OffsetPackExpr::type ); 1357 }1337 ) 1358 1338 1359 1339 VISIT_END( Expr, node ); … … 1366 1346 VISIT_START( node ); 1367 1347 1368 if ( __visit_children() ) { 1369 { 1348 VISIT({ 1370 1349 guard_symtab guard { *this }; 1371 1350 maybe_accept( node, &LogicalExpr::result ); … … 1373 1352 maybe_accept( node, &LogicalExpr::arg1 ); 1374 1353 maybe_accept( node, &LogicalExpr::arg2 ); 1375 }1354 ) 1376 1355 1377 1356 VISIT_END( Expr, node ); … … 1384 1363 VISIT_START( node ); 1385 1364 1386 if ( __visit_children() ) { 1387 { 1365 VISIT({ 1388 1366 guard_symtab guard { *this }; 1389 1367 maybe_accept( node, &ConditionalExpr::result ); … … 1392 1370 maybe_accept( node, &ConditionalExpr::arg2 ); 1393 1371 maybe_accept( node, &ConditionalExpr::arg3 ); 1394 }1372 ) 1395 1373 1396 1374 VISIT_END( Expr, node ); … … 1403 1381 VISIT_START( node ); 1404 1382 1405 if ( __visit_children() ) { 1406 { 1383 VISIT({ 1407 1384 guard_symtab guard { *this }; 1408 1385 maybe_accept( node, &CommaExpr::result ); … … 1410 1387 maybe_accept( node, &CommaExpr::arg1 ); 1411 1388 maybe_accept( node, &CommaExpr::arg2 ); 1412 }1389 ) 1413 1390 1414 1391 VISIT_END( Expr, node ); … … 1421 1398 VISIT_START( node ); 1422 1399 1423 if ( __visit_children() ) { 1424 { 1400 VISIT({ 1425 1401 guard_symtab guard { *this }; 1426 1402 maybe_accept( node, &TypeExpr::result ); 1427 1403 } 1428 1404 maybe_accept( node, &TypeExpr::type ); 1429 }1405 ) 1430 1406 1431 1407 VISIT_END( Expr, node ); … … 1438 1414 VISIT_START( node ); 1439 1415 1440 if ( __visit_children() ) { 1441 { 1416 VISIT({ 1442 1417 guard_symtab guard { *this }; 1443 1418 maybe_accept( node, &AsmExpr::result ); … … 1445 1420 maybe_accept( node, &AsmExpr::constraint ); 1446 1421 maybe_accept( node, &AsmExpr::operand ); 1447 }1422 ) 1448 1423 1449 1424 VISIT_END( Expr, node ); … … 1456 1431 VISIT_START( node ); 1457 1432 1458 if ( __visit_children() ) { 1459 { 1433 VISIT({ 1460 1434 guard_symtab guard { *this }; 1461 1435 maybe_accept( node, &ImplicitCopyCtorExpr::result ); 1462 1436 } 1463 1437 maybe_accept( node, &ImplicitCopyCtorExpr::callExpr ); 1464 }1438 ) 1465 1439 1466 1440 VISIT_END( Expr, node ); … … 1473 1447 VISIT_START( node ); 1474 1448 1475 if ( __visit_children() ) { 1476 { 1449 VISIT({ 1477 1450 guard_symtab guard { *this }; 1478 1451 maybe_accept( node, &ConstructorExpr::result ); 1479 1452 } 1480 1453 maybe_accept( node, &ConstructorExpr::callExpr ); 1481 }1454 ) 1482 1455 1483 1456 VISIT_END( Expr, node ); … … 1490 1463 VISIT_START( node ); 1491 1464 1492 if ( __visit_children() ) { 1493 { 1465 VISIT({ 1494 1466 guard_symtab guard { *this }; 1495 1467 maybe_accept( node, &CompoundLiteralExpr::result ); 1496 1468 } 1497 1469 maybe_accept( node, &CompoundLiteralExpr::init ); 1498 }1470 ) 1499 1471 1500 1472 VISIT_END( Expr, node ); … … 1507 1479 VISIT_START( node ); 1508 1480 1509 if ( __visit_children() ) { 1510 { 1481 VISIT({ 1511 1482 guard_symtab guard { *this }; 1512 1483 maybe_accept( node, &RangeExpr::result ); … … 1514 1485 maybe_accept( node, &RangeExpr::low ); 1515 1486 maybe_accept( node, &RangeExpr::high ); 1516 }1487 ) 1517 1488 1518 1489 VISIT_END( Expr, node ); … … 1525 1496 VISIT_START( node ); 1526 1497 1527 if ( __visit_children() ) { 1528 { 1498 VISIT({ 1529 1499 guard_symtab guard { *this }; 1530 1500 maybe_accept( node, &UntypedTupleExpr::result ); 1531 1501 } 1532 1502 maybe_accept( node, &UntypedTupleExpr::exprs ); 1533 }1503 ) 1534 1504 1535 1505 VISIT_END( Expr, node ); … … 1542 1512 VISIT_START( node ); 1543 1513 1544 if ( __visit_children() ) { 1545 { 1514 VISIT({ 1546 1515 guard_symtab guard { *this }; 1547 1516 maybe_accept( node, &TupleExpr::result ); 1548 1517 } 1549 1518 maybe_accept( node, &TupleExpr::exprs ); 1550 }1519 ) 1551 1520 1552 1521 VISIT_END( Expr, node ); … … 1559 1528 VISIT_START( node ); 1560 1529 1561 if ( __visit_children() ) { 1562 { 1530 VISIT({ 1563 1531 guard_symtab guard { *this }; 1564 1532 maybe_accept( node, &TupleIndexExpr::result ); 1565 1533 } 1566 1534 maybe_accept( node, &TupleIndexExpr::tuple ); 1567 }1535 ) 1568 1536 1569 1537 VISIT_END( Expr, node ); … … 1576 1544 VISIT_START( node ); 1577 1545 1578 if ( __visit_children() ) { 1579 { 1546 VISIT({ 1580 1547 guard_symtab guard { *this }; 1581 1548 maybe_accept( node, &TupleAssignExpr::result ); 1582 1549 } 1583 1550 maybe_accept( node, &TupleAssignExpr::stmtExpr ); 1584 }1551 ) 1585 1552 1586 1553 VISIT_END( Expr, node ); … … 1593 1560 VISIT_START( node ); 1594 1561 1595 if ( __visit_children() ) { 1596 // don't want statements from outer CompoundStmts to be added to this StmtExpr 1562 VISIT(// don't want statements from outer CompoundStmts to be added to this StmtExpr 1597 1563 // get the stmts that will need to be spliced in 1598 1564 auto stmts_before = __pass::stmtsToAddBefore( core, 0); … … 1611 1577 maybe_accept( node, &StmtExpr::returnDecls ); 1612 1578 maybe_accept( node, &StmtExpr::dtors ); 1613 }1579 ) 1614 1580 1615 1581 VISIT_END( Expr, node ); … … 1622 1588 VISIT_START( node ); 1623 1589 1624 if ( __visit_children() ) { 1625 { 1590 VISIT({ 1626 1591 guard_symtab guard { *this }; 1627 1592 maybe_accept( node, &UniqueExpr::result ); 1628 1593 } 1629 1594 maybe_accept( node, &UniqueExpr::expr ); 1630 }1595 ) 1631 1596 1632 1597 VISIT_END( Expr, node ); … … 1639 1604 VISIT_START( node ); 1640 1605 1641 if ( __visit_children() ) { 1642 { 1606 VISIT({ 1643 1607 guard_symtab guard { *this }; 1644 1608 maybe_accept( node, &UntypedInitExpr::result ); … … 1646 1610 maybe_accept( node, &UntypedInitExpr::expr ); 1647 1611 // not currently visiting initAlts, but this doesn't matter since this node is only used in the resolver. 1648 }1612 ) 1649 1613 1650 1614 VISIT_END( Expr, node ); … … 1657 1621 VISIT_START( node ); 1658 1622 1659 if ( __visit_children() ) { 1660 { 1623 VISIT({ 1661 1624 guard_symtab guard { *this }; 1662 1625 maybe_accept( node, &InitExpr::result ); … … 1664 1627 maybe_accept( node, &InitExpr::expr ); 1665 1628 maybe_accept( node, &InitExpr::designation ); 1666 }1629 ) 1667 1630 1668 1631 VISIT_END( Expr, node ); … … 1675 1638 VISIT_START( node ); 1676 1639 1677 if ( __visit_children() ) { 1678 { 1640 VISIT({ 1679 1641 guard_symtab guard { *this }; 1680 1642 maybe_accept( node, &DeletedExpr::result ); … … 1682 1644 maybe_accept( node, &DeletedExpr::expr ); 1683 1645 // don't visit deleteStmt, because it is a pointer to somewhere else in the tree. 1684 }1646 ) 1685 1647 1686 1648 VISIT_END( Expr, node ); … … 1693 1655 VISIT_START( node ); 1694 1656 1695 if ( __visit_children() ) { 1696 { 1657 VISIT({ 1697 1658 guard_symtab guard { *this }; 1698 1659 maybe_accept( node, &DefaultArgExpr::result ); 1699 1660 } 1700 1661 maybe_accept( node, &DefaultArgExpr::expr ); 1701 }1662 ) 1702 1663 1703 1664 VISIT_END( Expr, node ); … … 1710 1671 VISIT_START( node ); 1711 1672 1712 if ( __visit_children() ) { 1713 { 1673 VISIT({ 1714 1674 guard_symtab guard { *this }; 1715 1675 maybe_accept( node, &GenericExpr::result ); … … 1740 1700 node = n; 1741 1701 } 1742 }1702 ) 1743 1703 1744 1704 VISIT_END( Expr, node ); … … 1769 1729 VISIT_START( node ); 1770 1730 1771 if ( __visit_children() ) {1731 VISIT( 1772 1732 // xxx - should PointerType visit/mutate dimension? 1773 1733 maybe_accept( node, &PointerType::base ); 1774 }1734 ) 1775 1735 1776 1736 VISIT_END( Type, node ); … … 1783 1743 VISIT_START( node ); 1784 1744 1785 if ( __visit_children() ) {1745 VISIT( 1786 1746 maybe_accept( node, &ArrayType::dimension ); 1787 1747 maybe_accept( node, &ArrayType::base ); 1788 }1748 ) 1789 1749 1790 1750 VISIT_END( Type, node ); … … 1797 1757 VISIT_START( node ); 1798 1758 1799 if ( __visit_children() ) {1759 VISIT( 1800 1760 maybe_accept( node, &ReferenceType::base ); 1801 }1761 ) 1802 1762 1803 1763 VISIT_END( Type, node ); … … 1810 1770 VISIT_START( node ); 1811 1771 1812 if ( __visit_children() ) {1772 VISIT( 1813 1773 maybe_accept( node, &QualifiedType::parent ); 1814 1774 maybe_accept( node, &QualifiedType::child ); 1815 }1775 ) 1816 1776 1817 1777 VISIT_END( Type, node ); … … 1824 1784 VISIT_START( node ); 1825 1785 1826 if ( __visit_children() ){1786 VISIT({ 1827 1787 // guard_forall_subs forall_guard { *this, node }; 1828 1788 // mutate_forall( node ); … … 1830 1790 maybe_accept( node, &FunctionType::returns ); 1831 1791 maybe_accept( node, &FunctionType::params ); 1832 } 1792 }) 1833 1793 1834 1794 VISIT_END( Type, node ); … … 1843 1803 __pass::symtab::addStruct( core, 0, node->name ); 1844 1804 1845 if ( __visit_children() ){1805 VISIT({ 1846 1806 guard_symtab guard { *this }; 1847 1807 maybe_accept( node, &StructInstType::params ); 1848 } 1808 }) 1849 1809 1850 1810 VISIT_END( Type, node ); … … 1859 1819 __pass::symtab::addUnion( core, 0, node->name ); 1860 1820 1861 if ( __visit_children() ){1821 VISIT({ 1862 1822 guard_symtab guard { *this }; 1863 1823 maybe_accept( node, &UnionInstType::params ); 1864 } 1824 }) 1865 1825 1866 1826 VISIT_END( Type, node ); … … 1873 1833 VISIT_START( node ); 1874 1834 1875 if ( __visit_children() ){1835 VISIT({ 1876 1836 maybe_accept( node, &EnumInstType::params ); 1877 } 1837 }) 1878 1838 1879 1839 VISIT_END( Type, node ); … … 1886 1846 VISIT_START( node ); 1887 1847 1888 if ( __visit_children() ){1848 VISIT({ 1889 1849 maybe_accept( node, &TraitInstType::params ); 1890 } 1850 }) 1891 1851 1892 1852 VISIT_END( Type, node ); … … 1899 1859 VISIT_START( node ); 1900 1860 1901 if ( __visit_children() ) {1861 VISIT( 1902 1862 { 1903 1863 maybe_accept( node, &TypeInstType::params ); … … 1905 1865 // ensure that base re-bound if doing substitution 1906 1866 __pass::forall::replace( core, 0, node ); 1907 }1867 ) 1908 1868 1909 1869 VISIT_END( Type, node ); … … 1916 1876 VISIT_START( node ); 1917 1877 1918 if ( __visit_children() ) {1878 VISIT( 1919 1879 maybe_accept( node, &TupleType::types ); 1920 1880 maybe_accept( node, &TupleType::members ); 1921 }1881 ) 1922 1882 1923 1883 VISIT_END( Type, node ); … … 1930 1890 VISIT_START( node ); 1931 1891 1932 if ( __visit_children() ) {1892 VISIT( 1933 1893 maybe_accept( node, &TypeofType::expr ); 1934 }1894 ) 1935 1895 1936 1896 VISIT_END( Type, node ); … … 1943 1903 VISIT_START( node ); 1944 1904 1945 if ( __visit_children() ) {1905 VISIT( 1946 1906 maybe_accept( node, &VTableType::base ); 1947 }1907 ) 1948 1908 1949 1909 VISIT_END( Type, node ); … … 1993 1953 VISIT_START( node ); 1994 1954 1995 if ( __visit_children() ) { 1996 maybe_accept( node, &Designation::designators ); 1997 } 1955 VISIT( maybe_accept( node, &Designation::designators ); ) 1998 1956 1999 1957 VISIT_END( Designation, node ); … … 2006 1964 VISIT_START( node ); 2007 1965 2008 if ( __visit_children() ) {1966 VISIT( 2009 1967 maybe_accept( node, &SingleInit::value ); 2010 }1968 ) 2011 1969 2012 1970 VISIT_END( Init, node ); … … 2019 1977 VISIT_START( node ); 2020 1978 2021 if ( __visit_children() ) {1979 VISIT( 2022 1980 maybe_accept( node, &ListInit::designations ); 2023 1981 maybe_accept( node, &ListInit::initializers ); 2024 }1982 ) 2025 1983 2026 1984 VISIT_END( Init, node ); … … 2033 1991 VISIT_START( node ); 2034 1992 2035 if ( __visit_children() ) {1993 VISIT( 2036 1994 maybe_accept( node, &ConstructorInit::ctor ); 2037 1995 maybe_accept( node, &ConstructorInit::dtor ); 2038 1996 maybe_accept( node, &ConstructorInit::init ); 2039 }1997 ) 2040 1998 2041 1999 VISIT_END( Init, node ); … … 2048 2006 VISIT_START( node ); 2049 2007 2050 if ( __visit_children() ) {2008 VISIT( 2051 2009 maybe_accept( node, &Attribute::params ); 2052 }2010 ) 2053 2011 2054 2012 VISIT_END( Attribute, node ); … … 2061 2019 VISIT_START( node ); 2062 2020 2063 if ( __visit_children() ) {2021 VISIT( 2064 2022 { 2065 2023 bool mutated = false; … … 2077 2035 } 2078 2036 } 2079 }2037 ) 2080 2038 2081 2039 VISIT_END( TypeSubstitution, node ); … … 2083 2041 2084 2042 #undef VISIT_START 2043 #undef VISIT 2085 2044 #undef VISIT_END -
src/ControlStruct/module.mk
rcef7430 r6b2d444 22 22 ControlStruct/ForExprMutator.cc \ 23 23 ControlStruct/ForExprMutator.h \ 24 ControlStruct/HoistControlDecls.cpp \25 ControlStruct/HoistControlDecls.hpp \26 24 ControlStruct/LabelFixer.cc \ 27 25 ControlStruct/LabelFixer.h \ -
src/InitTweak/InitTweak.cc
rcef7430 r6b2d444 10 10 // Created On : Fri May 13 11:26:36 2016 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Mon Dec 6 13:21:00 202113 // Update Count : 2012 // Last Modified On : Fri Nov 19 19:22:00 2021 13 // Update Count : 19 14 14 // 15 15 … … 1191 1191 } 1192 1192 1193 bool isAssignment( const ast::FunctionDecl * decl ) { 1194 return isAssignment( decl->name ) && isCopyFunction( decl ); 1195 } 1196 1197 bool isDestructor( const ast::FunctionDecl * decl ) { 1198 return isDestructor( decl->name ); 1199 } 1200 1201 bool isDefaultConstructor( const ast::FunctionDecl * decl ) { 1202 return isConstructor( decl->name ) && 1 == decl->params.size(); 1203 } 1204 1205 bool isCopyConstructor( const ast::FunctionDecl * decl ) { 1206 return isConstructor( decl->name ) && 2 == decl->params.size(); 1207 } 1208 1209 bool isCopyFunction( const ast::FunctionDecl * decl ) { 1210 const ast::FunctionType * ftype = decl->type; 1211 if ( ftype->params.size() != 2 ) return false; 1212 1213 const ast::Type * t1 = getPointerBase( ftype->params.front() ); 1214 if ( ! t1 ) return false; 1215 const ast::Type * t2 = ftype->params.back(); 1216 1217 return ResolvExpr::typesCompatibleIgnoreQualifiers( t1, t2, ast::SymbolTable{} ); 1218 } 1193 bool isCopyFunction( const ast::FunctionDecl * decl ) { 1194 const ast::FunctionType * ftype = decl->type; 1195 if ( ftype->params.size() != 2 ) return false; 1196 1197 const ast::Type * t1 = getPointerBase( ftype->params.front() ); 1198 if ( ! t1 ) return false; 1199 const ast::Type * t2 = ftype->params.back(); 1200 1201 return ResolvExpr::typesCompatibleIgnoreQualifiers( t1, t2, ast::SymbolTable{} ); 1202 } 1219 1203 1220 1204 const FunctionDecl * isAssignment( const Declaration * decl ) { -
src/InitTweak/InitTweak.h
rcef7430 r6b2d444 10 10 // Created On : Fri May 13 11:26:36 2016 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Mon Dec 6 13:20:00 202113 // Update Count : 812 // Last Modified On : Fri Nov 19 14:18:00 2021 13 // Update Count : 7 14 14 // 15 15 … … 31 31 const FunctionDecl * isCopyConstructor( const Declaration * decl ); 32 32 const FunctionDecl * isCopyFunction( const Declaration * decl, const std::string & fname ); 33 bool isAssignment( const ast::FunctionDecl * decl );34 bool isDestructor( const ast::FunctionDecl * decl );35 bool isDefaultConstructor( const ast::FunctionDecl * decl );36 bool isCopyConstructor( const ast::FunctionDecl * decl );37 33 bool isCopyFunction( const ast::FunctionDecl * decl ); 38 34 -
src/SymTab/Validate.cc
rcef7430 r6b2d444 453 453 } 454 454 455 void decayForallPointers( std::list< Declaration * > & translationUnit ) {456 PassVisitor<ForallPointerDecay_old> fpd;457 acceptAll( translationUnit, fpd );458 }459 460 455 void validate( std::list< Declaration * > &translationUnit, __attribute__((unused)) bool doDebug ) { 461 456 validate_A( translationUnit ); … … 475 470 type->accept( fpd ); 476 471 } 472 477 473 478 474 void HoistTypeDecls::handleType( Type * type ) { -
src/SymTab/Validate.h
rcef7430 r6b2d444 42 42 void validate_E( std::list< Declaration * > &translationUnit ); 43 43 void validate_F( std::list< Declaration * > &translationUnit ); 44 void decayForallPointers( std::list< Declaration * > & translationUnit );45 44 46 45 const ast::Type * validateType( -
src/Validate/module.mk
rcef7430 r6b2d444 16 16 17 17 SRC_VALIDATE = \ 18 Validate/Autogen.cpp \19 Validate/Autogen.hpp \20 18 Validate/CompoundLiteral.cpp \ 21 19 Validate/CompoundLiteral.hpp \ -
src/main.cc
rcef7430 r6b2d444 10 10 // Created On : Fri May 15 23:12:02 2015 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Wed Jan 26 14:09:00 202213 // Update Count : 6 7012 // Last Modified On : Tue Nov 30 10:25:00 2021 13 // Update Count : 659 14 14 // 15 15 … … 55 55 #include "ControlStruct/ExceptTranslate.h" // for translateEHM 56 56 #include "ControlStruct/FixLabels.hpp" // for fixLabels 57 #include "ControlStruct/HoistControlDecls.hpp" // hoistControlDecls58 57 #include "ControlStruct/Mutate.h" // for mutate 59 58 #include "GenPoly/Box.h" // for box … … 74 73 #include "SynTree/Visitor.h" // for acceptAll 75 74 #include "Tuples/Tuples.h" // for expandMemberTuples, expan... 76 #include "Validate/Autogen.hpp" // for autogenerateRoutines77 75 #include "Validate/FindSpecialDecls.h" // for findGlobalDecls 78 76 #include "Validate/CompoundLiteral.hpp" // for handleCompoundLiterals … … 80 78 #include "Validate/LabelAddressFixer.hpp" // for fixLabelAddresses 81 79 #include "Virtual/ExpandCasts.h" // for expandCasts 80 82 81 83 82 static void NewPass( const char * const name ) { … … 327 326 PASS( "Validate-B", SymTab::validate_B( translationUnit ) ); 328 327 PASS( "Validate-C", SymTab::validate_C( translationUnit ) ); 328 PASS( "Validate-D", SymTab::validate_D( translationUnit ) ); 329 329 330 330 CodeTools::fillLocations( translationUnit ); 331 331 332 332 if( useNewAST ) { 333 PASS( "Apply Concurrent Keywords", Concurrency::applyKeywords( translationUnit ) );334 PASS( "Forall Pointer Decay", SymTab::decayForallPointers( translationUnit ) );335 CodeTools::fillLocations( translationUnit );336 337 333 if (Stats::Counters::enabled) { 338 334 ast::pass_visitor_stats.avg = Stats::Counters::build<Stats::Counters::AverageCounter<double>>("Average Depth - New"); … … 342 338 343 339 forceFillCodeLocations( transUnit ); 344 345 // Must happen before autogen routines are added.346 PASS( "Hoist Control Declarations", ControlStruct::hoistControlDecls( transUnit ) );347 348 // Must be after enum and pointer decay.349 // Must be before compound literals.350 PASS( "Generate Autogen Routines", Validate::autogenerateRoutines( transUnit ) );351 340 352 341 PASS( "Implement Mutex", Concurrency::implementMutex( transUnit ) ); … … 417 406 translationUnit = convert( move( transUnit ) ); 418 407 } else { 419 PASS( "Validate-D", SymTab::validate_D( translationUnit ) );420 408 PASS( "Validate-E", SymTab::validate_E( translationUnit ) ); 421 409 PASS( "Validate-F", SymTab::validate_F( translationUnit ) );
Note:
See TracChangeset
for help on using the changeset viewer.