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