# Quellen
* http://cr.openjdk.java.net/~briangoetz/lambda/lambda-translation.html
* http://blog.takipi.com/erstellen-von-lambda-ausdrucken-scala-vs-java-8/

# Decompiler
* Es wird javap verwendet. Die Datei ~/bin/javap leitet den javap Befehl um. Muss angepasst werden, wenn man andere Version verwenden will.

#Quellen
* Brian Götz zu Lambdas: http://wiki.jvmlangsummit.com/images/1/1e/2011_Goetz_Lambda.pdf

# Doku
* 2 Möglichkeiten Lambda Ausdrücke zu kompilieren: Anonymous inner class, Invokedynamic

## Invokedynamic
* Hat Argumente auf dem Stack liegen
* Indexbytes zeigen auf eine InvokeDynamic_Info structure, welche beinhaltet:
	* Methodenname der bootstrap-Methode (Symbolic Reference)
	* Mehrere Symbolic References auf statische Argumente der Bootstrap Methode
	* Einen Methodenname und Deskriptor.
* Ausführung:
	* Nach dem auflösen dieser Struktur stehen die Informationen des InvokeDynamic_Info zur Verfügung
	* Anschließend wird ein invokevirtual auf die Bootstrap Methode ausgeführt
	* Die Index Referenz für InvokeVirtual hat bestimmte Werte:  https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5.invokedynamic
	* Die Rückgabe der Bootstrap-Methode (CallSite) wird mittels invokevirtual ausgeführt.

## Bootstrap Methods
* Ein Attribut im Classfile
* Gibt die Bootstrap Methoden an
* Die Angabe erfolgt durch Zeiger auf Method_Handle_info Strukturen im Konstantenpool
* Rückgabe der Bootstrap-Methode ist ein CallSite Objekt: https://docs.oracle.com/javase/7/docs/api/java/lang/invoke/CallSite.html

## LambdaMetaFactory
* Stellt eine mögliche Bootstrap Methode dar

# TODO:
* Matrix Beispiel muss funktionieren (verschachtelter Lambda Ausdruck)
* Automatisch Bytecode generieren, wenn alle Typen eingesetzt sind

## StackMapTable
* Attribute für Codeattribut
* Wird für Sprünge im Bytecode benötigt
* Quelle: https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.4