As usual, we don't break without broadcasting warnings and giving
downstreams a decent interval to adapt.
The uses of opt-in versioning are pretty much all XUL-based stuff and
Mozilla-only content, much of which we host. Converting to 1JS requires
some engine work, but also careful reading and rewriting of the
dependent code. This is non-trivial; we could use some help.
Anyone have JS static analysis tools for rewriting? A long shot, but we
did this for C++ back in the day and JS analysis is all the rage now.
/be
Brendan Eich wrote:
We definitely should remove version= usage when we can. We could also
migrate any version=1.7 hold-outs to 1.8 as an intermediate step, if
that's worthwhile.
The only engine source files containing JSVERSION are
frontend/Parser.cpp
frontend/Parser.h
jsapi.cpp
jscntxt.cpp
jscntxt.h
jspubtd.h
jsscript.cpp
shell/js.cpp
vm/GlobalObject.cpp
vm/Keywords.h
vm/SelfHosting.cpp
If I'm not mistaken, the only actual version tests among these are
frontend/Parser.cpp: if (version == JSVERSION_1_7 && !forEach
&& !forOf) {
frontend/Parser.cpp: if (version == JSVERSION_1_7 && !forEach
&& !forOf)
frontend/Parser.cpp: if (versionNumber() == JSVERSION_1_7) {
frontend/Parser.cpp: if (versionNumber() != JSVERSION_ECMA_3) {
frontend/Parser.cpp: if (versionNumber() == JSVERSION_1_7 &&
frontend/Parser.h: return versionNumber() >= JSVERSION_1_6;
The last is to allow 'for each(...)' from E4X (ECMA-357). That's a
separately actionable cleanup item, which I think we could do now that
for-of is implemented.
This one from the middle of the grep output:
frontend/Parser.cpp: if (versionNumber() != JSVERSION_ECMA_3) {
is about a de-facto semicolon insertion rule that ES5 codified (ASI
after do-while). We should just do it unconditionally.
The rest are JS1.7 cruft, see this recurring comment:
// In JS 1.7 only, for (var [K, V] in EXPR) has a special meaning.
Here is where migrating away from JS1.7 and even from opt-in
versioning ASAP would help.
The only other version tests are to enable 'let' and 'yield' as
keywords. ES6 (1JS) proposes different and opt-in-free ways to handle
these. We could use two bugs and independent efforts.
/be
David Bruant wrote:
Hi,
I've been thinking about Dave Herman's comment one the generator bug
[1] for a couple of days. Specifically:
"The explicit versioning is Mozilla-specific, and is basically a
failed experiment; the overwhelming majority of the web doesn't use
it. The HTML5 zeitgeist and the "One JavaScript" (1JS) movement,
meanwhile, have moved away from opt-in versioning as an anti-pattern."
So maybe it is time to slowly remove Mozilla-specific versioning?
David
[1] https://bugzilla.mozilla.org/show_bug.cgi?id=666399#c56
_______________________________________________
dev-tech-js-engine-internals mailing list
dev-tech-js-engine-internals@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals
_______________________________________________
dev-tech-js-engine-internals mailing list
dev-tech-js-engine-internals@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals
_______________________________________________
dev-tech-js-engine-internals mailing list
dev-tech-js-engine-internals@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-js-engine-internals