diff --git a/sources/zweic/Generator.scala b/sources/zweic/Generator.scala index a908464..1aae2ec 100644 --- a/sources/zweic/Generator.scala +++ b/sources/zweic/Generator.scala @@ -93,12 +93,21 @@ // ... � compl�ter ... case Var(varname, _, init) => - // ... � compl�ter ... + genTmp { tmpReg => + genLoad(init, tmpReg); + code.incFrameSize(4); + varname.sym.offset = code.getFrameSize(); + code.emit(PSH, tmpReg, SP, 4); + } case Set(name, expr) => - // ... � compl�ter ... + genTmp { tmpReg => + genLoad(expr, tmpReg); + code.emit(STW, tmpReg, SP, code.getFrameSize()-name.sym.offset); + } case Do(expr) => + // ... � compl�ter ... case PrintInt(expr) => genTmp { tmpReg => @@ -185,9 +194,11 @@ stats.foreach(gen); code.getRegister(targetReg); genLoad(main, targetReg); + code.emit(SUBI, SP, SP, code.getFrameSize()); + code.decFrameSize(code.getFrameSize()); case Ident(name) => - // ... � compl�ter ... + code.emit(LDW, targetReg, SP, code.getFrameSize()-name.sym.offset); case New(name, args) => val af = name.sym.asInstanceOf[ClassSymbol].allFields; diff --git a/tests/5/var.zwei b/tests/5/var.zwei new file mode 100644 index 0000000..587bf08 --- /dev/null +++ b/tests/5/var.zwei @@ -0,0 +1,8 @@ +{ + Int a = 10; + { + Int b = 10; + }; + a = 5; + printInt(a); +}