author | Luke Wagner <luke@mozilla.com> |
Fri, 24 Oct 2014 12:31:30 -0500 | |
changeset 212297 | 1090f3645eb3c17beeddfc22ee2a441ba781c93b |
parent 212296 | b6d24dc1b01f8904165b5278363f7d67235384f8 |
child 212298 | fcd719ea99902352255b7f18188b2853fb6716d9 |
push id | 27704 |
push user | kwierso@gmail.com |
push date | Sat, 25 Oct 2014 01:25:30 +0000 |
treeherder | mozilla-central@e37231060eb4 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bbouvier |
bugs | 1088328 |
milestone | 36.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
js/src/asmjs/AsmJSValidate.cpp | file | annotate | diff | comparison | revisions | |
js/src/jit-test/tests/asm.js/testBasic.js | file | annotate | diff | comparison | revisions |
--- a/js/src/asmjs/AsmJSValidate.cpp +++ b/js/src/asmjs/AsmJSValidate.cpp @@ -6848,21 +6848,25 @@ ParseFunction(ModuleCompiler &m, ParseNo Directives newDirectives = directives; AsmJSParseContext funpc(&m.parser(), outerpc, fn, funbox, &newDirectives, outerpc->staticLevel + 1, outerpc->blockidGen, /* blockScopeDepth = */ 0); if (!funpc.init(tokenStream)) return false; - if (!m.parser().functionArgsAndBodyGeneric(fn, fun, Normal, Statement)) - return false; - - if (tokenStream.hadError() || directives != newDirectives) - return false; + if (!m.parser().functionArgsAndBodyGeneric(fn, fun, Normal, Statement)) { + if (tokenStream.hadError() || directives == newDirectives) + return false; + + return m.fail(nullptr, "encountered new directive"); + } + + MOZ_ASSERT(!tokenStream.hadError()); + MOZ_ASSERT(directives == newDirectives); outerpc->blockidGen = funpc.blockidGen; fn->pn_blockid = outerpc->blockid(); *fnOut = fn; return true; }
--- a/js/src/jit-test/tests/asm.js/testBasic.js +++ b/js/src/jit-test/tests/asm.js/testBasic.js @@ -14,16 +14,17 @@ assertAsmTypeFail(USE_ASM + 'var f = f;' assertAsmTypeFail(USE_ASM + 'var f=0; function f(){} return f'); assertAsmTypeFail(USE_ASM + 'var f=glob.Math.imul; return {}'); assertAsmTypeFail('glob', USE_ASM + 'var f=glob.Math.imul; function f(){} return f'); assertAsmTypeFail('glob','foreign', USE_ASM + 'var f=foreign.foo; function f(){} return f'); assertAsmTypeFail(USE_ASM + 'function f(){} var f=[f,f]; return f'); assertAsmTypeFail(USE_ASM + 'function f() 0; return f'); assertAsmTypeFail('"use strict";' + USE_ASM + 'function f() {} return f'); assertAsmTypeFail(USE_ASM + '"use strict"; function f() {} return f'); +assertAsmTypeFail(USE_ASM + 'function f() { "use strict"; } return f'); assertEq(asmLink(asmCompile(USE_ASM + 'function f(){} return f'))(), undefined); assertEq(asmLink(asmCompile(USE_ASM + 'function f(){;} return f'))(), undefined); assertAsmTypeFail(USE_ASM + 'function f(i,j){;} return f'); assertEq(asmLink(asmCompile('"use asm";; function f(){};;; return f;;'))(), undefined); assertAsmTypeFail(USE_ASM + 'function f(x){} return f'); assertAsmTypeFail(USE_ASM + 'function f(){return; return 1} return f'); assertEq(asmLink(asmCompile(USE_ASM + 'function f(x){x=x|0} return f'))(42), undefined); assertEq(asmLink(asmCompile(USE_ASM + 'function f(x){x=x|0; return x|0} return f'))(42), 42);