mirror of
https://github.com/GayPizzaSpecifications/pork.git
synced 2025-08-03 21:21:33 +00:00
compiler: declare symbols before store so that symbol graph works
This commit is contained in:
@ -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 ->
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user