[gwt-contrib] Re: GwtAstBuilder better handling of JSNI refs to constants (issue1449818)
lgtm http://gwt-code-reviews.appspot.com/1449818/ -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
[gwt-contrib] Re: GwtAstBuilder better handling of JSNI refs to constants (issue1449818)
http://gwt-code-reviews.appspot.com/1449818/diff/2003/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java File dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java (right): http://gwt-code-reviews.appspot.com/1449818/diff/2003/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java#newcode2837 dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java:2837: private static boolean isCompileTimeConstant(FieldBinding binding) { You would think, yep. It's just an assertion check on the fact that we don't model final and volatile independently. We use a single enum value for either. http://gwt-code-reviews.appspot.com/1449818/diff/2003/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java#newcode2840 dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java:2840: binding.isStatic() && binding.isFinal() && (binding.constant() != Constant.NotAConstant); Doesn't matter, in byte code, the check for assertions being enabled is itself an if test that is slower (as written) than the local variable check. If byte code optimizers are running, it should remove this entirely. http://gwt-code-reviews.appspot.com/1449818/ -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
[gwt-contrib] Re: GwtAstBuilder better handling of JSNI refs to constants (issue1449818)
LGTM w/a couple questions http://gwt-code-reviews.appspot.com/1449818/diff/2003/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java File dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java (right): http://gwt-code-reviews.appspot.com/1449818/diff/2003/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java#newcode2837 dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java:2837: private static boolean isCompileTimeConstant(FieldBinding binding) { I don't think it's legal/syntactically possible for a java field to be both final and volatile, which would make this assertion tautologically true, no? http://gwt-code-reviews.appspot.com/1449818/diff/2003/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java#newcode2840 dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java:2840: binding.isStatic() && binding.isFinal() && (binding.constant() != Constant.NotAConstant); should this if test live inside the assert, maybe as a conditional, so the if test doesn't get evaluated if assertions not enabled? http://gwt-code-reviews.appspot.com/1449818/ -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
[gwt-contrib] Re: GwtAstBuilder better handling of JSNI refs to constants (issue1449818)
Okay, much nicer! :D http://gwt-code-reviews.appspot.com/1449818/ -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
[gwt-contrib] Re: GwtAstBuilder better handling of JSNI refs to constants (issue1449818)
Yes, according to the JLS, Strings are considered compiled time constants, but we've been doing this wrong up to now. (Not that it mattered before now.) http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java File dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java (right): http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java#newcode573 dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java:573: This copy will get deleted soon, but the problem is getting a reference to java.lang.String. I'll see what I can do. http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java#newcode574 dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java:574: boolean isCompileTimeConstant = On 2011/06/14 23:46:25, jbrosenberg wrote: extra parens in "(binding.isFinal())" Done. http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java File dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java (right): http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java#newcode2971 dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java:2971: boolean isCompileTimeConstant = On 2011/06/14 23:46:25, jbrosenberg wrote: extra parens in "(binding.isFinal())" Done. http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java File dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java (right): http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java#newcode245 dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java:245: boolean isCompileTimeConstant = On 2011/06/14 23:46:25, jbrosenberg wrote: extra parens in "(binding.isFinal())" Done. http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java#newcode246 dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java:246: binding.isStatic() && (binding.isFinal()) && (binding.constant() != Constant.NotAConstant); Can't get a reference to java.lang.String from here; but I'll see what I can do. http://gwt-code-reviews.appspot.com/1449818/ -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
[gwt-contrib] Re: GwtAstBuilder better handling of JSNI refs to constants (issue1449818)
Can you briefly describe the reason for this change? If I understand correctly, the change is to extend handling of compile time constants to Strings as well as base types? http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java File dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java (right): http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java#newcode573 dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java:573: This same logic seems to be repeated in each file in this patch. Can it be made into a shared utility method somewhere? http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java#newcode574 dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java:574: boolean isCompileTimeConstant = extra parens in "(binding.isFinal())" http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java File dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java (right): http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java#newcode2971 dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java:2971: boolean isCompileTimeConstant = extra parens in "(binding.isFinal())" http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java File dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java (right): http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java#newcode245 dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java:245: boolean isCompileTimeConstant = extra parens in "(binding.isFinal())" http://gwt-code-reviews.appspot.com/1449818/diff/4001/dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java#newcode246 dev/core/src/com/google/gwt/dev/jjs/impl/ReferenceMapper.java:246: binding.isStatic() && (binding.isFinal()) && (binding.constant() != Constant.NotAConstant); why no assert here (you have it in similar places elsewhere)? http://gwt-code-reviews.appspot.com/1449818/ -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
[gwt-contrib] Re: GwtAstBuilder better handling of JSNI refs to constants (issue1449818)
Patch updated to fix GwtAstBuilderTest. http://gwt-code-reviews.appspot.com/1449818/ -- http://groups.google.com/group/Google-Web-Toolkit-Contributors