Vikige beskjeder om obligatoriske oppgaver i INF5110
Her ligger viktige beskjeder om oblig 2 arkivert. Den nyeste ?verst. Her vil eventuelle meldinger om feil i den utdelte koden og presiseringer av oppgaven bli liggende.
Beskjeder
-
Ny versjon av patch_oblig2.zip (2008-04-10)
Filen er erstattet med en ny. Pakkene bytecode.* og runtime.* er fullf?rt og de fleste feil burde v?re rettet. Det er ogs? rettet opp en feil i ./tests/. En av filene l? igjen fra tidligere ?r og ga syntaksfeil. Det er ogs? lagt til et par eksempler til i ./code-examples/ (Bl.a en implementasjon av Euclids algoritme). -
Rettet tre feil i koden (2008-04-14)
Jeg har rettet tre sm? feil i koden. Dere kan enten bytte ut hele pakken (patch_oblig2.zip), de tre aktuelle filene eller bare de linjene som er nevnt her.-
Linje 281 og 282 i filen ./src/runtime/Loader.java. Feilen var at PUSHBOOL fikk verdien
TRUE hver gang fordi jeg tok med en ekstra byte hver gang (short istedenfor byte).
Bytt ut linjene 281 og 282 med:
byte byteValue = bytes[index + 1]; return new PUSHBOOL(byteValue == 1);
-
Linje 11 i ./src/bytecode/instructions/PUSHBOOL.java.
Jeg mappet TRUE -> FALSE og FALSE -> TRUE. Bytt ut linje 11 med:
return new byte[]{18, (byte) (this.value ? 1 : 0)};
-
Linje 21 og 22 i ./src/bytecode/instructions/STOREGLOBAL.java.
Jeg har rette opp litt p? utskriften (listing) av byte-koden. Bytt ut linje 21 og 22 med:
return "storeglobal " + interpreter.variables[this.varNum].name + "{" + interpreter.variables[this.varNum].type.toString(interpreter) + "}";
-
Linje 281 og 282 i filen ./src/runtime/Loader.java. Feilen var at PUSHBOOL fikk verdien
TRUE hver gang fordi jeg tok med en ekstra byte hver gang (short istedenfor byte).
Bytt ut linjene 281 og 282 med:
-
Tre feil til er rettet i koden (2008-04-15)
Jeg har rettet tre sm? feil til i koden. Dere kan enten bytte ut hele pakken (patch_oblig2.zip), de tre aktuelle filene eller bare de linjene som er nevnt her.-
GETFIELD Det var slik at structNum alltid ble 0 og fieldNum ble overskrevet med verdien til
structNum siden det stod 1 og ikke 3 som indeks.
Linje 16 i ./src/bytecode/instructions/GETFIELD.java skal byttes ut med:
NumberConversion.shortToByteArray(res, 3, (short)this.structNum);
-
PUTFIELD Det var slik at structNum alltid ble 0 og fieldNum ble overskrevet med verdien til
structNum siden det stod 1 og ikke 3 som indeks.
Linje 16 i ./src/bytecode/instructions/PUTFIELD.java skal byttes ut med:
NumberConversion.shortToByteArray(res, 3, (short)this.structNum);
-
Typen ble ikke konvertert til float som den skulle ved RETURN.
Etter linje 208 i ./src/runtime/Interpreter.java skal disse linje inn (Alts? etter "Object retvalue ..." og f?r "current = ..."):
if(retvalue instanceof Integer && current.procedure.returnType == FloatType.TYPE){ retvalue = new Float(((Integer)retvalue).floatValue()); }
-
GETFIELD Det var slik at structNum alltid ble 0 og fieldNum ble overskrevet med verdien til
structNum siden det stod 1 og ikke 3 som indeks.
Linje 16 i ./src/bytecode/instructions/GETFIELD.java skal byttes ut med:
-
Nye feil er rettet i koden (2008-04-23)
Jeg har rettet fire sm? feil til i koden. Dere kan enten bytte ut hele pakken (patch_oblig2.zip), filen Interpreter.java eller bare de linjene som er nevnt her. Det siste forutsetter at dere er i synk med koden i biblioteket fra f?r. Alle feilene hadde ? gj?re med konvertering mellom Integer og Float og alle feilene var i filen/src/runtime/Interpreter.java
.-
Legge inn etter linje 56 i
/src/runtime/Interpreter.java
(alts? blir de linje 57 og 58):initializeParams(current, stack); initializeCallVars(current);
-
Erstatte linje 223 i
/src/runtime/Interpreter.java
(etter ? ha lagt inn de to linjene nevnt ovenfor):globalValue = new Float(((Integer)globalValue).intValue());
-
Erstatte linje 233 i
/src/runtime/Interpreter.java
(etter ? ha lagt inn de to linjene nevnt ovenfor):localValue = new Float(((Integer)localValue).intValue());
-
Erstatte linje 341 i
/src/runtime/Interpreter.java
med alle disse (Blir linjene 341 til 347):Object top = stack.pop(); Float floatValue; if(top instanceof Float){ floatValue = (Float) top; } else { floatValue = new Float(((Integer) top).floatValue()); }
-
Legge inn etter linje 56 i
Fredrik S?rensen