rt/vm/src/main/java/org/apidesign/vm4brwsr/VM.java
branchclosure
changeset 1084 f5c9934a252c
parent 1083 9d6130cb464f
child 1085 6a4ef883e233
     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