rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java
changeset 1779 9d757281c666
parent 1774 a93a52b33474
child 1780 b6e926f68703
     1.1 --- a/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Tue Jan 20 17:23:12 2015 +0100
     1.2 +++ b/rt/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java	Mon Feb 09 20:36:12 2015 +0100
     1.3 @@ -19,6 +19,7 @@
     1.4  
     1.5  import java.io.IOException;
     1.6  import java.io.InputStream;
     1.7 +import java.util.Arrays;
     1.8  import org.apidesign.bck2brwsr.core.JavaScriptBody;
     1.9  import static org.apidesign.vm4brwsr.ByteCodeParser.*;
    1.10  
    1.11 @@ -1703,7 +1704,7 @@
    1.12          char[] returnType = { 'V' };
    1.13          StringBuilder cnt = new StringBuilder();
    1.14          String mn = findMethodName(mi, cnt, returnType);
    1.15 -
    1.16 +        
    1.17          final int numArguments = isStatic ? cnt.length() : cnt.length() + 1;
    1.18          final CharSequence[] vars = new CharSequence[numArguments];
    1.19  
    1.20 @@ -1711,6 +1712,32 @@
    1.21              vars[j] = mapper.popValue();
    1.22          }
    1.23  
    1.24 +        if ((
    1.25 +            "newUpdater__Ljava_util_concurrent_atomic_AtomicIntegerFieldUpdater_2Ljava_lang_Class_2Ljava_lang_String_2".equals(mn)
    1.26 +            && "java/util/concurrent/atomic/AtomicIntegerFieldUpdater".equals(mi[0])
    1.27 +        ) || (
    1.28 +            "newUpdater__Ljava_util_concurrent_atomic_AtomicLongFieldUpdater_2Ljava_lang_Class_2Ljava_lang_String_2".equals(mn)
    1.29 +            && "java/util/concurrent/atomic/AtomicLongFieldUpdater".equals(mi[0])
    1.30 +        )) {
    1.31 +            if (vars[1] instanceof String) {
    1.32 +                String field = vars[1].toString();
    1.33 +                if (field.length() > 2 && field.charAt(0) == '"' && field.charAt(field.length() - 1) == '"') {
    1.34 +                    vars[1] = "c._" + field.substring(1, field.length() - 1);
    1.35 +                }
    1.36 +            }
    1.37 +        }
    1.38 +        if (
    1.39 +            "newUpdater__Ljava_util_concurrent_atomic_AtomicReferenceFieldUpdater_2Ljava_lang_Class_2Ljava_lang_Class_2Ljava_lang_String_2".equals(mn)
    1.40 +            && "java/util/concurrent/atomic/AtomicReferenceFieldUpdater".equals(mi[0])
    1.41 +        ) {
    1.42 +            if (vars[1] instanceof String) {
    1.43 +                String field = vars[2].toString();
    1.44 +                if (field.length() > 2 && field.charAt(0) == '"' && field.charAt(field.length() - 1) == '"') {
    1.45 +                    vars[2] = "c._" + field.substring(1, field.length() - 1);
    1.46 +                }
    1.47 +            }
    1.48 +        }
    1.49 +
    1.50          if (returnType[0] != 'V') {
    1.51              mapper.flush(this);
    1.52              append("var ")