ExpressionEvaluator icon indicating copy to clipboard operation
ExpressionEvaluator copied to clipboard

Nested false inside true `if` causing result to set to null.

Open Xjph opened this issue 3 years ago • 2 comments

My original where I discovered the issue was more complex, but I distilled it down to the simplest reproducible case I could find which I've placed in this fiddle: https://dotnetfiddle.net/9NzZ0O

Note the final script which produces a null result when untyped, and throws a null reference exception when a type is supplied.

Xjph avatar Aug 08 '21 02:08 Xjph

Hello @Xjph, sorry for my late response. Need to investigate a bit. But for now you can easily manage it by returning theresult variable each times after if blocks:

--------------------------------------------
result = 0;
if (true)
{
    if (true)
    {
        result = 1;
    }
}
return result;
---------------- Result --------------------
No type:1
With type:1

--------------------------------------------
result = 0;
if (false)
{
    if (false)
    {
        result = 1;
    }
}
return result;
---------------- Result --------------------
No type:0
With type:0

--------------------------------------------
result = 0;
if (false)
{
    if (true)
    {
        result = 1;
    }
}
return result;
---------------- Result --------------------
No type:0
With type:0

--------------------------------------------
result = 0;
if (true)
{
    if (false)
    {
        result = 1;
    }
}
return result;
---------------- Result --------------------
No type:0
With type:0

or simpler : with evaluator.OptionScriptNeedSemicolonAtTheEndOfLastExpression = false;

--------------------------------------------
result = 0;
if (true)
{
    if (true)
    {
        result = 1;
    }
}
result
---------------- Result --------------------
No type:1
With type:1

--------------------------------------------
result = 0;
if (false)
{
    if (false)
    {
        result = 1;
    }
}
result
---------------- Result --------------------
No type:0
With type:0

--------------------------------------------
result = 0;
if (false)
{
    if (true)
    {
        result = 1;
    }
}
result
---------------- Result --------------------
No type:0
With type:0

--------------------------------------------
result = 0;
if (true)
{
    if (false)
    {
        result = 1;
    }
}
result
---------------- Result --------------------
No type:0
With type:0

codingseb avatar Aug 25 '21 09:08 codingseb

The explicit return is an acceptable workaround for my use case, so certainly no need to rush on this as far as I'm concerned.

Thanks for your time!

Xjph avatar Aug 25 '21 14:08 Xjph