Partial fix for #13761.

If you understand the interpreter code more precisely, you can improve the code flow by using "exit the function quickly if fails" approach. For example:

``cpp
        int res;
        if (isTrueBool(result))
            res = 1;
        else if (result->isBool(false))
        {
            result = interpret(e->e2, istate);
            if (exceptionOrCant(result))
                return;

            if (result->op == TOKvoidexp)
            {
                assert(e->type->ty == Tvoid);
                result = NULL;
                return;
            }
            if (!CTFEExp::isCantExp(result))
            {
                if (result->isBool(false))
                    res = 0;
                else if (isTrueBool(result))
                    res = 1;
                else
                {
                    result->error("%s cannot be interpreted as a boolean", result->toChars());
                    result = CTFEExp::cantexp;
                    return;   // new!
                }
            }
        }
        else
        {
            result->error("%s cannot be interpreted as a boolean", result->toChars());
            result = CTFEExp::cantexp;
            return;   // new!
        }
        // Now, in here CTFEExp::isCantExp(result) is always false.
        if (/*!CTFEExp::isCantExp(result) && */goal != ctfeNeedNothing)
            result = new IntegerExp(e->loc, res, e->type);
```