1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Mon May 06 11:57:29 2013 +0200
1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java Mon May 06 18:06:08 2013 +0200
1.3 @@ -28,12 +28,15 @@
1.4 * @author Jaroslav Tulach <jtulach@netbeans.org>
1.5 */
1.6 abstract class VM extends ByteCodeToJavaScript {
1.7 - protected final Bck2Brwsr.Resources resources;
1.8 + protected final ClassDataCache classDataCache;
1.9 +
1.10 + private final Bck2Brwsr.Resources resources;
1.11 private final ExportedSymbols exportedSymbols;
1.12
1.13 private VM(Appendable out, Bck2Brwsr.Resources resources) {
1.14 super(out);
1.15 this.resources = resources;
1.16 + this.classDataCache = new ClassDataCache(resources);
1.17 this.exportedSymbols = new ExportedSymbols(resources);
1.18 }
1.19
1.20 @@ -231,10 +234,6 @@
1.21 }
1.22 }
1.23
1.24 - private static InputStream loadClass(Bck2Brwsr.Resources l, String name) throws IOException {
1.25 - return l.get(name + ".class"); // NOI18N
1.26 - }
1.27 -
1.28 static String toString(String name) throws IOException {
1.29 StringBuilder sb = new StringBuilder();
1.30 // compile(sb, name);
1.31 @@ -268,6 +267,19 @@
1.32 return "vm." + className;
1.33 }
1.34
1.35 + @Override
1.36 + protected String accessMember(String object, String mangledName,
1.37 + String[] fieldInfoName) throws IOException {
1.38 + final ClassData declaringClass =
1.39 + classDataCache.getClassData(fieldInfoName[0]);
1.40 + if (declaringClass == null) {
1.41 + return object + "['" + mangledName + "']";
1.42 + }
1.43 +
1.44 + // TODO
1.45 + return object + "." + mangledName;
1.46 + }
1.47 +
1.48 private static final class Standalone extends VM {
1.49 private Standalone(Appendable out, Bck2Brwsr.Resources resources) {
1.50 super(out, resources);
1.51 @@ -322,11 +334,11 @@
1.52
1.53 @Override
1.54 protected String generateClass(String className) throws IOException {
1.55 - InputStream is = loadClass(resources, className);
1.56 - if (is == null) {
1.57 + ClassData classData = classDataCache.getClassData(className);
1.58 + if (classData == null) {
1.59 throw new IOException("Can't find class " + className);
1.60 }
1.61 - return compile(is);
1.62 + return compile(classData);
1.63 }
1.64
1.65 @Override
1.66 @@ -362,8 +374,8 @@
1.67
1.68 @Override
1.69 protected String generateClass(String className) throws IOException {
1.70 - InputStream is = loadClass(resources, className);
1.71 - if (is == null) {
1.72 + ClassData classData = classDataCache.getClassData(className);
1.73 + if (classData == null) {
1.74 out.append("\n").append(assignClass(
1.75 className.replace('/', '_')))
1.76 .append("function() {\n return link('")
1.77 @@ -374,7 +386,7 @@
1.78 return null;
1.79 }
1.80
1.81 - return compile(is);
1.82 + return compile(classData);
1.83 }
1.84
1.85 @Override