/* C Type Conversions
*************************************************/
-static inline int32_t ValueAsBool(Value val) {
+static inline bool ValueAsBool(Value val) {
assert(IsBool(val));
- return (bool)val.as_uint64;
+ return (bool)(val.as_uint64 == VALUE_TRUE);
}
static inline int32_t ValueAsInt(Value val) {
}
static inline Value MakeBool(bool b) {
- return (Value){ .as_uint64 = b ? VALUE_TRUE : VALUE_FALSE };
+ return (Value){ .as_uint64 = (b ? VALUE_TRUE : VALUE_FALSE) };
}
static inline Value MakeInt(int32_t i) {
}
static inline Value OpGtEq(Value left, Value right) {
- return MakeNil();
+ Value result;
+ result = MakeBool(false);
+ return result;
}
static inline Value OpEq(Value left, Value right) {
- return MakeNil();
+ Value result;
+ if (IsBool(left)) {
+ result = MakeBool(ValueAsBool(left) == ValueAsBool(right));
+ } else {
+ result = MakeBool(false);
+ }
+ return result;
}
static inline Value OpNeq(Value left, Value right) {
- return MakeNil();
+ Value result;
+ if (IsBool(left)) {
+ printf("%d != %d\n", ValueAsBool(left), ValueAsBool(right));
+ result = MakeBool(ValueAsBool(left) != ValueAsBool(right));
+ } else {
+ result = MakeBool(false);
+ }
+ return result;
}