hg: lambda/lambda/langtools: Next round of implementation reflecting the latest 'State of the Lambda' draft; implemented features are:

maurizio.cimadamore at oracle.com maurizio.cimadamore at oracle.com
Fri Jul 23 01:54:46 PDT 2010


Changeset: 352641ddfafa
Author:    mcimadamore
Date:      2010-07-23 09:52 +0100
URL:       http://hg.openjdk.java.net/lambda/lambda/langtools/rev/352641ddfafa

Next round of implementation reflecting the latest 'State of the Lambda' draft; implemented features are:

*) Lambda expressions
New syntax. The non-terminal symbol '#' is still used to introduce both lambda expressions and function types, but a bunch of improvements have been made.
Now, the lambda body is always denoted by braces '{' '}', as in #(int x) {}. Moreover, if the argument list is empty, it can be omitted, as in #{...}.

*) SAM conversion & Target typing
Updated to latest specification. Lambda expression are now only allowed where a target type is expected (return/assignment/method call - and, for compatibility with old prototype). The target type can be either a function type or a SAM type. The target type is used for inferring partially specified lambda types, as in #(x) { ... }.

TODO:

*) break/continue/return
*) implementation of effectively final analysis
*) method references

! src/share/classes/com/sun/runtime/ProxyHelper.java
! src/share/classes/com/sun/source/tree/LambdaExpressionTree.java
! src/share/classes/com/sun/tools/javac/code/Flags.java
! src/share/classes/com/sun/tools/javac/code/Type.java
! src/share/classes/com/sun/tools/javac/code/Types.java
! src/share/classes/com/sun/tools/javac/comp/Attr.java
! src/share/classes/com/sun/tools/javac/comp/AttrContext.java
! src/share/classes/com/sun/tools/javac/comp/Check.java
! src/share/classes/com/sun/tools/javac/comp/Enter.java
! src/share/classes/com/sun/tools/javac/comp/Flow.java
! src/share/classes/com/sun/tools/javac/comp/Infer.java
! src/share/classes/com/sun/tools/javac/comp/Lower.java
! src/share/classes/com/sun/tools/javac/comp/Resolve.java
+ src/share/classes/com/sun/tools/javac/comp/Unlambda.java
! src/share/classes/com/sun/tools/javac/main/JavaCompiler.java
! src/share/classes/com/sun/tools/javac/model/JavacTypes.java
! src/share/classes/com/sun/tools/javac/parser/JavacParser.java
! src/share/classes/com/sun/tools/javac/parser/Lexer.java
! src/share/classes/com/sun/tools/javac/parser/Scanner.java
! src/share/classes/com/sun/tools/javac/resources/compiler.properties
! src/share/classes/com/sun/tools/javac/tree/JCTree.java
! src/share/classes/com/sun/tools/javac/tree/TreeCopier.java
! src/share/classes/com/sun/tools/javac/tree/TreeInfo.java
! src/share/classes/com/sun/tools/javac/tree/TreeMaker.java
! src/share/classes/com/sun/tools/javac/tree/TreeScanner.java
! src/share/classes/com/sun/tools/javac/util/Log.java
! src/share/classes/com/sun/tools/javac/util/RichDiagnosticFormatter.java
! src/share/classes/javax/lang/model/util/Types.java
! test/tools/javac/defender/Pos01.java
! test/tools/javac/lambda/BadAccess.java
! test/tools/javac/lambda/BadAccess.out
! test/tools/javac/lambda/BadConv01.java
! test/tools/javac/lambda/BadConv02.java
- test/tools/javac/lambda/BadLambdaCall.java
- test/tools/javac/lambda/BadLambdaCall.out
+ test/tools/javac/lambda/BadLambdaPos.java
+ test/tools/javac/lambda/BadLambdaPos.out
! test/tools/javac/lambda/BadReturn.java
! test/tools/javac/lambda/BadReturn.out
+ test/tools/javac/lambda/BadTargetType.java
+ test/tools/javac/lambda/BadTargetType.out
! test/tools/javac/lambda/FuncType01.java
! test/tools/javac/lambda/LambdaCapture01.java
! test/tools/javac/lambda/LambdaCapture02.java
! test/tools/javac/lambda/LambdaCapture03.java
! test/tools/javac/lambda/LambdaCapture04.java
! test/tools/javac/lambda/LambdaCapture05.java
! test/tools/javac/lambda/LambdaConv01.java
! test/tools/javac/lambda/LambdaConv02.java
+ test/tools/javac/lambda/LambdaConv02.out
! test/tools/javac/lambda/LambdaConv03.java
! test/tools/javac/lambda/LambdaConv04.java
! test/tools/javac/lambda/LambdaConv07.java
! test/tools/javac/lambda/LambdaExpr01.java
! test/tools/javac/lambda/LambdaExpr02.java
- test/tools/javac/lambda/LambdaExpr03.java
! test/tools/javac/lambda/LambdaExpr04.java
! test/tools/javac/lambda/LambdaScope01.java
! test/tools/javac/lambda/LambdaScope02.java
! test/tools/javac/lambda/NakedThis.java
- test/tools/javac/lambda/NakedThis.out
+ test/tools/javac/lambda/TargetType01.java
+ test/tools/javac/lambda/TargetType01.out
+ test/tools/javac/lambda/TargetType02.java
+ test/tools/javac/lambda/TargetType03.java
+ test/tools/javac/lambda/TargetType04.java
+ test/tools/javac/lambda/TargetType04.out
+ test/tools/javac/lambda/TargetType05.java
+ test/tools/javac/lambda/TargetType06.java
+ test/tools/javac/transparency/Neg09.java
+ test/tools/javac/transparency/Neg09.out



More information about the lambda-dev mailing list