mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 00:05:36 +00:00
Bug 1385428 - Disable asm.js compilation in accessor methods. r=luke
--HG-- extra : rebase_source : a67e1821f4f579d47d88204c487964d471b58d5d
This commit is contained in:
parent
5c9399ceab
commit
fa5f8209e7
@ -527,6 +527,11 @@ class ParseContext : public Nestable<ParseContext>
|
||||
return sc_->isFunctionBox() && sc_->asFunctionBox()->function()->isMethod();
|
||||
}
|
||||
|
||||
bool isGetterOrSetter() const {
|
||||
return sc_->isFunctionBox() && (sc_->asFunctionBox()->function()->isGetter() ||
|
||||
sc_->asFunctionBox()->function()->isSetter());
|
||||
}
|
||||
|
||||
uint32_t scriptId() const {
|
||||
return scriptId_;
|
||||
}
|
||||
|
19
js/src/jit-test/tests/asm.js/bug1385428.js
Normal file
19
js/src/jit-test/tests/asm.js/bug1385428.js
Normal file
@ -0,0 +1,19 @@
|
||||
if (!('oomTest' in this))
|
||||
quit();
|
||||
|
||||
loadFile(`
|
||||
try {
|
||||
Array.prototype.splice.call({ get length() {
|
||||
"use asm"
|
||||
function f() {}
|
||||
return f;
|
||||
} });
|
||||
} catch (e) {
|
||||
assertEq(e, s2, "wrong error thrown: " + e);
|
||||
}
|
||||
`);
|
||||
function loadFile(lfVarx) {
|
||||
try {
|
||||
oomTest(new Function(lfVarx));
|
||||
} catch (lfVare) {}
|
||||
}
|
@ -138,6 +138,10 @@ assertTypeFailInEval('function *f() { "use asm"; function g() {} return g }');
|
||||
assertTypeFailInEval('f => { "use asm"; function g() {} return g }');
|
||||
assertTypeFailInEval('var f = { method() {"use asm"; return {}} }');
|
||||
assertAsmTypeFail(USE_ASM + 'return {m() {}};');
|
||||
assertTypeFailInEval('var f = { get p() {"use asm"; return {}} }');
|
||||
assertAsmTypeFail(USE_ASM + 'return {get p() {}};');
|
||||
assertTypeFailInEval('var f = { set p(x) {"use asm"; return {}} }');
|
||||
assertAsmTypeFail(USE_ASM + 'return {set p(x) {}};');
|
||||
assertTypeFailInEval('class f { constructor() {"use asm"; return {}} }');
|
||||
assertAsmTypeFail(USE_ASM + 'class c { constructor() {}}; return c;');
|
||||
|
||||
|
@ -8665,7 +8665,7 @@ EstablishPreconditions(JSContext* cx, AsmJSParser& parser)
|
||||
return Warn(parser, JSMSG_USE_ASM_TYPE_FAIL, "Disabled by arrow function context");
|
||||
|
||||
// Class constructors are also methods
|
||||
if (parser.pc->isMethod())
|
||||
if (parser.pc->isMethod() || parser.pc->isGetterOrSetter())
|
||||
return Warn(parser, JSMSG_USE_ASM_TYPE_FAIL, "Disabled by class constructor or method context");
|
||||
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user