Implement continue statement interpretation
This commit is contained in:
+9
-1
@@ -59,6 +59,7 @@ class IrInterpreter(private val irBuiltIns: IrBuiltIns) {
|
|||||||
is IrWhileLoop -> interpretWhile(this, data)
|
is IrWhileLoop -> interpretWhile(this, data)
|
||||||
is IrWhen -> interpretWhen(this, data)
|
is IrWhen -> interpretWhen(this, data)
|
||||||
is IrBreak -> interpretBreak(this, data)
|
is IrBreak -> interpretBreak(this, data)
|
||||||
|
is IrContinue -> interpretContinue(this, data)
|
||||||
|
|
||||||
else -> TODO("${this.javaClass} not supported")
|
else -> TODO("${this.javaClass} not supported")
|
||||||
}
|
}
|
||||||
@@ -76,7 +77,10 @@ class IrInterpreter(private val irBuiltIns: IrBuiltIns) {
|
|||||||
is IrWhileLoop -> if ((this.label ?: "") == code.info) Code.NEXT else code
|
is IrWhileLoop -> if ((this.label ?: "") == code.info) Code.NEXT else code
|
||||||
else -> code
|
else -> code
|
||||||
}
|
}
|
||||||
Code.CONTINUE -> TODO("Code.CONTINUE not implemented")
|
Code.CONTINUE -> when (this) {
|
||||||
|
is IrWhileLoop -> if ((this.label ?: "") == code.info) this.interpret(data) else code
|
||||||
|
else -> code
|
||||||
|
}
|
||||||
Code.EXCEPTION -> TODO("Code.EXCEPTION not implemented")
|
Code.EXCEPTION -> TODO("Code.EXCEPTION not implemented")
|
||||||
Code.NEXT -> Code.NEXT
|
Code.NEXT -> Code.NEXT
|
||||||
}
|
}
|
||||||
@@ -334,6 +338,10 @@ class IrInterpreter(private val irBuiltIns: IrBuiltIns) {
|
|||||||
return Code.BREAK_LOOP.apply { info = breakStatement.label ?: "" }
|
return Code.BREAK_LOOP.apply { info = breakStatement.label ?: "" }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun interpretContinue(continueStatement: IrContinue, data: Frame): Code {
|
||||||
|
return Code.CONTINUE.apply { info = continueStatement.label ?: "" }
|
||||||
|
}
|
||||||
|
|
||||||
private fun interpretSetField(expression: IrSetField, data: Frame): Code {
|
private fun interpretSetField(expression: IrSetField, data: Frame): Code {
|
||||||
val code = expression.value.interpret(data)
|
val code = expression.value.interpret(data)
|
||||||
if (code != Code.NEXT) return code
|
if (code != Code.NEXT) return code
|
||||||
|
|||||||
Reference in New Issue
Block a user