union {
uint uint_32;
int int_32;
- bool b;
};
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
uint tag;
}
bool booleanValue() const {
- return b;
+ return int_32;
}
double doubleValue() const {
return dbl;
}
bool booleanValue() const {
- return b;
+ return int_32;
}
double doubleValue() const {
return dbl;
{
Value v;
v.tag = Boolean_Type;
- v.b = b;
+ v.int_32 = b;
return v;
}
{
Value v;
v.tag = Boolean_Type;
- v.b = b;
+ v.int_32 = b;
return v;
}
template <Value::ValueType> struct ValueOffsetHelper;
template <> struct ValueOffsetHelper<Value::Boolean_Type>
{
- enum { DataOffset = offsetof(ValueData, b) };
+ enum { DataOffset = offsetof(ValueData, int_32) };
};
template <> struct ValueOffsetHelper<Value::Undefined_Type>
case Value::Integer_Type:
__qmljs_string_from_number(ctx, result, value->int_32);
break;
- default: // double
- __qmljs_string_from_number(ctx, result, value->doubleValue());
+ default: // number
+ __qmljs_string_from_number(ctx, result, value->asDouble());
break;
} // switch
inline void __qmljs_ne(Context *ctx, Value *result, const Value *left, const Value *right)
{
__qmljs_eq(ctx, result, left, right);
- result->b = !result->b;
+ result->int_32 = !(bool)result->int_32;
}
inline void __qmljs_se(Context *ctx, Value *result, const Value *left, const Value *right)
Jump booleanConversion = branch32(NotEqual, tag, TrustedImm32(VM::Value::Boolean_Type));
Address data = temp;
- data.offset += offsetof(VM::ValueData, b);
+ data.offset += offsetof(VM::ValueData, int_32);
load32(data, Gpr0);
Jump testBoolean = jump();
}
testBoolean.link(this);
- Jump target = branch32(Equal, Gpr0, TrustedImm32(1));
+ Jump target = branch32(NotEqual, Gpr0, TrustedImm32(0));
_patches[s->iftrue].append(target);
jumpToBlock(s->iffalse);