зеркало из https://github.com/mozilla/pjs.git
Strict mode early error (strict option warning) on assignment to declared const (383902, r=jwalden).
This commit is contained in:
Родитель
0474b2589d
Коммит
a3685cb41e
|
@ -2182,8 +2182,16 @@ BindNameToSlot(JSContext *cx, JSCodeGenerator *cg, JSParseNode *pn)
|
|||
}
|
||||
break;
|
||||
default:
|
||||
if (pn->isConst())
|
||||
if (pn->isConst()) {
|
||||
if (cg->needStrictChecks()) {
|
||||
JSAutoByteString name;
|
||||
if (!js_AtomToPrintableString(cx, atom, &name) ||
|
||||
!ReportStrictModeError(cx, CG_TS(cg), cg, pn, JSMSG_READ_ONLY, name.ptr())) {
|
||||
return JS_FALSE;
|
||||
}
|
||||
}
|
||||
pn->pn_op = op = JSOP_NAME;
|
||||
}
|
||||
}
|
||||
|
||||
if (dn->isGlobal()) {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
url-prefix ../../jsreftest.html?test=js1_8_5/regress/
|
||||
script regress-383902.js
|
||||
script regress-500528.js
|
||||
script regress-533876.js
|
||||
script regress-541255-0.js
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/*
|
||||
* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/licenses/publicdomain/
|
||||
*/
|
||||
|
||||
var c = 0;
|
||||
|
||||
function f(a) {
|
||||
const b = a;
|
||||
try {
|
||||
eval('"use strict"; b = 1 + a; c = 1');
|
||||
assertEq(0, 1);
|
||||
} catch (e) {
|
||||
assertEq(e.name, 'TypeError');
|
||||
assertEq(0, c);
|
||||
assertEq(a, b);
|
||||
}
|
||||
}
|
||||
|
||||
var w = 42;
|
||||
f(w);
|
||||
|
||||
c = 2;
|
||||
try {
|
||||
eval('"use strict"; function g(x) { const y = x; y = 1 + x; } c = 3');
|
||||
assertEq(0, 1);
|
||||
} catch (e) {
|
||||
assertEq(e.name, 'TypeError');
|
||||
assertEq(2, c);
|
||||
}
|
||||
|
||||
c = 4;
|
||||
try {
|
||||
eval('"use strict"; const z = w; z = 1 + w; c = 5');
|
||||
assertEq(0, 1);
|
||||
} catch (e) {
|
||||
assertEq(e.name, 'TypeError');
|
||||
assertEq(4, c);
|
||||
assertEq('z' in this, false);
|
||||
}
|
||||
|
||||
reportCompare(0, 0, "ok");
|
Загрузка…
Ссылка в новой задаче