Direct comparison may have portability concerns because a constant may
have more precision than its counterpart. Even a direct cast before
a comparison may not work (e.g. Math.atan2() assert with gcc -m32 still
fails even when both sides have an explicit double cast). So use an
internal always-inline helper for float/double comparisons, which also
allows -Wfloat-equal warning to be suppressed in a single helper; add
a clang pragma option so that both gcc and clang suppress the warning.
Other changes:
* Add -Wfloat-equal warning back to the Makefile.
* Fix all internal float comparison call sites to use the helper.
* Add code policy check for probable floating point comparison
(not very important with -Wfloat-equal enabled).
* Add minimal CBOR config options.
* Add 'CBOR' built-in YAML metadata.
* Add a public C API for CBOR.
* Remove examples/cmdline support for extras/cbor, use built-in CBOR
instead.
* Makefile, dist/tools changes.
* Rewrite CBOR extra to use Duktape internal helpers, also some related
refactoring.
* Add DUK_USE_NATIVE_STACK_CHECK config option.
* Add internal duk_native_stack_check() helper which checks and
throws if DUK_USE_NATIVE_STACK_CHECK() indicates we're out of
stack space.
* Add initial call sites for duk_native_stack_check(). These are
in addition to existing recursion limit checks.
* Add stack check example to cmdline example and 'duk' build on
Linux. Disabled by default for now.
* Remove DUK_USE_USER_DECLARE which hasn't been necessary since
Duktape 2.0. Add release note for removal.
* Downgrade or remove FIXMEs in config-options.
* Remove config/other-defines YAML files; they were out of date and
didn't really have a good use case.
* Fix Ecmascript -> ECMAScript spelling in feature and config options.
Also a few instances in debugger and cmdline example.
* Add DUK_BSWAP64() fill-in when 64-bit types available.
* Add DUK_BSWAP16(), DUK_BSWAP32(), and DUK_BSWAP64() GCC and Clang
built-ins. These are nice but unnecessary except at low optimizations
because the macros compile down to proper bswap instructions.
* Improve bswap self tests.
* Change duk_bool_to to duk_small_uint_t from duk_small_int_t. This may
cause some sign warnings in calling code.
* Reject attempt to unpack an array-like value whose length is 2G or over;
previously was not checked explicitly, and the length was cast to duk_idx_t
with a sign change and the unpack would then later fail. Now it fails with
a clean RangeError.
* Add wrap check for Node.js Buffer.concat().
* API DUK_TYPE_xxx, DUK_TYPE_MASK_xxx, flag constants etc are now unsigned.