Changeset 223043 in webkit
- Timestamp:
- Oct 9, 2017 2:59:26 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r223037 r223043 1 2017-10-09 Oleksandr Skachkov <gskachkov@gmail.com> 2 3 Safari 10 /11 problem with if (!await get(something)). 4 https://bugs.webkit.org/show_bug.cgi?id=176685 5 6 Reviewed by Saam Barati. 7 8 * stress/async-await-basic.js: 9 (awaitEpression.async): 10 * stress/async-await-syntax.js: 11 (testTopLevelAsyncAwaitSyntaxSloppyMode.testSyntax): 12 (prototype.testTopLevelAsyncAwaitSyntaxStrictMode): 13 1 14 2017-10-08 Saam Barati <sbarati@apple.com> 2 15 -
trunk/JSTests/stress/async-await-basic.js
r209113 r223043 255 255 shouldBe("start:4 resume:throw1 resume:throw2", log.join(" ")); 256 256 257 var awaitEpression = async (value) => { 258 log.push("start:" + value); 259 if (!await false) 260 log.push('step 1'); 261 var t = ~await true; 262 log.push('step 2 ' + t); 263 264 var t1 = +await Promise.resolve(12345); 265 log.push('step 3 ' + t1); 266 267 var t2 = -await 54321; 268 log.push('step 4 ' + t2); 269 270 var t3 = !!!!!await Promise.resolve(true); 271 log.push('step 5 ' + t3); 272 273 try { 274 var t4 = ++await 1; 275 } catch(e) { 276 if (e instanceof ReferenceError) { 277 log.push('step 6 '); 278 } 279 } 280 281 try { 282 var t5 = --await 1; 283 } catch(e) { 284 if (e instanceof ReferenceError) { 285 log.push('step 7'); 286 } 287 } 288 289 return void await 'test'; 290 }; 291 log = []; 292 293 shouldBeAsync(undefined, () => awaitEpression(5)); 294 shouldBe("start:5 step 1 step 2 -2 step 3 12345 step 4 -54321 step 5 false step 6 step 7", log.join(" ")); 295 257 296 // MethoodDefinition SyntaxErrors 258 297 shouldThrowSyntaxError("var obj = { async foo : true };", "Unexpected token ':'. Expected a parenthesis for argument list."); -
trunk/JSTests/stress/async-await-syntax.js
r220449 r223043 35 35 testSyntax(`({async: 1})`); 36 36 testSyntax(`var asyncFn = async function() { await 1; };`); 37 38 testSyntax(`var asyncFn = async function() { var t = !await 1; };`); 39 testSyntax(`var asyncFn = async function() { var t = ~await 1; };`); 40 testSyntax(`var asyncFn = async function() { var t = typeof await 1; };`); 41 testSyntax(`var asyncFn = async function() { var t = void await 1; };`); 42 testSyntax(`var asyncFn = async function() { var t = !(await 1); };`); 43 testSyntax(`var asyncFn = async function() { var t = ~(await 1); };`); 44 testSyntax(`var asyncFn = async function() { var t = typeof (await 1); };`); 45 testSyntax(`var asyncFn = async function() { var t = void (await 1); };`); 46 47 48 testSyntax(`var asyncFn = async function() { var t = !!await 1; };`); 49 testSyntax(`var asyncFn = async function() { var t = ~~await 1; };`); 50 testSyntax(`var asyncFn = async function() { var t = typeof typeof await 1; };`); 51 testSyntax(`var asyncFn = async function() { var t = void void await 1; };`); 52 37 53 testSyntax(`var asyncFn = async function withName() { await 1; };`); 38 54 testSyntax(`var asyncFn = async () => await 'test';`); 55 56 testSyntax(`var asyncFn = async () => !await 'test';`); 57 testSyntax(`var asyncFn = async () => ~await 'test';`); 58 testSyntax(`var asyncFn = async () => typeof await 'test';`); 59 testSyntax(`var asyncFn = async () => void await 'test';`); 60 testSyntax(`var asyncFn = async () => - await 'test';`); 61 testSyntax(`var asyncFn = async () => + await 'test';`); 62 testSyntax(`var asyncFn = async () => delete await 'test';`); 63 64 testSyntax(`var asyncFn = async () => !!await 'test';`); 65 testSyntax(`var asyncFn = async () => ~~await 'test';`); 66 testSyntax(`var asyncFn = async () => typeof typeof await 'test';`); 67 testSyntax(`var asyncFn = async () => void void await 'test';`); 68 39 69 testSyntax(`var asyncFn = async x => await x + 'test';`); 40 70 testSyntax(`function foo(fn) { fn({ async: true }); }`); … … 70 100 testSyntax(`"use strict"; ({async: 1})`); 71 101 testSyntax(`"use strict"; var asyncFn = async function() { await 1; };`); 102 103 testSyntax(`"use strict"; var asyncFn = async function() { var t = !await 1; };`); 104 testSyntax(`"use strict"; var asyncFn = async function() { var t = ~await 1; };`); 105 testSyntax(`"use strict"; var asyncFn = async function() { var t = +await 1; };`); 106 testSyntax(`"use strict"; var asyncFn = async function() { var t = -await 1; };`); 107 testSyntax(`"use strict"; var asyncFn = async function() { var t = typeof await 1; };`); 108 testSyntax(`"use strict"; var asyncFn = async function() { var t = void await 1; };`); 109 testSyntax(`"use strict"; var asyncFn = async function() { var t = !(await 1); };`); 110 testSyntax(`"use strict"; var asyncFn = async function() { var t = ~(await 1); };`); 111 testSyntax(`"use strict"; var asyncFn = async function() { var t = -(await 1); };`); 112 testSyntax(`"use strict"; var asyncFn = async function() { var t = +(await 1); };`); 113 testSyntax(`"use strict"; var asyncFn = async function() { var t = typeof (await 1); };`); 114 testSyntax(`"use strict"; var asyncFn = async function() { var t = void (await 1); };`); 115 116 testSyntax(`"use strict"; var asyncFn = async function() { var t = !!await 1; };`); 117 testSyntax(`"use strict"; var asyncFn = async function() { var t = ~~await 1; };`); 118 testSyntax(`"use strict"; var asyncFn = async function() { var t = typeof typeof await 1; };`); 119 testSyntax(`"use strict"; var asyncFn = async function() { var t = void void await 1; };`); 120 121 testSyntax(`"use strict"; var asyncFn = async function() { var t = !!await 1; };`); 122 testSyntax(`"use strict"; var asyncFn = async function() { var t = !~await 1; };`); 123 testSyntax(`"use strict"; var asyncFn = async function() { var t = !typeof typeof await 1; };`); 124 testSyntax(`"use strict"; var asyncFn = async function() { var t = !void void await 1; };`); 125 126 72 127 testSyntax(`"use strict"; var asyncFn = async function withName() { await 1; };`); 73 128 testSyntax(`"use strict"; var asyncFn = async () => await 'test';`); -
trunk/Source/JavaScriptCore/ChangeLog
r223027 r223043 1 2017-10-09 Oleksandr Skachkov <gskachkov@gmail.com> 2 3 Safari 10 /11 problem with if (!await get(something)). 4 https://bugs.webkit.org/show_bug.cgi?id=176685 5 6 Reviewed by Saam Barati. 7 8 Using unary operator before `await` lead to count it as identifier. 9 According to spec https://tc39.github.io/ecma262/#sec-async-function-definitions 10 and Note 1 `await` is as AwaitExpression and it is allowed to use unary operator 11 12 * parser/Parser.cpp: 13 (JSC::Parser<LexerType>::parsePrimaryExpression): 14 1 15 2017-10-07 Filip Pizlo <fpizlo@apple.com> 2 16 -
trunk/Source/JavaScriptCore/parser/Parser.cpp
r223022 r223043 4449 4449 if (m_parserState.functionParsePhase == FunctionParsePhase::Parameters) 4450 4450 failIfFalse(m_parserState.allowAwait, "Cannot use await expression within parameters"); 4451 else if (currentFunctionScope()->isAsyncFunctionBoundary()) 4452 return parseAwaitExpression(context); 4453 4451 4454 goto identifierExpression; 4452 4455 case IDENT: {
Note: See TracChangeset
for help on using the changeset viewer.