On Mon, May 23, 2011 at 04:29:55PM +0200, Markus Armbruster wrote: > Anthony Liguori <anth...@codemonkey.ws> writes: > > >>> The actual value of the alert will surprise you :-) > >>> > >>> Integers in Javascript are actually represented as doubles > >>> internally which means that integer constants are only accurate up > >>> to 52 bits. > >>> > >>> So really, we should cap integers at 32-bit :-/ > >>> > >>> Have I mentioned recently that I really dislike JSON... > >> > >> NB, I am distinguishing between JSON the generic specification and > >> JSON as implemented in web browsers. JSON the specification has *no* > >> limitation on integers. > > > > The spec has no notion of integers at all. Here's the relevant > > It doesn't differentiate between integers and floating-point numbers > *syntactically*. There are just numbers. Some of them happen to be > integers. > > > text. Note that the BNF only has a single entry point for numbers. It > > does not distinguish between integers and floating point numbers. > > Also, the only discussion of valid numbers is about whether the number > > can be represented as a rational number. I think the only way to read > > the spec here is that *all* numbers are meant to be represented as > > floating point numbers. > > > > Regards, > > > > Anthony Liguori > > > > 2.4. Numbers > > > > The representation of numbers is similar to that used in most > > programming languages. A number contains an integer component that > > may be prefixed with an optional minus sign, which may be followed by > > a fraction part and/or an exponent part. > > > > Octal and hex forms are not allowed. Leading zeros are not allowed. > > > > A fraction part is a decimal point followed by one or more digits. > > > > An exponent part begins with the letter E in upper or lowercase, > > which may be followed by a plus or minus sign. The E and optional > > sign are followed by one or more digits. > > > > Numeric values that cannot be represented as sequences of digits > > (such as Infinity and NaN) are not permitted. > > Therefore, the number 1234567890123456789 is permitted. > > > > > > > number = [ minus ] int [ frac ] [ exp ] > > > > decimal-point = %x2E ; . > > > > digit1-9 = %x31-39 ; 1-9 > > > > e = %x65 / %x45 ; e E > > > > exp = e [ minus / plus ] 1*DIGIT > > > > frac = decimal-point 1*DIGIT > > > > int = zero / ( digit1-9 *DIGIT ) > > > > minus = %x2D ; - > > > > plus = %x2B ; + > > > > zero = %x30 ; 0 > > There's more: > > 4. Parsers > > A JSON parser transforms a JSON text into another representation. A > JSON parser MUST accept all texts that conform to the JSON grammar. > A JSON parser MAY accept non-JSON forms or extensions.
Incidentally, we should likely use the QMP capabilities handshake to optionally enable parsing support for Infinity/-Infinity/NaN in QEMU since that seems to be a common extension used[1]. Regards, Daniel [1] http://deron.meranda.us/python/comparing_json_modules/numbers -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|