mirror of https://github.com/tc39/test262.git
Split up indirect and direct eval cases
This commit is contained in:
parent
bab4da88e3
commit
0e77b43c9b
|
@ -0,0 +1,16 @@
|
|||
// Copyright (C) 2020 Rick Waldron. All rights reserved.
|
||||
// This code is governed by the BSD license found in the LICENSE file.
|
||||
|
||||
/*---
|
||||
desc: No error if `arguments` in StatementList of eval
|
||||
info: |
|
||||
For indirect eval, the "Additional Early Error Rules for Eval Inside Initializer"
|
||||
(in #sec-performeval-rules-in-initializer) are NOT applicable.
|
||||
features: [class, class-fields-public]
|
||||
template: initializer-indirect-eval-arguments
|
||||
---*/
|
||||
|
||||
//- initializer
|
||||
arguments
|
||||
//- arrow-body
|
||||
() => arguments
|
|
@ -18,7 +18,7 @@ info: |
|
|||
...
|
||||
For all other grammatical productions, recurse on all nonterminals. If any piece returns true, then return true. Otherwise return false.
|
||||
features: [class, class-fields-public]
|
||||
template: initializer-eval-arguments
|
||||
template: initializer-direct-eval-arguments
|
||||
---*/
|
||||
|
||||
//- initializer
|
||||
|
@ -27,5 +27,3 @@ arguments
|
|||
() => arguments
|
||||
//- earlyerror
|
||||
SyntaxError
|
||||
//- executionerror
|
||||
ReferenceError
|
||||
|
|
|
@ -6,18 +6,14 @@ esid: sec-performeval-rules-in-initializer
|
|||
path: language/statements/class/elements/nested-indirect-
|
||||
name: indirect eval
|
||||
features: [class, class-fields-public]
|
||||
flags: [noStrict]
|
||||
---*/
|
||||
|
||||
var executed = false;
|
||||
var /*{ initializer }*/ = 1;
|
||||
class C {
|
||||
x = () => {
|
||||
var t = () => { (0, eval)('executed = true; /*{ initializer }*/;'); };
|
||||
t();
|
||||
var t = () => (0, eval)('/*{ initializer }*/;');
|
||||
return t();
|
||||
}
|
||||
}
|
||||
|
||||
assert.throws(/*{ executionerror }*/, function() {
|
||||
new C().x();
|
||||
});
|
||||
|
||||
assert.sameValue(executed, false);
|
||||
assert.sameValue(new C().x(), /*{ initializer }*/);
|
|
@ -6,15 +6,12 @@ esid: sec-performeval-rules-in-initializer
|
|||
path: language/statements/class/elements/indirect-
|
||||
name: indirect eval
|
||||
features: [class, class-fields-public]
|
||||
flags: [noStrict]
|
||||
---*/
|
||||
|
||||
var executed = false;
|
||||
var /*{ initializer }*/ = 1;
|
||||
class C {
|
||||
x = (0, eval)('executed = true; /*{ initializer }*/;');
|
||||
x = (0, eval)('/*{ initializer }*/;');
|
||||
}
|
||||
|
||||
assert.throws(/*{ executionerror }*/, function() {
|
||||
new C();
|
||||
});
|
||||
|
||||
assert.sameValue(executed, true);
|
||||
assert.sameValue(new C().x, /*{ initializer }*/);
|
|
@ -6,15 +6,15 @@ esid: sec-performeval-rules-in-initializer
|
|||
path: language/statements/class/elements/nested-private-indirect-
|
||||
name: indirect eval
|
||||
features: [class, class-fields-private]
|
||||
flags: [noStrict]
|
||||
---*/
|
||||
|
||||
var executed = false;
|
||||
var /*{ initializer }*/ = 1;
|
||||
class C {
|
||||
#x = (0, eval)('executed = true; /*{ initializer }*/;');
|
||||
#x = (0, eval)('/*{ initializer }*/;');
|
||||
x() {
|
||||
return this.#x;
|
||||
}
|
||||
}
|
||||
|
||||
assert.throws(/*{ executionerror }*/, function() {
|
||||
new C();
|
||||
});
|
||||
|
||||
assert.sameValue(executed, true);
|
||||
assert.sameValue(new C().x(), /*{ initializer }*/);
|
|
@ -6,15 +6,14 @@ esid: sec-performeval-rules-in-initializer
|
|||
path: language/statements/class/elements/private-indirect-
|
||||
name: indirect eval
|
||||
features: [class, class-fields-private]
|
||||
flags: [noStrict]
|
||||
---*/
|
||||
|
||||
var executed = false;
|
||||
var /*{ initializer }*/ = 1;
|
||||
class C {
|
||||
#x = (0, eval)('executed = true; /*{ initializer }*/;');
|
||||
#x = (0, eval)('/*{ initializer }*/;');
|
||||
x() {
|
||||
return this.#x;
|
||||
}
|
||||
}
|
||||
|
||||
assert.throws(/*{ executionerror }*/, function() {
|
||||
new C();
|
||||
});
|
||||
|
||||
assert.sameValue(executed, true);
|
||||
assert.sameValue(new C().x(), /*{ initializer }*/);
|
|
@ -6,15 +6,12 @@ esid: sec-performeval-rules-in-initializer
|
|||
path: language/expressions/class/elements/nested-indirect-
|
||||
name: indirect eval
|
||||
features: [class, class-fields-public]
|
||||
flags: [noStrict]
|
||||
---*/
|
||||
|
||||
var executed = false;
|
||||
var /*{ initializer }*/ = 1;
|
||||
var C = class {
|
||||
x = () => (0, eval)('executed = true; /*{ initializer }*/;');
|
||||
x = () => (0, eval)('/*{ initializer }*/;');
|
||||
}
|
||||
|
||||
assert.throws(/*{ executionerror }*/, function() {
|
||||
new C().x();
|
||||
});
|
||||
|
||||
assert.sameValue(executed, true);
|
||||
assert.sameValue(new C().x(), /*{ initializer }*/);
|
|
@ -6,15 +6,13 @@ esid: sec-performeval-rules-in-initializer
|
|||
path: language/expressions/class/elements/indirect-
|
||||
name: indirect eval
|
||||
features: [class, class-fields-public]
|
||||
flags: [noStrict]
|
||||
---*/
|
||||
|
||||
var /*{ initializer }*/ = 1;
|
||||
var executed = false;
|
||||
var C = class {
|
||||
x = (0, eval)('executed = true; /*{ initializer }*/;');
|
||||
x = (0, eval)('/*{ initializer }*/;');
|
||||
}
|
||||
|
||||
assert.throws(/*{ executionerror }*/, function() {
|
||||
new C();
|
||||
});
|
||||
|
||||
assert.sameValue(executed, true);
|
||||
assert.sameValue(new C().x, /*{ initializer }*/);
|
|
@ -6,18 +6,15 @@ esid: sec-performeval-rules-in-initializer
|
|||
path: language/expressions/class/elements/nested-private-indirect-
|
||||
name: indirect eval
|
||||
features: [class, class-fields-private]
|
||||
flags: [noStrict]
|
||||
---*/
|
||||
|
||||
var executed = false;
|
||||
var /*{ initializer }*/ = 1;
|
||||
var C = class {
|
||||
#x = () => (0, eval)('executed = true; /*{ initializer }*/;');
|
||||
#x = () => (0, eval)('/*{ initializer }*/;');
|
||||
x() {
|
||||
this.#x();
|
||||
return this.#x();
|
||||
}
|
||||
}
|
||||
|
||||
assert.throws(/*{ executionerror }*/, function() {
|
||||
new C().x();
|
||||
});
|
||||
|
||||
assert.sameValue(executed, true);
|
||||
assert.sameValue(new C().x(), /*{ initializer }*/);
|
|
@ -6,15 +6,15 @@ esid: sec-performeval-rules-in-initializer
|
|||
path: language/expressions/class/elements/private-indirect-
|
||||
name: indirect eval
|
||||
features: [class, class-fields-private]
|
||||
flags: [noStrict]
|
||||
---*/
|
||||
|
||||
var executed = false;
|
||||
var /*{ initializer }*/ = 1;
|
||||
var C = class {
|
||||
#x = (0, eval)('executed = true; /*{ initializer }*/;');
|
||||
#x = (0, eval)('/*{ initializer }*/;');
|
||||
x() {
|
||||
return this.#x;
|
||||
}
|
||||
}
|
||||
|
||||
assert.throws(/*{ executionerror }*/, function() {
|
||||
new C();
|
||||
});
|
||||
|
||||
assert.sameValue(executed, true);
|
||||
assert.sameValue(new C().x(), /*{ initializer }*/);
|
Loading…
Reference in New Issue