diff --git a/sources/zweic/Generator.scala b/sources/zweic/Generator.scala index e0911cb..a908464 100644 --- a/sources/zweic/Generator.scala +++ b/sources/zweic/Generator.scala @@ -84,7 +84,7 @@ // ... � compl�ter ... //TODO: case FieldDecl(_, _) => ; - case FieldDecl(_) => ; + case FieldDecl(_) => ; case method @ MethodDef(name, params, _, body) => // ... � compl�ter ... @@ -190,10 +190,23 @@ // ... � compl�ter ... case New(name, args) => - // ... � compl�ter ... + val af = name.sym.asInstanceOf[ClassSymbol].allFields; + genTmp { tmpReg => + emitLoadConstant(tmpReg, 4+af.length*4); + code.emit(SYSCALL, targetReg, tmpReg, SYS_GC_ALLOC, " allocate memory for class '"+name+"'"); + } + genTmp { tmpVal => + for ( val x <- args.zip(af) ) { + genLoad(x._1, tmpVal); + code.emit(STW, tmpVal, targetReg, x._2.offset+4); + } + } case Select(prefix, selector) => - // ... � compl�ter ... + genTmp { tmpReg => + genLoad(prefix, tmpReg); + code.emit(LDW, targetReg, tmpReg, selector.sym.offset+4); + } case Call(receiver, method, args) => // ... � compl�ter ... diff --git a/tests/5/new.zwei b/tests/5/new.zwei new file mode 100644 index 0000000..3f91c15 --- /dev/null +++ b/tests/5/new.zwei @@ -0,0 +1,5 @@ +class A { + Int a; + Int b; +} +(new A(3,4)).b