diff --git a/src/main/wacc/backend/RuntimeError.scala b/src/main/wacc/backend/RuntimeError.scala index 7a24d9a..ee52375 100644 --- a/src/main/wacc/backend/RuntimeError.scala +++ b/src/main/wacc/backend/RuntimeError.scala @@ -108,7 +108,7 @@ object RuntimeError { def generateHandler: Chain[AsmLine] = Chain( LabelDef(OutOfBoundsError.errLabel), - Pop(RSI), // le index + Pop(RSI), stackAlign, Load(RDI, IndexAddress(RIP, LabelArg(OutOfBoundsError.strLabel))), assemblyIR.Call(CLibFunc.PrintF), diff --git a/src/main/wacc/backend/asmGenerator.scala b/src/main/wacc/backend/asmGenerator.scala index 5c584af..926359a 100644 --- a/src/main/wacc/backend/asmGenerator.scala +++ b/src/main/wacc/backend/asmGenerator.scala @@ -196,6 +196,8 @@ object asmGenerator { chain ++= evalExprOntoStack(x) chain += stack.pop(RAX) chain += stack.pop(RCX) + chain += Compare(EAX, ImmediateVal(0)) + chain += Jump(LabelArg(NullPtrError.errLabel), Cond.Equal) chain += Compare(MemLocation(RAX, D32), ECX) chain += Jump(LabelArg(OutOfBoundsError.errLabel), Cond.LessEqual) chain += stack.pop(RDX) @@ -302,6 +304,8 @@ object asmGenerator { chain += Compare(RCX, ImmediateVal(0)) chain += Jump(LabelArg(OutOfBoundsError.errLabel), Cond.Less) chain += stack.pop(RAX) + chain += Compare(EAX, ImmediateVal(0)) + chain += Jump(LabelArg(NullPtrError.errLabel), Cond.Equal) chain += Compare(MemLocation(RAX, D32), ECX) chain += Jump(LabelArg(OutOfBoundsError.errLabel), Cond.LessEqual) // + Int because we store the length of the array at the start diff --git a/src/test/wacc/examples.scala b/src/test/wacc/examples.scala index efdbedf..6114afd 100644 --- a/src/test/wacc/examples.scala +++ b/src/test/wacc/examples.scala @@ -107,7 +107,7 @@ class ParallelExamplesSpec extends AnyFlatSpec with BeforeAndAfterAll { // "^.*wacc-examples/valid/IO/IOLoop.wacc.*$", // "^.*wacc-examples/valid/IO/IOSequence.wacc.*$", // "^.*wacc-examples/valid/pairs.*$", - "^.*wacc-examples/valid/runtimeErr.*$", + //"^.*wacc-examples/valid/runtimeErr.*$", // "^.*wacc-examples/valid/scope.*$", // "^.*wacc-examples/valid/sequence.*$", // "^.*wacc-examples/valid/variables.*$",