1.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java Mon Dec 10 11:26:32 2012 +0100
1.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/CompareVMs.java Mon Dec 10 12:03:22 2012 +0100
1.3 @@ -18,6 +18,8 @@
1.4 package org.apidesign.vm4brwsr;
1.5
1.6 import java.lang.reflect.Method;
1.7 +import java.util.Map;
1.8 +import java.util.WeakHashMap;
1.9 import javax.script.Invocable;
1.10 import javax.script.ScriptEngine;
1.11 import javax.script.ScriptEngineManager;
1.12 @@ -85,16 +87,20 @@
1.13 private final Method m;
1.14 private final boolean js;
1.15 Object value;
1.16 - private static Invocable code;
1.17 - private static CharSequence codeSeq;
1.18 + private Invocable code;
1.19 + private CharSequence codeSeq;
1.20 + private static final Map<Class,Object[]> compiled = new WeakHashMap<Class,Object[]>();
1.21
1.22 private Run(Method m, boolean js) {
1.23 this.m = m;
1.24 this.js = js;
1.25 }
1.26
1.27 - private static void compileTheCode(Class<?> clazz) throws Exception {
1.28 - if (code != null) {
1.29 + private void compileTheCode(Class<?> clazz) throws Exception {
1.30 + final Object[] data = compiled.get(clazz);
1.31 + if (data != null) {
1.32 + code = (Invocable) data[0];
1.33 + codeSeq = (CharSequence) data[1];
1.34 return;
1.35 }
1.36 StringBuilder sb = new StringBuilder();
1.37 @@ -123,6 +129,7 @@
1.38 Assert.assertTrue(js instanceof Invocable, "It is invocable object: " + res);
1.39 code = (Invocable) js;
1.40 codeSeq = sb;
1.41 + compiled.put(clazz, new Object[] { code, codeSeq });
1.42 }
1.43
1.44 @Test(groups = "run") public void executeCode() throws Throwable {