# HG changeset patch # User Jaroslav Tulach # Date 1465874430 -7200 # Node ID 0e230308c26fc08b100f8383bb6d6f8d1e5546e4 # Parent a5fc49f9ef409851672f1e9213f3aa17be162397 Handles virtual property read diff -r a5fc49f9ef40 -r 0e230308c26f rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Fri Jun 10 08:24:36 2016 +0200 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Tue Jun 14 05:20:30 2016 +0200 @@ -1452,23 +1452,30 @@ int indx = readUShortArg(byteCodes, i); String[] fi = jc.getFieldInfoName(indx); final int type = VarType.fromFieldType(fi[2].charAt(0)); - FieldData field = findField(fi); - if (field == null) { - final String mangleClass = mangleClassName(fi[0]); - final String mangleClassAccess = accessClassFalse(mangleClass); - smapper.replace(this, type, "@2.call(@1)", + if (DirectlLibraries.isScriptLibrary(fi[0])) { + smapper.replace(this, type, "@1['@2']", smapper.getA(0), - accessField(mangleClassAccess, null, fi) + fi[1] ); } else { - final String fieldOwner = mangleClassName(field.cls.getClassName()); - smapper.replace(this, type, "@1@2", - smapper.getA(0), - accessField(fieldOwner, field, fi) - ); + FieldData field = findField(fi); + if (field == null) { + final String mangleClass = mangleClassName(fi[0]); + final String mangleClassAccess = accessClassFalse(mangleClass); + smapper.replace(this, type, "@2.call(@1)", + smapper.getA(0), + accessField(mangleClassAccess, null, fi) + ); + } else { + final String fieldOwner = mangleClassName(field.cls.getClassName()); + smapper.replace(this, type, "@1@2", + smapper.getA(0), + accessField(fieldOwner, field, fi) + ); + } + addReference(fi[0]); } i += 2; - addReference(fi[0]); break; } case opc_putfield: { @@ -1930,6 +1937,14 @@ .append(';'); return i; } + if ( + mi[0].equals("net/java/html/lib/Objs$Property") && + mi[1].equals("get") + ) { + // virtual get = property read + append(vars[0].toString()).append(';'); + return i; + } append(vars[0].toString()).append("['").append(mi[1]).append("']("); } else { append(accessVirtualMethod(vars[0].toString(), mn, mi, numArguments));