From bcf403d269b1ae7db92bc92b85027d4e27f2513f Mon Sep 17 00:00:00 2001 From: Karol Stasiak Date: Fri, 16 Aug 2019 17:21:51 +0200 Subject: [PATCH] Fix evaluation of constant expressions in assembly --- src/main/scala/millfork/env/Environment.scala | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/scala/millfork/env/Environment.scala b/src/main/scala/millfork/env/Environment.scala index ab7319d9..322b31dc 100644 --- a/src/main/scala/millfork/env/Environment.scala +++ b/src/main/scala/millfork/env/Environment.scala @@ -626,7 +626,7 @@ class Environment(val parent: Option[Environment], val prefix: String, val cpuFa case _: DerefExpression => None case _: IndirectFieldExpression => None case _: DerefDebuggingExpression => None - case HalfWordExpression(param, hi) => evalImpl(e, vv).map(c => if (hi) c.hiByte else c.loByte) + case HalfWordExpression(param, hi) => evalImpl(param, vv).map(c => if (hi) c.hiByte else c.loByte) case SumExpression(params, decimal) => params.map { case (minus, param) => (minus, evalImpl(param, vv)) @@ -785,11 +785,13 @@ class Environment(val parent: Option[Environment], val prefix: String, val cpuFa case LiteralExpression(value, size) => Some(NumericConstant(value, size)) case ConstantArrayElementExpression(c) => Some(c) case VariableExpression(name) => - maybeGet[ConstantThing](name).map(_.value).orElse(maybeGet[ThingInMemory](name).map(_.toAddress)) + val result = maybeGet[ConstantThing](name).map(_.value).orElse(maybeGet[ThingInMemory](name).map(_.toAddress)) + if (result.isEmpty) log.warn(s"$name is not known") + result case IndexedExpression(name, index) => (evalForAsm(VariableExpression(name)), evalForAsm(index)) match { case (Some(a), Some(b)) => Some(CompoundConstant(MathOperator.Plus, a, b).quickSimplify) } - case HalfWordExpression(param, hi) => evalForAsm(e).map(c => if (hi) c.hiByte else c.loByte) + case HalfWordExpression(param, hi) => evalForAsm(param).map(c => if (hi) c.hiByte else c.loByte) case SumExpression(params, decimal) => params.map { case (minus, param) => (minus, evalForAsm(param))