From 68fcf8f2d73479649ea8545c430911af672ce75d Mon Sep 17 00:00:00 2001 From: Karol Stasiak Date: Sun, 3 Nov 2019 23:17:44 +0100 Subject: [PATCH] Undo the sizeof change for now --- docs/lang/operators.md | 2 +- .../scala/millfork/compiler/AbstractExpressionCompiler.scala | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/lang/operators.md b/docs/lang/operators.md index c61d62f8..422802d2 100644 --- a/docs/lang/operators.md +++ b/docs/lang/operators.md @@ -292,7 +292,7 @@ but not some enum → `word` * `sizeof`: size of the argument in bytes; the argument can be an expression or a type, -and the result is a constant of type `word` +and the result is a constant of either `byte` or `word` type, depending on the actual value * `call`: calls a function via a pointer; the first argument is the pointer to the function; diff --git a/src/main/scala/millfork/compiler/AbstractExpressionCompiler.scala b/src/main/scala/millfork/compiler/AbstractExpressionCompiler.scala index 9f9e402a..9983b2d6 100644 --- a/src/main/scala/millfork/compiler/AbstractExpressionCompiler.scala +++ b/src/main/scala/millfork/compiler/AbstractExpressionCompiler.scala @@ -453,7 +453,10 @@ object AbstractExpressionCompiler { case FunctionCallExpression("sin", params) => if (params.size < 2) b else getExpressionTypeImpl(env, log, params(1), loosely) case FunctionCallExpression("cos", params) => if (params.size < 2) b else getExpressionTypeImpl(env, log, params(1), loosely) case FunctionCallExpression("tan", params) => if (params.size < 2) b else getExpressionTypeImpl(env, log, params(1), loosely) - case FunctionCallExpression("sizeof", _) => w + case FunctionCallExpression("sizeof", params) => env.evalSizeof(params.head).requiredSize match { + case 1 => b + case 2 => w + } case FunctionCallExpression("%%", params) => params.map { e => getExpressionTypeImpl(env, log, e, loosely).size } match { case List(1, 1) | List(2, 1) => b case List(1, 2) | List(2, 2) => w