#1 actually seems like the the right thing to do. The API doc is pretty
clear that IsInt32/IsUInt32 should only return true if the value is a
32-bit value, which -0.0 is not, so this is simply a bug. It's fixed in
r10361.

Danno

On Tue, Jan 10, 2012 at 2:50 AM, Joshua Bell <[email protected]> wrote:

> It appears that the v8::Value::IsInt32() test (and presumably isUint32(),
> but I haven't verified) is returning true for -0 (negative zero).
>
> This was noticed in serialization code like this:
>
> ... if (value->IsInt32()) {
>   write_optimized_int32(value->Int32Value());
> } else if (value->IsNumber())
>   write_unoptimized_double(value.As<v8::Number()->Value());
> } ...
>
> Negative zero doesn't round-trip - it needs the double path.
>
> (In the following, assume "egal" in the
> http://wiki.ecmascript.org/doku.php?id=harmony:egal sense)
>
> Three obvious fixes are (1) change v8's IsInt32 to return false for -0,
> (2) introduce a "is this egal to its int32 representation?" test in v8,
> (3) change the calling code to verify that the Int32 value is egal to its
> double value (or just special case -0)
>
> I assume that #1 is undesirable as a breaking change (and I agree) and
> adding #2 is undesirable as an unimportant API to maintain (and I agree),
> and plan to proceed with #3. Any disagreement?
>
>
>  --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to