@@ -48,8 +48,8 @@ abstract class TestRunner {
4848 Map <String , String > env, String fileName, Random rand) {
4949 String prefix = mode.substring (0 , 3 ).toUpperCase ();
5050 String tag = getTag (mode);
51- // Prepare extra flags.
5251 List <String > extraFlags = [];
52+ // Required extra flags for kbc.
5353 if (mode.startsWith ('kbc-int' )) {
5454 prefix += '-INT' ;
5555 extraFlags += [
@@ -63,6 +63,14 @@ abstract class TestRunner {
6363 prefix += '-CMP' ;
6464 extraFlags += ['--use-bytecode-compiler' ];
6565 }
66+ // Every once in a while, go directly from source for kbc-*-x64.
67+ bool kbcSrc = false ;
68+ if (mode.startsWith ('kbc' ) &&
69+ mode.endsWith ('x64' ) &&
70+ rand.nextInt (4 ) == 0 ) {
71+ prefix += '-SRC' ;
72+ kbcSrc = true ;
73+ }
6674 // Every once in a while, stress test JIT.
6775 if (mode.startsWith ('jit' ) && rand.nextInt (4 ) == 0 ) {
6876 final r = rand.nextInt (7 );
@@ -108,7 +116,7 @@ abstract class TestRunner {
108116 prefix, tag, top, tmp, env, fileName, extraFlags);
109117 } else if (mode.startsWith ('kbc' )) {
110118 return new TestRunnerKBC (
111- prefix, tag, top, tmp, env, fileName, extraFlags);
119+ prefix, tag, top, tmp, env, fileName, extraFlags, kbcSrc );
112120 } else if (mode.startsWith ('djs' )) {
113121 return new TestRunnerDJS (prefix, tag, top, tmp, env, fileName);
114122 }
@@ -185,20 +193,26 @@ class TestRunnerAOT implements TestRunner {
185193/// Concrete test runner of bytecode.
186194class TestRunnerKBC implements TestRunner {
187195 TestRunnerKBC (String prefix, String tag, String top, String tmp, this .env,
188- this .fileName, List <String > extraFlags) {
196+ this .fileName, List <String > extraFlags, bool kbcSrc ) {
189197 description = '$prefix -$tag ' ;
190- generate = '$top /pkg/vm/tool/gen_kernel' ;
191- platform = '--platform=$top /out/$tag /vm_platform_strong.dill' ;
192- dill = '$tmp /out.dill' ;
193198 dart = '$top /out/$tag /dart' ;
194- cmd = [dart] + extraFlags + [dill];
199+ if (kbcSrc) {
200+ cmd = [dart] + extraFlags + [fileName];
201+ } else {
202+ generate = '$top /pkg/vm/tool/gen_kernel' ;
203+ platform = '--platform=$top /out/$tag /vm_platform_strong.dill' ;
204+ dill = '$tmp /out.dill' ;
205+ cmd = [dart] + extraFlags + [dill];
206+ }
195207 }
196208
197209 TestResult run () {
198- TestResult result = runCommand (
199- [generate, '--gen-bytecode' , platform, '-o' , dill, fileName], env);
200- if (result.exitCode != 0 ) {
201- return result;
210+ if (generate != null ) {
211+ TestResult result = runCommand (
212+ [generate, '--gen-bytecode' , platform, '-o' , dill, fileName], env);
213+ if (result.exitCode != 0 ) {
214+ return result;
215+ }
202216 }
203217 return runCommand (cmd, env);
204218 }
0 commit comments