From 172ea3fbee97e87f024c5aabe773a9d3ba52b53c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=BCtterling=2C=20Franziska=20=28WWI2012D=29?= Date: Wed, 8 Jul 2015 16:43:10 +0200 Subject: [PATCH] =?UTF-8?q?GenCode:=20Lambda=20theorethisch=20korrekt,=20h?= =?UTF-8?q?=C3=A4ngt=20aber=20noch=20an=20einer=20unbekannten=20NullPointe?= =?UTF-8?q?rException?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syntaxtree/statement/LambdaExpression.java | 12 ++++++++++-- test/bytecode/LambdaExpr.jav | 3 ++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java index 1b4f4241..62c3c761 100755 --- a/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java +++ b/src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java @@ -2,8 +2,10 @@ package de.dhbwstuttgart.syntaxtree.statement; import java.util.Hashtable; +import org.apache.bcel.classfile.ConstantPool; import org.apache.bcel.generic.BIPUSH; import org.apache.bcel.generic.ClassGen; +import org.apache.bcel.generic.ConstantPoolGen; import org.apache.bcel.generic.InstructionFactory; import org.apache.bcel.generic.InstructionList; import org.apache.bcel.generic.INVOKEDYNAMIC; @@ -213,16 +215,22 @@ public class LambdaExpression extends Expr{ @Override public InstructionList genByteCode(ClassGen cg) { - //InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool()); + ConstantPoolGen cp = cg.getConstantPool(); InstructionList il = new InstructionList(); - short opcode = 186;//opcode - was genau ist das? /* * Bytecode: * 0: invokedynamic #2, 0 //#2 führt zu einem InvokeDynamic im KP - wildes Referenzieren * 5: astore_1 //Speichert wahrscheinlich den String meiner TestEXPR * 6: return */ + + //---Variante 1 mit opcode---- + short opcode = 186;//opcode - was genau ist das? il.append(new INVOKEDYNAMIC(opcode, 0));//Invokedynamic lässt sich bei mir weder automatisch noch manuell importieren + + //---Variante 2 mit Konstantenpool-Referenz--- + //int cpSize = cp.getSize()-1;//Vermutlich ist die benötigte Referenz das aktuellste Element? + //il.append(new INVOKEDYNAMIC((short) cpSize, 0)); return il; } diff --git a/test/bytecode/LambdaExpr.jav b/test/bytecode/LambdaExpr.jav index 853da920..e5b1a122 100644 --- a/test/bytecode/LambdaExpr.jav +++ b/test/bytecode/LambdaExpr.jav @@ -2,6 +2,7 @@ class LambdaExpr { void method() { - Runnable r1 = () -> System.out.println("Hello world two!"); + lambda; lambda = ()-> 1; + } } \ No newline at end of file