feat: use errorcode constant in runtime errors

This commit is contained in:
Guy C
2025-02-28 12:14:55 +00:00
parent b733d233b0
commit 30f4309fda

View File

@@ -3,6 +3,8 @@ package wacc
import cats.data.Chain
import wacc.assemblyIR._
val ERROR_CODE = 255
sealed trait RuntimeError {
def strLabel: String
def errStr: String
@@ -33,7 +35,7 @@ object RuntimeError {
// private val RBP = Register(Q64, BP)
private val RSI = Register(Q64, SI)
// private val RDX = Register(Q64, DX)
// private val RCX = Register(Q64, CX)
private val RCX = Register(Q64, CX)
case object ZeroDivError extends RuntimeError {
val strLabel = ".L._errDivZero_str0"
@@ -62,7 +64,7 @@ object RuntimeError {
stackAlign,
Load(RDI, IndexAddress(RIP, LabelArg(BadChrError.strLabel))),
assemblyIR.Call(CLibFunc.PrintF),
Move(RDI, ImmediateVal(255)),
Move(RDI, ImmediateVal(ERROR_CODE)),
assemblyIR.Call(CLibFunc.Exit)
)
@@ -78,7 +80,7 @@ object RuntimeError {
stackAlign,
Load(RDI, IndexAddress(RIP, LabelArg(NullPtrError.strLabel))),
assemblyIR.Call(CLibFunc.PrintF),
Move(RDI, ImmediateVal(255)),
Move(RDI, ImmediateVal(ERROR_CODE)),
assemblyIR.Call(CLibFunc.Exit)
)
@@ -94,7 +96,7 @@ object RuntimeError {
stackAlign,
Load(RDI, IndexAddress(RIP, LabelArg(OverflowError.strLabel))),
assemblyIR.Call(CLibFunc.PrintF),
Move(RDI, ImmediateVal(255)),
Move(RDI, ImmediateVal(ERROR_CODE)),
assemblyIR.Call(CLibFunc.Exit)
)
@@ -108,11 +110,11 @@ object RuntimeError {
def generateHandler: Chain[AsmLine] = Chain(
LabelDef(OutOfBoundsError.errLabel),
Move(RSI, Register(Q64, CX)),
Move(RSI, RCX),
stackAlign,
Load(RDI, IndexAddress(RIP, LabelArg(OutOfBoundsError.strLabel))),
assemblyIR.Call(CLibFunc.PrintF),
Move(RDI, ImmediateVal(255)),
Move(RDI, ImmediateVal(ERROR_CODE)),
assemblyIR.Call(CLibFunc.Exit)
)
}
@@ -127,7 +129,7 @@ object RuntimeError {
stackAlign,
Load(RDI, IndexAddress(RIP, LabelArg(OutOfMemoryError.strLabel))),
assemblyIR.Call(CLibFunc.PrintF),
Move(RDI, ImmediateVal(255)),
Move(RDI, ImmediateVal(ERROR_CODE)),
assemblyIR.Call(CLibFunc.Exit)
)
}