dynamic import is ambiguous with import declaration at module code
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 21 Jan 2017 22:10:54 +0000 (22:10 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 21 Jan 2017 22:10:54 +0000 (22:10 +0000)
commit3749cb68796514d85f5877944f6c32e3361e7e70
treeb0caf1e9d6fe18a7a12cdc0460d3eff29aad1ed9
parente09b8e461c8808d8edded1e8d65f8b24df34718c
dynamic import is ambiguous with import declaration at module code
https://bugs.webkit.org/show_bug.cgi?id=167098

Reviewed by Darin Adler.

JSTests:

* modules/import-call.js: Added.
(from.string_appeared_here.import.string_appeared_here.then):
* modules/import-call/main.js: Added.
* stress/import-syntax.js:
(async):

Source/JavaScriptCore:

This patch fixes two syntax issues related to dynamic import.

1. Fix member expression parsing with dynamic import results

We should not return import expression immediately after parsing
it in parseMemberExpression. This prohibits us to parse the following
code,

    import("...").then(function () {
    });

2. dynamic import with import declaration under the module context

Before this patch, we always attempt to parse IMPORT as import declaration
under the module context. It means that import call in the top level
expression statement fails to be parsed since the parser attempts to parse
it as import declaration.

    import("...")  // module top level statement.

In this patch, we check the condition `[lookahead != (]` before starting
parsing import declaration. This allows us to put import call in the module
top level statement.

* parser/Parser.cpp:
(JSC::Parser<LexerType>::parseModuleSourceElements):
(JSC::Parser<LexerType>::parseMemberExpression):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@211017 268f45cc-cd09-0410-ab3c-d52691b4dbfc
JSTests/ChangeLog
JSTests/modules/import-call.js [new file with mode: 0644]
JSTests/modules/import-call/main.js [new file with mode: 0644]
JSTests/stress/import-syntax.js
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/parser/Parser.cpp