hg: valhalla/valhalla: Scanner, parser, semantic analysis and attribution support for value types (original) (raw)
Srikanth srikanth.adayapalam at oracle.com
Tue Jan 30 09:21:47 UTC 2018
- Previous message (by thread): hg: valhalla/valhalla: Scanner, parser, semantic analysis and attribution support for value types
- Next message (by thread): hg: valhalla/valhalla: Scanner, parser, semantic analysis and attribution support for value types
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello,
The commit below is the record of the change set I pushed to valhalla "exp" branch that contains the javac changes for scanner, parser, semantic analysis and attribution support for value types. Most of this is leveraged from the existing prototype and tweaked for the present work.
No code generation support exists at the moment. I will look into it now. See below for the summary of changes and a couple of questions.
Summary of changes:
- Tag a type declaration as being a value type with __ByValue modifier (>= JDK11) - Value types may not declare a super class not even j.l.O - Value class declarations and their instance fields must be final. - Value types may not declare fields of their own types either directly or indirectly. - Null cannot be assigned to value types - Null cannot be casted to or compared with value types. - Support for static value factories and value instance creation via __MakeDefault() - Values have no instance lock and so may not be synchronized upon. - Values have no identity and consequently the method java.lang.System.identityHashCode may not be invoked on them and - The following methods from j.l.O are not allowed on value receivers: - clone() - finalize() - wait() - wait(long), - wait(long, int) - notify - notifyAll - Value instances may not be compared with == or != - Tests for the above restrictions.
Questions:
1. ATM, javac forbids comparison of values using != or ==. This behavior is simply brought forward from the original valhalla implementation. Is this what we want in the present prototype ? (in the context of acmp performance characterization ?)
- The support in the parser allows inner class to be declared as __ByValue. Do we want to restrict values to top level classes ? I seem to recall this being suggested a while ago - but I am unable to dig up the context.
Thanks! Srikanth
On Tuesday 30 January 2018 02:49 PM, srikanth.adayapalam at oracle.com wrote:
Changeset: 8d76e47a91e7 Author: sadayapalam Date: 2018-01-30 14:45 +0530 URL: http://hg.openjdk.java.net/valhalla/valhalla/rev/8d76e47a91e7
Scanner, parser, semantic analysis and attribution support for value types ! src/java.compiler/share/classes/javax/lang/model/element/Modifier.java ! src/jdk.compiler/share/classes/com/sun/source/tree/NewClassTree.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/code/Types.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Tokens.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties ! src/jdk.compiler/share/classes/com/sun/tools/javac/tree/JCTree.java ! src/jdk.compiler/share/classes/com/sun/tools/javac/util/Names.java ! src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java ! src/jdk.jshell/share/classes/jdk/jshell/CompletenessAnalyzer.java ! test/langtools/tools/javac/diags/examples.not-yet.txt + test/langtools/tools/javac/diags/examples/ValuesNotSupported.java + test/langtools/tools/javac/valhalla/lworld-values/CheckClone.java + test/langtools/tools/javac/valhalla/lworld-values/CheckClone.out + test/langtools/tools/javac/valhalla/lworld-values/CheckCyclicMembership.java + test/langtools/tools/javac/valhalla/lworld-values/CheckCyclicMembership.out + test/langtools/tools/javac/valhalla/lworld-values/CheckEquals.java + test/langtools/tools/javac/valhalla/lworld-values/CheckEquals.out + test/langtools/tools/javac/valhalla/lworld-values/CheckExtends.java + test/langtools/tools/javac/valhalla/lworld-values/CheckExtends.out + test/langtools/tools/javac/valhalla/lworld-values/CheckFinal.java + test/langtools/tools/javac/valhalla/lworld-values/CheckFinal.out + test/langtools/tools/javac/valhalla/lworld-values/CheckFinalize.java + test/langtools/tools/javac/valhalla/lworld-values/CheckFinalize.out + test/langtools/tools/javac/valhalla/lworld-values/CheckIdentityHash.java + test/langtools/tools/javac/valhalla/lworld-values/CheckIdentityHash.out + test/langtools/tools/javac/valhalla/lworld-values/CheckIdentityHash01.java + test/langtools/tools/javac/valhalla/lworld-values/CheckIdentityHash01.out + test/langtools/tools/javac/valhalla/lworld-values/CheckMakeDefault.java + test/langtools/tools/javac/valhalla/lworld-values/CheckMakeDefault.out + test/langtools/tools/javac/valhalla/lworld-values/CheckNullAssign.java + test/langtools/tools/javac/valhalla/lworld-values/CheckNullAssign.out + test/langtools/tools/javac/valhalla/lworld-values/CheckNullCastable.java + test/langtools/tools/javac/valhalla/lworld-values/CheckNullCastable.out + test/langtools/tools/javac/valhalla/lworld-values/CheckStaticValueFactory.java + test/langtools/tools/javac/valhalla/lworld-values/CheckStaticValueFactory.out + test/langtools/tools/javac/valhalla/lworld-values/CheckSuperCompileOnly.java + test/langtools/tools/javac/valhalla/lworld-values/CheckSync.java + test/langtools/tools/javac/valhalla/lworld-values/CheckSync.out + test/langtools/tools/javac/valhalla/lworld-values/CheckSynchronized.java + test/langtools/tools/javac/valhalla/lworld-values/CheckSynchronized.out + test/langtools/tools/javac/valhalla/lworld-values/CheckValueFactoryWithReference.java + test/langtools/tools/javac/valhalla/lworld-values/CheckValueFactoryWithReference.out + test/langtools/tools/javac/valhalla/lworld-values/CheckValueModifier.java + test/langtools/tools/javac/valhalla/lworld-values/CheckValueModifier.out + test/langtools/tools/javac/valhalla/lworld-values/Point.java
- Previous message (by thread): hg: valhalla/valhalla: Scanner, parser, semantic analysis and attribution support for value types
- Next message (by thread): hg: valhalla/valhalla: Scanner, parser, semantic analysis and attribution support for value types
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]