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