feat: use errorcode constant in runtime errors
This commit is contained in:
@@ -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)
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user