lambda/lambda/langtools: initial lambda push; the current prototype suuports the following features:
Rémi Forax
forax at univ-mlv.fr
Sat May 29 07:14:34 PDT 2010
I've tried a swearword but legal:
#()(#(){}).();
The compiler knows more slang words than me :)
Rémi
An exception has occurred in the compiler (1.7.0-internal). Please file
a bug at the Java Developer Connection
(http://java.sun.com/webapps/bugreport) after checking the Bug Parade
for duplicates. Include your program and the following diagnostic in
your report. Thank you.
java.lang.NullPointerException
at com.sun.tools.javac.comp.Lower.lambdaName(Lower.java:3400)
at com.sun.tools.javac.comp.Lower.visitLambda(Lower.java:3404)
at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1452)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1970)
at com.sun.tools.javac.comp.Lower.visitReturn(Lower.java:3155)
at com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1230)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
at
com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:160)
at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:3128)
at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:780)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at
com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:144)
at
com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2407)
at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2326)
at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:667)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at com.sun.tools.javac.comp.Lower.visitLambda(Lower.java:3466)
at com.sun.tools.javac.tree.JCTree$JCLambda.accept(JCTree.java:1452)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at com.sun.tools.javac.comp.Lower.visitSelect(Lower.java:3538)
at
com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:1727)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at com.sun.tools.javac.comp.Lower.visitApply(Lower.java:2625)
at
com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1311)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at com.sun.tools.javac.comp.Lower.visitTypeCast(Lower.java:2422)
at com.sun.tools.javac.tree.JCTree$JCTypeCast.accept(JCTree.java:1644)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1970)
at com.sun.tools.javac.comp.Lower.visitLambdaCall(Lower.java:2651)
at com.sun.tools.javac.comp.Lower.visitApply(Lower.java:2563)
at
com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1311)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at
com.sun.tools.javac.tree.TreeTranslator.visitExec(TreeTranslator.java:242)
at
com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1157)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:70)
at
com.sun.tools.javac.tree.TreeTranslator.visitBlock(TreeTranslator.java:160)
at com.sun.tools.javac.comp.Lower.visitBlock(Lower.java:3128)
at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:780)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at
com.sun.tools.javac.tree.TreeTranslator.visitMethodDef(TreeTranslator.java:144)
at
com.sun.tools.javac.comp.Lower.visitMethodDefInternal(Lower.java:2407)
at com.sun.tools.javac.comp.Lower.visitMethodDef(Lower.java:2326)
at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:667)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at com.sun.tools.javac.comp.Lower.visitClassDef(Lower.java:2064)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:596)
at
com.sun.tools.javac.tree.TreeTranslator.translate(TreeTranslator.java:58)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1958)
at com.sun.tools.javac.comp.Lower.translate(Lower.java:1978)
at
com.sun.tools.javac.comp.Lower.translateTopLevelClass(Lower.java:3589)
at
com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1328)
at
com.sun.tools.javac.main.JavaCompiler.desugar(JavaCompiler.java:1206)
at
com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:842)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:801)
at com.sun.tools.javac.main.Main.compile(Main.java:412)
at com.sun.tools.javac.main.Main.compile(Main.java:330)
at com.sun.tools.javac.main.Main.compile(Main.java:321)
at com.sun.tools.javac.Main.compile(Main.java:82)
at com.sun.tools.javac.Main.main(Main.java:67)
Le 28/05/2010 17:04, Maurizio Cimadamore a écrit :
> On 28/05/10 15:40, Rémi Forax wrote:
>> I've found some bugs :)
>>
>> // this doesn't compile - how to declare a function type that doesn't
>> takes any parameter ?
>> #int() bar;
>
> I'm in the process of fixing this...
>>
>>
>> // in my opinion, an instruction can start with a lambda that has a
>> body,
>> // but the hand-coded grammar of the compiler doesn't allow that.
>> #(int x) { System.out.println(x); }.();
>>
>> // Open question: can an instruction starts with a lambda expression ?
> Good question; my choice has been to make lambda a plain expression,
> rather than an expression statement; this way it is mandatory to
> always wrap a lambda either within a function type or within a SAM type.
>>
>>
>> // this snippet generate invalid code (at bytecode offset 4)
>> int v = #(Object o) {
>> System.out.println(this.type());
>> return 3;
>> }.("foo");
>
> the .type() syntax is not supported yet, hence the bad bytecode.
>
> Thanks for the headsup!
>
> Maurizio
>
>>
>> static int lambda$0(java.dyn.MethodHandle, java.lang.Object);
>> Code:
>> 0: getstatic #1 // Field
>> java/lang/System.out:Ljava/io/PrintStream;
>> 3: aload_0
>> 4: invokevirtual #2 // Method
>> "".type:()Ljava/dyn/MethodType;
>> 7: invokevirtual #3 // Method
>> java/io/PrintStream.println:(Ljava/lang/Object;)V
>> 10: iconst_3
>> 11: ireturn
>>
>>
>> Rémi
>>
>
More information about the lambda-dev
mailing list