compiler: declare symbols before store so that symbol graph works

This commit is contained in:
2023-11-29 15:03:22 -08:00
parent 3dbf8f9c4a
commit 962d079acc
4 changed files with 20 additions and 2 deletions

View File

@ -241,7 +241,7 @@ class IrCodeEmitter(
override fun visitLetAssignment(node: LetAssignment): IrCodeElement {
val symbol = createLocalVariable(node.symbol)
return IrStore(symbol, node.value.visit(this))
return IrDeclare(symbol, node.value.visit(this))
}
override fun visitListLiteral(node: ListLiteral): IrCodeElement =
@ -296,7 +296,7 @@ class IrCodeEmitter(
override fun visitVarAssignment(node: VarAssignment): IrCodeElement {
val local = createLocalVariable(node.symbol)
return IrStore(local, node.value.visit(this))
return IrDeclare(local, node.value.visit(this))
}
override fun visitWhile(node: While): IrCodeElement = loop { symbol ->

View File

@ -188,6 +188,12 @@ class IrStubOpEmitter(val irDefinition: IrDefinition, val code: CodeBuilder) : I
code.emit(Opcode.Return)
}
override fun visitIrDeclare(ir: IrDeclare) {
visit(ir.value)
val variable = code.localState.createOrFindLocal(ir.symbol)
store(variable)
}
override fun visitIrStore(ir: IrStore) {
visit(ir.value)
val variable = code.localState.createOrFindLocal(ir.target)