diff --git a/src/main/wacc/backend/asmGenerator.scala b/src/main/wacc/backend/asmGenerator.scala index d8dd5b0..da34592 100644 --- a/src/main/wacc/backend/asmGenerator.scala +++ b/src/main/wacc/backend/asmGenerator.scala @@ -170,11 +170,11 @@ object asmGenerator { chain += stack.drop() chain += Jump(LabelArg(elseLabel), Cond.Equal) - chain ++= Chain.fromSeq(thenBranch).flatMap(generateStmt) + chain ++= thenBranch.foldMap(generateStmt) chain += Jump(LabelArg(endLabel)) chain += LabelDef(elseLabel) - chain ++= Chain.fromSeq(elseBranch).flatMap(generateStmt) + chain ++= elseBranch.foldMap(generateStmt) chain += LabelDef(endLabel) case While(cond, body) => @@ -187,7 +187,7 @@ object asmGenerator { chain += stack.drop() chain += Jump(LabelArg(endLabel), Cond.Equal) - chain ++= Chain.fromSeq(body).flatMap(generateStmt) + chain ++= body.foldMap(generateStmt) chain += Jump(LabelArg(startLabel)) chain += LabelDef(endLabel) @@ -298,13 +298,13 @@ object asmGenerator { val argRegs = List(RDI, RSI, RDX, RCX, R8, R9) val microWacc.Call(target, args) = call - argRegs.zip(args).foreach { (reg, expr) => + argRegs.zip(args).foldMap { (reg, expr) => chain ++= evalExprOntoStack(expr) chain += stack.pop(reg) } - args.drop(argRegs.size).foreach { expr => - chain ++= evalExprOntoStack(expr) + args.drop(argRegs.size).foldMap { + chain ++= evalExprOntoStack(_) } chain += assemblyIR.Call(LabelArg(labelGenerator.getLabel(target)))