ccebinger / SWPSoSe14

2 stars 1 forks source link

Bug: LocalVariables local variable table overflow #240

Closed Zelldon closed 10 years ago

Zelldon commented 10 years ago

Also das Problem was gerade noch existiert ist das die LocalVariableStash bei 3 anfaengt da ja im Bytecode oefters mal auch aload, oder astore benutzt wird.

Problem ist jetzt wenn keine Berechnung usw standfindet, somit keine lokale variable benutzt wird, faengt der Stash immer noch bei 3 an und naechstes astore ist 4 was aber nicht mit dem count zusammenpasst. Java mag es anscheind dann nicht wenn astore 4 benutzt wird obwohl der dann insg. 1 ist (wegen einer Variable )

Am besten iwie den count dynamischer mit dem Stash zusammenbringen.

Siehe Beispiel test/multiCharCommand/lambda_call_in_other_function.rail

Ausgabe beim starten:


$ java Main
Exception in thread "main" java.lang.VerifyError: Local variable table overflow
Exception Details:
  Location:
    Main.main([Ljava/lang/String;)V @21: astore
  Reason:
    Local index 4 is invalid
  Bytecode:
    0000000: b200 8b12 95b8 006f b200 8b5f b600 7db2
    0000010: 008b b600 7c3a 04bb 0097 59b7 0098 b200
    0000020: 8b5f b600 7db8 009a b1                 

        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2570)
        at java.lang.Class.getMethod0(Class.java:2813)
        at java.lang.Class.getMethod(Class.java:1663)
        at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
jdettlaff commented 10 years ago

Accepted, und: Hier können wir direkt mit einbauen: wir erhöhen momentan unnötig den variable count, wenn wir lokale Variablen benutzen. Wenn wir 10 mal astore_1 machen, braucht der local var count bloß 2 zu sein und nicht 20 (oder so). Geprüft mit Utility, die den local var count, der benötigt wird, berechnet (Class Editor).

jdettlaff commented 10 years ago

Nicht done... da hab ich doch irgendeine Nummer verwechselt. Bin jetzt hier dran.

jdettlaff commented 10 years ago

Jetzt done. Dafür kommt dann im Fall deiner Testdatei ein anderer Fehler. Viel Spaß damit.