diff --git a/sources/zweic/Generator.scala b/sources/zweic/Generator.scala index eeabae9..a033e9d 100644 --- a/sources/zweic/Generator.scala +++ b/sources/zweic/Generator.scala @@ -141,20 +141,23 @@ case While(cond, stats) => genTmp { tmpReg => - val valentin = code.getLabel(); - val valerie = code.getLabel(); - code.anchorLabel(valentin); - genCond(cond, valerie, false); + val startwhile = code.getLabel(); + val endwhile = code.getLabel(); + val fs = code.getFrameSize(); + code.anchorLabel(startwhile); + genCond(cond, endwhile, false); stats.foreach(gen); - code.emit(BEQ, ZERO, valentin); - code.anchorLabel(valerie); + code.emit(SUBI, SP, SP, fs-code.getFrameSize()); + code.decFrameSize(code.getFrameSize()); + code.incFrameSize(fs); + code.emit(BEQ, ZERO, startwhile); + code.anchorLabel(endwhile); } - // ... � compl�ter ... case Var(varname, _, init) => genTmp { tmpReg => genLoad(init, tmpReg); - varname.sym.offset = code.getFrameSize(); + varname.sym.offset = code.getFrameSize() + 4; code.emit(PSH, tmpReg, SP, 4); code.incFrameSize(4); } @@ -186,7 +189,9 @@ } case _ => - Console.println("gen __________________________________"); + + //Console.println("gen __________________________________" + tree); + error("gen: " + tree); } // def gen(Tree): Unit @@ -267,7 +272,7 @@ code.getRegister(targetReg); genLoad(main, targetReg); - code.emit(SUBI, SP, SP, code.getFrameSize()-fs); + code.emit(SUBI, SP, SP, fs-code.getFrameSize()); code.decFrameSize(code.getFrameSize()); code.incFrameSize(fs); @@ -302,8 +307,7 @@ code.emit(LDW, targetReg, tmpReg, selector.sym.offset+4); } - case Call(receiver, method, args) => - + case Call(receiver, method, args) => genTmp { thisReg => // put all registers on stack @@ -350,10 +354,6 @@ } } - //code.emit(ADDI, SP, SP, args.length*4); - - // ... � compl�ter ... - case If(cond, thenp, elsep) => val elseLabel = code.getLabel(); val afterLabel = code.getLabel(); diff --git a/tests/5/int.zwei b/tests/5/int.zwei index eb194a2..c183894 100644 --- a/tests/5/int.zwei +++ b/tests/5/int.zwei @@ -1,7 +1,7 @@ //#isut -//#65536 +//#65535 { -Int a = 65536; +Int a = 65535; printInt(a); } //i wonder if this should be correct or not... \ No newline at end of file