diff --git a/sources/zweic/Generator.scala b/sources/zweic/Generator.scala index 1aae2ec..22f342b 100644 --- a/sources/zweic/Generator.scala +++ b/sources/zweic/Generator.scala @@ -90,6 +90,15 @@ // ... � compl�ter ... case While(cond, stats) => + genTmp { tmpReg => + val valentin = code.getLabel(); + val valerie = code.getLabel(); + code.anchorLabel(valentin); + genCond(cond, valerie, false); + stats.foreach(gen); + code.emit(BEQ, ZERO, valentin); + code.anchorLabel(valerie); + } // ... � compl�ter ... case Var(varname, _, init) => @@ -107,7 +116,9 @@ } case Do(expr) => - // ... � compl�ter ... + genTmp { tmpReg => + genLoad(expr, tmpReg); + } case PrintInt(expr) => genTmp { tmpReg => diff --git a/tests/5/var.zwei b/tests/5/var.zwei index 587bf08..7a1b6c9 100644 --- a/tests/5/var.zwei +++ b/tests/5/var.zwei @@ -1,7 +1,9 @@ { Int a = 10; { - Int b = 10; + Int b = 7; + b = 8; + printInt(b); }; a = 5; printInt(a); diff --git a/tests/5/while.zwei b/tests/5/while.zwei new file mode 100644 index 0000000..3275607 --- /dev/null +++ b/tests/5/while.zwei @@ -0,0 +1,7 @@ +{ + Int a = 0; + while ( a < 10 ) { + a = a+1; + printInt(a); + } +}