Change function .arguments and .caller behavior to be in line with the
latest specification:
* No own .arguments or .caller property for Function instances. V8 provides
non-strict functions with null .caller and .arguments properties (but they
are not required by the specification).
* Inherit .arguments and .caller thrower from Function.prototype.
Also change %ThrowTypeError%.name to the empty string to match V8.
Restructure string intern check:
- Compute string hash and perform strtable lookup; if found, it
must already be a valid Symbol or valid WTF-8 data so no WTF-8
sanitization steps are needed. Return found string.
- Otherwise perform a "keepcheck" to see if the candidate string
can be used as is (i.e. it is valid Symbol or valid WTF-8).
If so, we know it's not in the strtable so intern the string.
- Otherwise the string needs WTF-8 sanitization. After sanitizing,
rehash the sanitized data, perform another strtable lookup and
return existing string or intern the sanitized string.
This speeds up string intern processing for (1) strings already in
the string table and (2) valid WTF-8 strings which should be the
vast majority of strings interned. Only strings that are invalid
WTF-8, i.e. contain uncombined surrogate pairs or outright data,
will need sanitization.
Other minor changes:
- Add some WTF-8 documentation to tentative 3.0 release notes.
- Add a 3.0 release entry.
* Remove lazy charlen support. Since we need to WTF-8 sanitize the entire
input string, charlen can be computed while validating (avoiding extra
book-keeping for ASCII eventually).
* Improve WTF-8 search forwards/backwards performance (no substring operations)
when the search string is valid UTF-8. Use reference implementation for
non-UTF-8 still, to be optimized later.
* Minor testcase improvements.
Join surrogate pairs (encoded in CESU-8) in string intern check,
with unoptimized code. This allows working on WTF-8 representation
when the joining is manually enabled. The test code is disabled by
default so should not affect current behavior.
Refactor tools/configure.py and util/dist.py to be just wrappers to
executing the Node.js based tooling. The wrapper .py files are both
Py2 and Py3 compatible. Node.js version must be >= 14.x.
NaN normalization check should use a full NaN check to decide when to
normalize, even when using partial NaN initialization. The fix here
is to switch to full NaN initialization in general.
Input 'val' pointer may be a value stack pointer, which may become
stale if the variable lookup reallocates the current value stack.
This can happen e.g. in a with(proxy).
Rename duk_is_null_or_undefined() to duk_is_nullish() to better match
current ECMAScript terminology. Keep duk_is_null_or_undefined() as a
deprecated API macro. Add internal DUK_TVAL_IS_NULLISH().
* Bump DUK_VERSION to 2.4.0.
* Release checklist updates.
* Releases file update.
* Finalize release notes.
* Remove experimental status from some API calls.
* Bump LICENSE.txt year range.
* Add new public symbols to API test.
* CBOR extra trivial compile warning fix.
* Compile warning fix when hex support disabled.
* Update test262 known issues.
* Update index page footprints.
* Improve options for thumb index page size build.
* Add missing "skip: true" metadata to a CBOR test.
* AUTHORS update.