Drafts of the ES5 spec required a type error to be raised when an
assignment to "arguments" is evaluated in function code. In
ECMA/TC39/2009/050, this condition has been changed to a syntax error
in all code. By the rules of chapter 16, implementations must report
it early.
These macros were intended to help avoid passing unused parameters
when JS_ARENAMETER is not defined, but they're not worth the trouble.
The unused parameter doesn't elicit warnings, and the performance
impact of passing the unneeded argument is negligible.
This also removes support for JS_ARENA_CONST_ALIGN_MASK, which is not
used.
The flag TSF_DESTRUCTURING is used by the parser to modify the way
variables in the destructuring pattern get represented in the parse
tree. It is never set or used by the tokenizer. This patch moves it
to JSTreeContext::flags, where it belongs, now that that field is wide
enough to hold it.
It also renames the flag TCF_DECL_DESTRUCTURING, since the flag is
only used for destructuring patterns that occur in declarations; it is
not set when processing assignment-like destructuring patterns.
All the bits in this uint16 field are currently in use. Adding bits
for projects like strict mode entails relocating existing flags, which
is additional work. Furthermore, it seems that this has already
inspired people to put flags in places they don't belong:
TSF_DESTRUCTURING is a JSTokenStream flag, but is only used by the
parser.
This patch widens the field to 32 bits, and adjusts JSFunctionBox and
a few other places to match.
We should really replace these all with bitfields.
Pre-patch, the initial static level at which a script should be
compiled to run is passed in the upper sixteen bits of the tcflags
parameter to JSCompiler::compileScript; because JSTreeContext::tcflags
is a uint16, while the tcflags parameter is a uint32, we know the
parameter's upper bits are free.
However, we would like to enlarge JSTreeContext::tcflags to 32 bits,
as we already have a handful of new flags that belong there. This
patch moves the static level to its own parameter, which has a default
argument.
This code seems to assume that one can proceed if pn3 is NULL, but we
never check it again further down. Instead, we create TOK_COLON nodes
whose left (and perhaps right) children are NULL. It seems to me that
the TOK_RC case in js_EmitTree will choke on this.