mirror of
https://github.com/KarolS/millfork.git
synced 2025-04-21 10:39:00 +00:00
Fix unused variable elimination in for-array statements (fixes #125)
This commit is contained in:
parent
84dde8589c
commit
0c8951d015
src
@ -813,7 +813,7 @@ case class MemsetStatement(start: Expression, size: Constant, value: Expression,
|
||||
}
|
||||
|
||||
case class ForEachStatement(variable: String, pointerVariable: Option[String], values: Either[Expression, List[Expression]], body: List[ExecutableStatement]) extends CompoundStatement {
|
||||
override def getAllExpressions: List[Expression] = VariableExpression(variable) :: (values.fold[List[Expression]](_ => Nil, identity) ++ body.flatMap(_.getAllExpressions))
|
||||
override def getAllExpressions: List[Expression] = VariableExpression(variable) :: (pointerVariable.map(VariableExpression).toList ++ values.fold[List[Expression]](List(_), identity) ++ body.flatMap(_.getAllExpressions))
|
||||
|
||||
override def getChildStatements: Seq[Statement] = body
|
||||
override def flatMap(f: ExecutableStatement => Option[ExecutableStatement]): Option[ExecutableStatement] = {
|
||||
|
@ -43,4 +43,36 @@ class ForArraySuite extends FunSuite with Matchers {
|
||||
m.readByte(0xc000) should equal(18)
|
||||
}
|
||||
}
|
||||
|
||||
test("Issue #125") {
|
||||
val src = """
|
||||
| byte output @$c000
|
||||
| import stdio
|
||||
| array(byte) data=[1,2,3,4]
|
||||
| void main(){
|
||||
| byte i
|
||||
| for i:data{
|
||||
| output += i
|
||||
| }
|
||||
|}
|
||||
""".stripMargin
|
||||
val m = EmuOptimizedRun(src)
|
||||
m.readByte(0xc000) should equal(6)
|
||||
}
|
||||
|
||||
test("Issue #125 (ver. 2)") {
|
||||
val src = """
|
||||
| byte output @$c000
|
||||
| import stdio
|
||||
| array(byte) data=[1,2,3,4]
|
||||
| void main(){
|
||||
| byte i,v
|
||||
| for i,v:data{
|
||||
| output += v
|
||||
| }
|
||||
|}
|
||||
""".stripMargin
|
||||
val m = EmuOptimizedRun(src)
|
||||
m.readByte(0xc000) should equal(10)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user