Changes in / [3a32b3a:732b406]
- Files:
-
- 25 deleted
- 12 edited
-
libcfa/src/exception.c (modified) (1 diff)
-
libcfa/src/iostream.cfa (modified) (9 diffs)
-
libcfa/src/iostream.hfa (modified) (3 diffs)
-
src/GenPoly/Specialize.cc (modified) (4 diffs)
-
src/Parser/ParseNode.h (modified) (2 diffs)
-
tests/.expect/global-monomorph.txt (deleted)
-
tests/.expect/manipulatorsOutput3.x64.txt (deleted)
-
tests/bugs/.expect/10.txt (deleted)
-
tests/bugs/.expect/194.txt (deleted)
-
tests/bugs/.expect/20.txt (deleted)
-
tests/bugs/.expect/44.txt (deleted)
-
tests/bugs/.expect/46.txt (deleted)
-
tests/bugs/.expect/5.txt (deleted)
-
tests/bugs/.expect/66.txt (deleted)
-
tests/bugs/.expect/91.txt (deleted)
-
tests/bugs/.expect/92.txt (deleted)
-
tests/bugs/.expect/95.txt (deleted)
-
tests/bugs/10.cfa (deleted)
-
tests/bugs/104.cfa (deleted)
-
tests/bugs/194.cfa (deleted)
-
tests/bugs/20.cfa (deleted)
-
tests/bugs/44.cfa (deleted)
-
tests/bugs/46.cfa (deleted)
-
tests/bugs/5.cfa (deleted)
-
tests/bugs/66.cfa (deleted)
-
tests/bugs/7.cfa (deleted)
-
tests/bugs/91.cfa (deleted)
-
tests/bugs/92.cfa (deleted)
-
tests/bugs/95.cfa (deleted)
-
tests/copyfile.cfa (modified) (2 diffs)
-
tests/exceptions/.expect/defaults.txt (modified) (1 diff)
-
tests/exceptions/defaults.cfa (modified) (2 diffs)
-
tests/global-monomorph.cfa (deleted)
-
tests/manipulatorsOutput3.cfa (modified) (3 diffs)
-
tests/pybin/test_run.py (modified) (1 diff)
-
tests/pybin/tools.py (modified) (1 diff)
-
tests/test.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/exception.c
r3a32b3a r732b406 85 85 __cfadbg_print_safe(exception, "Throwing resumption exception\n"); 86 86 87 { 88 __attribute__((cleanup(reset_top_resume))) 89 struct __cfaehm_try_resume_node * original_head = context->top_resume; 90 struct __cfaehm_try_resume_node * current = context->top_resume; 91 92 for ( ; current ; current = current->next) { 93 context->top_resume = current->next; 94 if (current->handler(except)) { 95 return; 96 } 87 __attribute__((cleanup(reset_top_resume))) 88 struct __cfaehm_try_resume_node * original_head = context->top_resume; 89 struct __cfaehm_try_resume_node * current = context->top_resume; 90 91 for ( ; current ; current = current->next) { 92 context->top_resume = current->next; 93 if (current->handler(except)) { 94 return; 97 95 } 98 } // End the search and return to the top of the stack.96 } 99 97 100 98 // No handler found, fall back to the default operation. -
libcfa/src/iostream.cfa
r3a32b3a r732b406 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jul 6 08:49:48202013 // Update Count : 10 6412 // Last Modified On : Fri Jun 19 16:15:34 2020 13 // Update Count : 1019 14 14 // 15 15 … … 30 30 } // extern "C" 31 31 32 #include <bitmanip.hfa> // high132 #include <bitmanip.hfa> // fms 33 33 34 34 … … 168 168 169 169 static void base10_128( ostype & os, unsigned int128 val ) { 170 if ( val > P10_UINT64) {170 if ( val > UINT64_MAX ) { 171 171 base10_128( os, val / P10_UINT64 ); // recursive 172 172 fmt( os, "%.19lu", (uint64_t)(val % P10_UINT64) ); … … 455 455 456 456 // Default prefix for non-decimal prints is 0b, 0, 0x. 457 #define IntegralFMTImpl( T, IFMTNP, IFMTP ) \457 #define IntegralFMTImpl( T, CODE, IFMTNP, IFMTP ) \ 458 458 forall( dtype ostype | ostream( ostype ) ) { \ 459 459 ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) { \ … … 506 506 if ( f.flags.left && spaces > 0 ) fmt( os, "%*s", spaces, " " ); \ 507 507 return os; \ 508 } /* if */ \508 } /* if */ \ 509 509 \ 510 510 char fmtstr[sizeof(IFMTP)]; /* sizeof includes '\0' */ \ … … 516 516 if ( ! f.flags.nobsdp ) { fmtstr[star] = '#'; star -= 1; } \ 517 517 if ( f.flags.left ) { fmtstr[star] = '-'; star -= 1; } \ 518 if ( f.flags.sign ) { fmtstr[star] = '+'; star -= 1; } \518 if ( f.flags.sign && f.base == CODE ) { fmtstr[star] = '+'; star -= 1; } \ 519 519 if ( f.flags.pad0 && ! f.flags.pc ) { fmtstr[star] = '0'; star -= 1; } \ 520 520 fmtstr[star] = '%'; \ … … 522 522 if ( ! f.flags.pc ) { /* no precision */ \ 523 523 fmtstr[sizeof(IFMTNP)-2] = f.base; /* sizeof includes '\0' */ \ 524 /* printf( "%s %c \n", &fmtstr[star], f.base); */ \524 /* printf( "%s %c %c\n", &fmtstr[star], f.base, CODE ); */ \ 525 525 fmt( os, &fmtstr[star], f.wd, f.val ); \ 526 526 } else { /* precision */ \ 527 527 fmtstr[sizeof(IFMTP)-2] = f.base; /* sizeof includes '\0' */ \ 528 /* printf( "%s %c \n", &fmtstr[star], f.base); */ \528 /* printf( "%s %c %c\n", &fmtstr[star], f.base, CODE ); */ \ 529 529 fmt( os, &fmtstr[star], f.wd, f.pc, f.val ); \ 530 530 } /* if */ \ … … 534 534 } // distribution 535 535 536 IntegralFMTImpl( signed char, "% *hh ", "% *.*hh " )537 IntegralFMTImpl( unsigned char, "% *hh ", "% *.*hh " )538 IntegralFMTImpl( signed short int, "% *h ", "% *.*h " )539 IntegralFMTImpl( unsigned short int, "% *h ", "% *.*h " )540 IntegralFMTImpl( signed int, "% * ", "% *.* " )541 IntegralFMTImpl( unsigned int, "% * ", "% *.* " )542 IntegralFMTImpl( signed long int, "% *l ", "% *.*l " )543 IntegralFMTImpl( unsigned long int, "% *l ", "% *.*l " )544 IntegralFMTImpl( signed long long int, "% *ll ", "% *.*ll " )545 IntegralFMTImpl( unsigned long long int, "% *ll ", "% *.*ll " )546 547 #if 0 536 IntegralFMTImpl( signed char, 'd', "% *hh ", "% *.*hh " ) 537 IntegralFMTImpl( unsigned char, 'u', "% *hh ", "% *.*hh " ) 538 IntegralFMTImpl( signed short int, 'd', "% *h ", "% *.*h " ) 539 IntegralFMTImpl( unsigned short int, 'u', "% *h ", "% *.*h " ) 540 IntegralFMTImpl( signed int, 'd', "% * ", "% *.* " ) 541 IntegralFMTImpl( unsigned int, 'u', "% * ", "% *.* " ) 542 IntegralFMTImpl( signed long int, 'd', "% *l ", "% *.*l " ) 543 IntegralFMTImpl( unsigned long int, 'u', "% *l ", "% *.*l " ) 544 IntegralFMTImpl( signed long long int, 'd', "% *ll ", "% *.*ll " ) 545 IntegralFMTImpl( unsigned long long int, 'u', "% *ll ", "% *.*ll " ) 546 547 548 548 #if defined( __SIZEOF_INT128__ ) 549 549 // Default prefix for non-decimal prints is 0b, 0, 0x. … … 663 663 IntegralFMTImpl128( unsigned int128, unsigned, 'u', "% *ll ", "% *.*ll " ) 664 664 #endif // __SIZEOF_INT128__ 665 #endif // 0666 667 #if 1668 #if defined( __SIZEOF_INT128__ )669 // Default prefix for non-decimal prints is 0b, 0, 0x.670 forall( dtype ostype | ostream( ostype ) )671 static inline void base_128( ostype & os, unsigned int128 val, unsigned int128 power, _Ostream_Manip(uint64_t) & f, unsigned int maxdig, unsigned int bits, unsigned int cnt = 0 ) {672 int wd = 1; // f.wd is never 0 because 0 implies left-pad673 if ( val > power ) { // subdivide value into printable 64-bit values674 base_128( os, val / power, power, f, maxdig, bits, cnt + 1 ); // recursive675 f.val = val % power;676 if ( cnt == 1 && f.flags.left ) { wd = f.wd; f.wd = maxdig; } // copy f.wd and reset for printing middle chunk677 (ostype &)(os | f);678 if ( cnt == 1 ) {679 if ( f.flags.left ) { wd -= maxdig; f.wd = wd < 0 ? 1 : wd; } // update and restore f.wd for printing end chunk680 sepOff( os ); // no seperator between chunks681 } // if682 } else { // print start chunk683 f.val = val;684 // f.pc is unsigned => use wd685 if ( f.flags.pc && f.pc > maxdig * cnt ) { wd = f.pc - maxdig * cnt; f.pc = wd < 0 ? 0 : wd; }686 else { f.flags.pc = false; f.pc = 0; }687 688 if ( ! f.flags.left ) { // right justify689 wd = f.wd - maxdig * cnt;690 f.wd = wd < 0 ? 1 : wd;691 wd = maxdig;692 } else { // left justify693 if ( cnt != 0 ) { // value >= 2^64 ?694 unsigned int dig, bs = 0;695 // compute size of prefix digits and base696 if ( f.base == 'd' || f.base == 'u' ) { // no base prefix697 dig = ceil( log10( f.val ) ); // use floating-point698 if ( f.base == 'd' && (f.flags.neg || f.flags.sign) ) bs = 1; // sign ?699 } else {700 dig = ceiling( high1( f.val ), bits );701 if ( ! f.flags.nobsdp ) { // base prefix ?702 if ( f.base == 'o' ) {703 // 0 prefix for octal is not added for precision with leading zero704 if ( f.pc <= dig ) bs = 1; // 1 character prefix705 } else bs = 2; // 2 character prefix706 } // if707 } // if708 wd = f.wd - (f.pc > dig ? f.pc : dig) - bs; // precision > leading digits ?709 if ( wd < 0 ) wd = 1;710 f.wd = 1;711 } // if712 // all manipulators handled implicitly for value < 2^64713 } // if714 // prior checks ensure wd not negative715 716 if ( f.flags.neg ) f.val = -f.val;717 (ostype &)(os | f);718 719 // remaining middle and end chunks are padded with 0s on the left720 if ( ! f.flags.left ) { f.flags.pad0 = true; f.flags.pc = false; } // left pad with 0s721 else { f.pc = maxdig; f.flags.pc = true; } // left pad with precision722 723 if ( cnt != 0 ) sepOff( os ); // no seperator between chunks724 f.wd = wd; // reset f.wd for next chunk725 f.flags.sign = false; // no leading +/- sign726 f.flags.nobsdp = true; // no leading base prefix727 } // if728 } // base_128729 730 #define IntegralFMTImpl128( T ) \731 forall( dtype ostype | ostream( ostype ) ) { \732 ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) { \733 _Ostream_Manip(uint64_t) fmt; \734 fmt.[wd, pc, base, all] = f.[wd, pc, base, all]; \735 if ( f.base == 'b' | f.base == 'B' ) { \736 base_128( os, f.val, (unsigned int128)1 << 64, fmt, 64, 1 ); \737 } else if ( f.base == 'o' ) { \738 base_128( os, f.val, (unsigned int128)1 << 63, fmt, 21, 3 ); \739 } else if ( f.base == 'd' || f.base == 'u' ) { \740 if ( f.base == 'd' && f.val < 0 ) { f.val = -f.val; fmt.flags.neg = true; } \741 base_128( os, f.val, (unsigned int128)10_000_000_000_000_000_000UL, fmt, 19, 0 ); \742 } else { \743 base_128( os, f.val, (unsigned int128)1 << 64, fmt, 16, 4 ); \744 } /* if */ \745 return os; \746 } /* ?|? */ \747 void ?|?( ostype & os, _Ostream_Manip(T) f ) { (ostype &)(os | f); ends( os ); } \748 } // distribution749 750 IntegralFMTImpl128( int128 )751 IntegralFMTImpl128( unsigned int128 )752 #endif // __SIZEOF_INT128__753 #endif // 0754 665 755 666 // *********************************** floating point *********************************** -
libcfa/src/iostream.hfa
r3a32b3a r732b406 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Jul 4 18:31:48202013 // Update Count : 3 4312 // Last Modified On : Fri Jun 19 16:15:56 2020 13 // Update Count : 338 14 14 // 15 15 … … 166 166 unsigned char all; 167 167 struct { 168 unsigned char neg:1; // val is negative169 168 unsigned char pc:1; // precision specified 170 169 unsigned char left:1; // left justify … … 371 370 372 371 static inline { 373 _Istream_Char ignore( const char ) { return (_Istream_Char)@{ true }; }372 _Istream_Char ignore( const char c ) { return (_Istream_Char)@{ true }; } 374 373 _Istream_Char & ignore( _Istream_Char & fmt ) { fmt.ignore = true; return fmt; } 375 374 } // distribution 376 375 forall( dtype istype | istream( istype ) ) istype & ?|?( istype & is, _Istream_Char f ); 377 376 378 forall( dtype T | sized( T ))377 forall( otype T ) 379 378 struct _Istream_Manip { 380 379 T & val; // polymorphic base-type -
src/GenPoly/Specialize.cc
r3a32b3a r732b406 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Thr Jul 2 17:42:00 202013 // Update Count : 3 311 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Dec 13 23:40:49 2019 13 // Update Count : 32 14 14 // 15 15 … … 42 42 43 43 namespace GenPoly { 44 struct Specialize final : public WithConstTypeSubstitution, 45 public WithDeclsToAdd, public WithVisitorRef<Specialize> { 44 struct Specialize final : public WithConstTypeSubstitution, public WithStmtsToAdd, public WithVisitorRef<Specialize> { 46 45 Expression * postmutate( ApplicationExpr *applicationExpr ); 47 46 Expression * postmutate( CastExpr *castExpr ); … … 249 248 } // if 250 249 251 // Handle any specializations that may still be present. 252 { 253 std::string oldParamPrefix = paramPrefix; 254 paramPrefix += "p"; 255 std::list< Declaration * > oldDecls; 256 oldDecls.splice( oldDecls.end(), declsToAddBefore ); 257 258 appExpr->acceptMutator( *visitor ); 259 // Write recursive specializations into the thunk body. 260 for ( Declaration * decl : declsToAddBefore ) { 261 thunkFunc->statements->kids.push_back( new DeclStmt( decl ) ); 262 } 263 264 declsToAddBefore = std::move( oldDecls ); 265 paramPrefix = oldParamPrefix; 266 } 250 // handle any specializations that may still be present 251 std::string oldParamPrefix = paramPrefix; 252 paramPrefix += "p"; 253 // save stmtsToAddBefore in oldStmts 254 std::list< Statement* > oldStmts; 255 oldStmts.splice( oldStmts.end(), stmtsToAddBefore ); 256 appExpr->acceptMutator( *visitor ); 257 paramPrefix = oldParamPrefix; 258 // write any statements added for recursive specializations into the thunk body 259 thunkFunc->statements->kids.splice( thunkFunc->statements->kids.end(), stmtsToAddBefore ); 260 // restore oldStmts into stmtsToAddBefore 261 stmtsToAddBefore.splice( stmtsToAddBefore.end(), oldStmts ); 267 262 268 263 // add return (or valueless expression) to the thunk … … 275 270 thunkFunc->statements->kids.push_back( appStmt ); 276 271 277 // Add the thunk definition (converted to DeclStmt if appproprate).278 declsToAddBefore.push_back( thunkFunc);272 // add thunk definition to queue of statements to add 273 stmtsToAddBefore.push_back( new DeclStmt( thunkFunc ) ); 279 274 // return address of thunk function as replacement expression 280 275 return new AddressExpr( new VariableExpr( thunkFunc ) ); -
src/Parser/ParseNode.h
r3a32b3a r732b406 10 10 // Created On : Sat May 16 13:28:16 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jul 6 09:33:32 202013 // Update Count : 89 212 // Last Modified On : Fri Feb 7 17:56:02 2020 13 // Update Count : 891 14 14 // 15 15 … … 86 86 class InitializerNode : public ParseNode { 87 87 public: 88 InitializerNode( ExpressionNode *, bool aggrp = false, ExpressionNode * des = nullptr );88 InitializerNode( ExpressionNode *, bool aggrp = false, ExpressionNode * des = nullptr ); 89 89 InitializerNode( InitializerNode *, bool aggrp = false, ExpressionNode * des = nullptr ); 90 90 InitializerNode( bool isDelete ); -
tests/copyfile.cfa
r3a32b3a r732b406 10 10 // Created On : Fri Jun 19 13:44:05 2020 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Jul 5 11:27:43 202013 // Update Count : 512 // Last Modified On : Fri Jun 19 17:58:03 2020 13 // Update Count : 4 14 14 // 15 15 … … 22 22 23 23 try { 24 choose ( argc ) { // terminate if command-line errors24 choose ( argc ) { 25 25 case 2, 3: 26 26 open( in, argv[1] ); // open input file first as output creates file 27 27 if ( argc == 3 ) open( out, argv[2] ); // do not create output unless input opens 28 28 case 1: ; // use default files 29 default: // wrong number of options29 default: 30 30 exit | "Usage" | argv[0] | "[ input-file (default stdin) [ output-file (default stdout) ] ]"; 31 31 } // choose -
tests/exceptions/.expect/defaults.txt
r3a32b3a r732b406 3 3 jump default handler. 4 4 Catch unhandled_exception. 5 cross terminate throw6 cross terminate default7 cross terminate catch8 cross resume throw9 cross resume default10 cross resume catch -
tests/exceptions/defaults.cfa
r3a32b3a r732b406 30 30 throwResume (log_message){(char *)"Should be printed.\n"}; 31 31 } catchResume (log_message * this) { 32 printf( "%s",this->virtual_table->msg(this));32 printf(this->virtual_table->msg(this)); 33 33 } 34 34 // But we don't have to: … … 69 69 } 70 70 71 TRIVIAL_EXCEPTION(second);72 73 void cross_test(void) {74 void defaultTerminationHandler(first &) {75 printf("cross terminate default\n");76 throw (second){};77 }78 void defaultResumptionHandler(first &) {79 printf("cross resume default\n");80 throwResume (second){};81 }82 try {83 printf("cross terminate throw\n");84 throw (first){};85 } catch (second *) {86 printf("cross terminate catch\n");87 }88 try {89 printf("cross resume throw\n");90 throwResume (first){};91 } catchResume (second *) {92 printf("cross resume catch\n");93 }94 }95 96 71 int main(int argc, char * argv[]) { 97 72 log_test(); 98 73 jump_test(); 99 74 unhandled_test(); 100 cross_test();101 75 } -
tests/manipulatorsOutput3.cfa
r3a32b3a r732b406 13 13 sout | sign(x); 14 14 sout | nl; 15 15 #if 1 16 16 sout | bin(x); 17 17 sout | upcase(bin(x)); … … 124 124 sout | nl; 125 125 126 127 // extras 128 sout | "extras"; 126 129 127 sout | bin(divisor); 130 128 sout | upcase(bin(divisor)); … … 142 140 sout | left(sign(wd(0,40, divisor))) | 'X'; 143 141 printf( "%-+1.40dX\n", 123456789 ); 144 145 int128 i128; 146 unsigned int128 ui128; 147 148 i128 = -10; 149 for ( 25 ) { 150 sout | left( sign( wd( 20, i128 ) ) ) | left( wd( 20, hex( i128 ) ) ) | left( wd( 20, oct( i128 ) ) ); 151 sout | left( wd( 20, bin( i128 ) ) ); 152 i128 += 1; 153 } 154 sout | nl; 155 156 i128 = 0x7fffffffffffffff; 157 i128 <<= 64; 158 i128 += 0xfffffffffffffffa; 159 160 for ( 20 ) { 161 sout | i128; 162 sout | left( sign( wd( 45, i128 ) ) ) | left( wd( 45, hex( i128 ) ) ) | left( wd( 45, oct( i128 ) ) ); 163 sout | left( wd( 45, bin( i128 ) ) ); 164 i128 += 1; 165 } 166 sout | nl; 167 168 ui128 = 0x7fffffffffffffff; 169 ui128 <<= 64; 170 ui128 += 0xfffffffffffffffa; 171 172 for ( 20 ) { 173 sout | ui128; 174 ui128 += 1; 175 } 176 sout | nl; 177 178 ui128 = 0xffffffffffffffff; 179 ui128 <<= 64; 180 ui128 += 0xfffffffffffffffa; 181 182 for ( 20 ) { 183 sout | ui128; 184 ui128 += 1; 185 } 142 #endif // 0 186 143 } -
tests/pybin/test_run.py
r3a32b3a r732b406 69 69 else : text = "FAILED with code %d" % retcode 70 70 71 text += " C%s - R%s" % ( fmtDur(duration[0]),fmtDur(duration[1]))71 text += " C%s - R%s" % (cls.fmtDur(duration[0]), cls.fmtDur(duration[1])) 72 72 return text 73 74 @staticmethod 75 def fmtDur( duration ): 76 if duration : 77 hours, rem = divmod(duration, 3600) 78 minutes, rem = divmod(rem, 60) 79 seconds, millis = divmod(rem, 1) 80 return "%2d:%02d.%03d" % (minutes, seconds, millis * 1000) 81 return " n/a" -
tests/pybin/tools.py
r3a32b3a r732b406 387 387 while True: 388 388 yield i.next(max(expire - time.time(), 0)) 389 390 def fmtDur( duration ):391 if duration :392 hours, rem = divmod(duration, 3600)393 minutes, rem = divmod(rem, 60)394 seconds, millis = divmod(rem, 1)395 return "%2d:%02d.%03d" % (minutes, seconds, millis * 1000)396 return " n/a" -
tests/test.py
r3a32b3a r732b406 361 361 362 362 # for each build configurations, run the test 363 with Timed() as total_dur: 364 for arch, debug, install in itertools.product(settings.all_arch, settings.all_debug, settings.all_install): 365 settings.arch = arch 366 settings.debug = debug 367 settings.install = install 368 369 # filter out the tests for a different architecture 370 # tests are the same across debug/install 371 local_tests = settings.arch.filter( tests ) 372 options.jobs, forceJobs = job_count( options, local_tests ) 373 settings.update_make_cmd(forceJobs, options.jobs) 374 375 # check the build configuration works 376 settings.validate() 377 378 # print configuration 379 print('%s %i tests on %i cores (%s:%s)' % ( 380 'Regenerating' if settings.generating else 'Running', 381 len(local_tests), 382 options.jobs, 383 settings.arch.string, 384 settings.debug.string 385 )) 386 387 # otherwise run all tests and make sure to return the correct error code 388 failed = run_tests(local_tests, options.jobs) 389 if failed: 390 result = 1 391 if not settings.continue_: 392 break 393 394 print('Tests took %s' % fmtDur( total_dur.duration )) 363 for arch, debug, install in itertools.product(settings.all_arch, settings.all_debug, settings.all_install): 364 settings.arch = arch 365 settings.debug = debug 366 settings.install = install 367 368 # filter out the tests for a different architecture 369 # tests are the same across debug/install 370 local_tests = settings.arch.filter( tests ) 371 options.jobs, forceJobs = job_count( options, local_tests ) 372 settings.update_make_cmd(forceJobs, options.jobs) 373 374 # check the build configuration works 375 settings.validate() 376 377 # print configuration 378 print('%s %i tests on %i cores (%s:%s)' % ( 379 'Regenerating' if settings.generating else 'Running', 380 len(local_tests), 381 options.jobs, 382 settings.arch.string, 383 settings.debug.string 384 )) 385 386 # otherwise run all tests and make sure to return the correct error code 387 failed = run_tests(local_tests, options.jobs) 388 if failed: 389 result = 1 390 if not settings.continue_: 391 break 392 393 395 394 sys.exit( failed )
Note:
See TracChangeset
for help on using the changeset viewer.