improvements for inlined subroutines: fix identifier scoping

This commit is contained in:
Irmen de Jong
2021-04-01 23:04:13 +02:00
parent fe2954ce08
commit 02e12d8575
8 changed files with 75 additions and 20 deletions

View File

@@ -137,8 +137,11 @@ class AstToSourceCode(val output: (text: String) -> Unit, val program: Program):
override fun visit(subroutine: Subroutine) {
output("\n")
outputi("")
if(subroutine.inline)
output("inline ")
if(subroutine.isAsmSubroutine) {
outputi("asmsub ${subroutine.name} (")
output("asmsub ${subroutine.name} (")
for(param in subroutine.parameters.zip(subroutine.asmParameterRegisters)) {
val reg =
when {
@@ -152,7 +155,7 @@ class AstToSourceCode(val output: (text: String) -> Unit, val program: Program):
}
}
else {
outputi("sub ${subroutine.name} (")
output("sub ${subroutine.name} (")
for(param in subroutine.parameters) {
output("${datatypeString(param.type)} ${param.name}")
if(param!==subroutine.parameters.last())

View File

@@ -711,8 +711,7 @@ internal fun makeRange(fromVal: Int, toVal: Int, stepVal: Int): IntProgression {
}
}
data class IdentifierReference(val nameInSource: List<String>, override val position: Position) : Expression(),
IAssignable {
data class IdentifierReference(val nameInSource: List<String>, override val position: Position) : Expression(), IAssignable {
override lateinit var parent: Node
fun targetStatement(program: Program) =