The following code:
import Toybox.Lang;
function foo() as Boolean {
return true;
}
function bar() as Void {
(foo() || true);
}
reports
ERROR: <device>: Could not parse Monkey C IR.
It's caused by line 7.
If I change the program to:
import Toybox.Lang;
function foo() as Number {
return 4;
}
function bar() as Void {
(foo() + 1);
}
Then with type checking enabled I get:
ERROR: <device>:bug.mc:7: Cannot perform operation 'add' on types 'Null' and '$.Toybox.Lang.Number'.
So we're doing a bit better. It generated a valid .mir file, but note that foo() returns a Number, not Null, so the type checker seems like it's confused.
Looking at the .mir file though, I see:
%tmp.1 = self;
%tmp.2 = getv const %tmp.1 :foo;
invoke %tmp.1 %tmp.2();
%tmp.3 = 1;
%tmp.4 = add null %tmp.3;
So it appears to completely ignore the result of the call, and then pulls an add of null and %tmp.3 out of the air. So the type checker's complaint is valid (based on the .mir that got generated). So it looks like incorrect mir files in both cases; but one parses and the other doesn't.