Add true and false as keywords in factor() and c_factor(). After reading a name, check before treating it as a variable:
if (streq(name, "true")) { return 1; }
if (streq(name, "false")) { return 0; }
In the compiler, emit i64.const 1 or i64.const 0. In Zig, these are bool values. In our language, they're the integers 1 and 0. The behavior is identical when used with and, or, and if.
check_both("true", 1);
check_both("false", 0);
check_both("true and false", 0);
check_both("true or false", 1);
### Arrays