* Strings with 0xFF byte prefix are considered special symbols: they have
typeof "symbol" but still mostly behave as strings (e.g. allow ToString)
so that existing code dealing with internal keys, especially inside
Duktape, can work with fewer changes.
* Strings with 0x80 byte prefix are global symbols, e.g. Symbol.for('foo')
creates the byte representatio: 0x80 "foo"
* Strings with 0x81 byte prefix are unique symbols; the 0x81 byte is followed
by the Symbol description, and an internal string component ensuring
uniqueness is separated by a 0xFF byte (which can never appear anywhere in
an extended UTF-8 string). The unique suffix is up to Duktape internals,
currently two 32-bit counters are used. For example:
0x81 "mySymbol" 0xFF "0-17".
* Well-known symbols use the 0x81 prefix but lack a unique suffix, so their
format is 0x81 <description> 0xFF.
* ES6 distinguishes between an undefined symbol description and an empty
string symbol description. This distinction is not currently visible via
Ecmascript bindings but may be visible in the future. Append an extra
0xFF to the unique suffix when the description is undefined, i.e.
0x81 0xFF <unique suffix> 0xFF.
* Split client/target commands into separate lists for metadata purposes.
They don't overlap so e.g. duk_debug.js will merge the lists for now.
DukLuv JSON proxy uses the lists separately which is more correct.
* Ensure all metadata is top level keyed. This allows the metadata files
to be merged.
Duk_debug.js fixes for Throw notify
- Ignore unknown Notify messages, this is probably a better default than
being strict and dropping the connection.
- Add Throw notify command number (earlier GC notify was unused).
- Add minimal web UI integration to report "THROW: xxx" or "UNCAUGHT: xxx"
from Throw notifys
Add 'make rundebug' convenience duk_debug target with logging.