refactor: return args and defs from labelGenerator, instead of strings

This commit is contained in:
2025-02-28 14:23:09 +00:00
parent fb5799dbfd
commit 7627ec14d2
3 changed files with 51 additions and 46 deletions

View File

@@ -7,13 +7,13 @@ sealed trait RuntimeError {
val name: String
protected val errStr: String
protected def getErrLabel(using labelGenerator: LabelGenerator): String =
labelGenerator.getLabel(errStr, name = name)
protected def getErrLabel(using labelGenerator: LabelGenerator): LabelArg =
labelGenerator.getLabelArg(errStr, name = name)
protected def generateHandler(using labelGenerator: LabelGenerator): Chain[AsmLine]
def generate(using labelGenerator: LabelGenerator): Chain[AsmLine] =
LabelDef(labelGenerator.getLabel(this)) +: generateHandler
labelGenerator.getLabelDef(this) +: generateHandler
}
object RuntimeError {
@@ -39,7 +39,7 @@ object RuntimeError {
protected def generateHandler(using labelGenerator: LabelGenerator): Chain[AsmLine] = Chain(
stackAlign,
Load(RDI, IndexAddress(RIP, LabelArg(getErrLabel))),
Load(RDI, IndexAddress(RIP, getErrLabel)),
assemblyIR.Call(CLibFunc.PrintF),
Move(RDI, ImmediateVal(-1)),
assemblyIR.Call(CLibFunc.Exit)
@@ -54,7 +54,7 @@ object RuntimeError {
protected def generateHandler(using labelGenerator: LabelGenerator): Chain[AsmLine] = Chain(
Pop(RSI),
stackAlign,
Load(RDI, IndexAddress(RIP, LabelArg(getErrLabel))),
Load(RDI, IndexAddress(RIP, getErrLabel)),
assemblyIR.Call(CLibFunc.PrintF),
Move(RDI, ImmediateVal(255)),
assemblyIR.Call(CLibFunc.Exit)
@@ -68,7 +68,7 @@ object RuntimeError {
protected def generateHandler(using labelGenerator: LabelGenerator): Chain[AsmLine] = Chain(
stackAlign,
Load(RDI, IndexAddress(RIP, LabelArg(getErrLabel))),
Load(RDI, IndexAddress(RIP, getErrLabel)),
assemblyIR.Call(CLibFunc.PrintF),
Move(RDI, ImmediateVal(255)),
assemblyIR.Call(CLibFunc.Exit)
@@ -82,7 +82,7 @@ object RuntimeError {
protected def generateHandler(using labelGenerator: LabelGenerator): Chain[AsmLine] = Chain(
stackAlign,
Load(RDI, IndexAddress(RIP, LabelArg(getErrLabel))),
Load(RDI, IndexAddress(RIP, getErrLabel)),
assemblyIR.Call(CLibFunc.PrintF),
Move(RDI, ImmediateVal(255)),
assemblyIR.Call(CLibFunc.Exit)
@@ -97,7 +97,7 @@ object RuntimeError {
protected def generateHandler(using labelGenerator: LabelGenerator): Chain[AsmLine] = Chain(
Move(RSI, Register(Q64, CX)),
stackAlign,
Load(RDI, IndexAddress(RIP, LabelArg(getErrLabel))),
Load(RDI, IndexAddress(RIP, getErrLabel)),
assemblyIR.Call(CLibFunc.PrintF),
Move(RDI, ImmediateVal(255)),
assemblyIR.Call(CLibFunc.Exit)