Support dynamic import calls (#4652)

JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
Zoltan Herczeg
2021-07-24 09:26:46 +02:00
committed by GitHub
parent d9360f51d0
commit d4178ae386
21 changed files with 698 additions and 114 deletions
@@ -0,0 +1,28 @@
/* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
function check_syntax_error(code)
{
try {
eval(code);
assert(false);
} catch (e) {
assert(e instanceof SyntaxError);
}
}
check_syntax_error("import('a.mjs',4)");
check_syntax_error("(import('a.mjs',4))");
check_syntax_error("(import 'a.mjs')");
-110
View File
@@ -6318,8 +6318,6 @@
features: [dynamic-import]
https://github.com/tc39/proposal-dynamic-import
-->
<test id="language/expressions/dynamic-import/always-create-new-promise.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assign-expr-get-value-abrupt-throws.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assignment-expression/additive-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assignment-expression/array-literal.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assignment-expression/arrow-function.js"><reason></reason></test>
@@ -6343,124 +6341,90 @@
<test id="language/expressions/dynamic-import/assignment-expression/tagged-function-call.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assignment-expression/ternary.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assignment-expression/this.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assignment-expression/unary-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assignment-expression/yield-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assignment-expression/yield-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assignment-expression/yield-identifier.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/assignment-expression/yield-star.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/await-import-evaluation.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-arrow-import-catch-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-arrow-import-catch-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-arrow-import-catch-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-arrow-import-catch-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-arrow-import-catch-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-arrow-import-catch-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-arrow-import-catch-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-await-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-await-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-await-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-await-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-await-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-await-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-await-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-arrow-function-return-await-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-await-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-await-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-await-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-await-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-await-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-await-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-await-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-return-await-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-return-await-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-return-await-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-return-await-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-return-await-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-return-await-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-return-await-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-function-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-import-catch-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-import-catch-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-import-catch-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-import-catch-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-import-catch-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-import-catch-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-import-catch-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-labeled-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-labeled-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-labeled-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-labeled-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-labeled-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-labeled-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-block-labeled-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-do-while-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-do-while-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-do-while-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-do-while-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-do-while-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-do-while-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-do-while-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-else-import-catch-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-else-import-catch-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-else-import-catch-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-else-import-catch-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-else-import-catch-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-else-import-catch-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-else-import-catch-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-function-import-catch-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-function-import-catch-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-function-import-catch-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-function-import-catch-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-function-import-catch-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-function-import-catch-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-function-import-catch-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-if-import-catch-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-if-import-catch-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-if-import-catch-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-if-import-catch-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-if-import-catch-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-if-import-catch-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-if-import-catch-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-while-import-catch-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-while-import-catch-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-while-import-catch-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-while-import-catch-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-while-import-catch-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-while-import-catch-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-while-import-catch-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/top-level-import-catch-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/top-level-import-catch-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/top-level-import-catch-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/top-level-import-catch-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/top-level-import-catch-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/top-level-import-catch-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/top-level-import-catch-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/custom-primitive.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/eval-export-dflt-cls-anon.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/eval-export-dflt-cls-name-meth.js"><reason></reason></test>
@@ -6548,76 +6512,9 @@
<test id="language/expressions/dynamic-import/namespace/promise-then-ns-set-same-values-no-strict.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/namespace/promise-then-ns-set-same-values-strict.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/namespace/promise-then-ns-set-strict.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/returns-promise.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/reuse-namespace-object-from-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/reuse-namespace-object-from-script.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/reuse-namespace-object.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/callexpression-arguments.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/callexpression-templateliteral.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-arrow-assignment-expression-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-arrow-assignment-expression-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-arrow-assignment-expression-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-arrow-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-arrow-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-arrow-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-await-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-await-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-await-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-return-await-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-return-await-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-arrow-function-return-await-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-function-await-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-function-await-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-function-await-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-function-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-function-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-function-return-await-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-function-return-await-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-function-return-await-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-function-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-block-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-block-labeled-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-block-labeled-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-block-labeled-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-block-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-block-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-do-while-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-do-while-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-do-while-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-else-braceless-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-else-braceless-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-else-braceless-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-else-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-else-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-else-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-function-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-function-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-function-return-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-function-return-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-function-return-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-function-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-if-braceless-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-if-braceless-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-if-braceless-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-if-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-if-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-if-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-while-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-while-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-while-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-with-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-with-expression-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-with-expression-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-with-expression-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-with-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-with-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/new-covered-expression-is-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/top-level-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/top-level-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/top-level-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/update-to-dynamic-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/usage-from-eval.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/usage/nested-arrow-assignment-expression-eval-gtbndng-indirect-update-dflt.js"><reason></reason></test>
@@ -7310,22 +7207,15 @@
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-await-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-eval-rqstd-abrupt-typeerror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-eval-rqstd-abrupt-urierror.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-eval-script-code-target.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-file-does-not-exist.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-instn-iee-err-ambiguous-import.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-instn-iee-err-circular.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/catch/nested-async-gen-return-await-specifier-tostring-abrupt-rejects.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/for-await-resolution-and-error-agen-yield.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/for-await-resolution-and-error-agen.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-empty-str-is-valid-assign-expr.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-nested-imports.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/syntax/valid/nested-async-gen-await-script-code-valid.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/usage/nested-async-gen-await-eval-gtbndng-indirect-update-dflt.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/usage/nested-async-gen-await-eval-gtbndng-indirect-update.js"><reason></reason></test>
<test id="language/expressions/dynamic-import/usage/nested-async-gen-await-eval-script-code-host-resolves-module-code.js"><reason></reason></test>
+1
View File
@@ -58,6 +58,7 @@ set(SOURCE_UNIT_TEST_MAIN_MODULES
test-lit-char-helpers.c
test-literal-storage.c
test-mem-stats.c
test-module-dynamic.c
test-module.c
test-native-callback-nested.c
test-native-instanceof.c
+279
View File
@@ -0,0 +1,279 @@
/* Copyright JS Foundation and other contributors, http://js.foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "jerryscript.h"
#include "jerryscript-port.h"
#include "jerryscript-port-default.h"
#include "test-common.h"
static int mode = 0;
static jerry_value_t global_user_value;
static jerry_value_t
global_assert (const jerry_call_info_t *call_info_p, /**< call information */
const jerry_value_t args_p[], /**< arguments list */
const jerry_length_t args_cnt) /**< arguments length */
{
JERRY_UNUSED (call_info_p);
TEST_ASSERT (args_cnt == 1 && jerry_value_is_true (args_p[0]));
return jerry_create_boolean (true);
} /* global_assert */
static void
register_assert (void)
{
jerry_value_t global_object_value = jerry_get_global_object ();
jerry_value_t function_value = jerry_create_external_function (global_assert);
jerry_value_t function_name_value = jerry_create_string ((const jerry_char_t *) "assert");
jerry_value_t result_value = jerry_set_property (global_object_value, function_name_value, function_value);
jerry_release_value (function_name_value);
jerry_release_value (function_value);
jerry_release_value (global_object_value);
TEST_ASSERT (jerry_value_is_true (result_value));
jerry_release_value (result_value);
} /* register_assert */
static void
compare_specifier (jerry_value_t specifier, /* string value */
int id) /* module id */
{
jerry_char_t string[] = "XX_module.mjs";
TEST_ASSERT (id >= 1 && id <= 99 && string[0] == 'X' && string[1] == 'X');
string[0] = (jerry_char_t) ((id / 10) + '0');
string[1] = (jerry_char_t) ((id % 10) + '0');
jerry_size_t length = (jerry_size_t) (sizeof (string) - 1);
jerry_char_t buffer[sizeof (string) - 1];
TEST_ASSERT (jerry_value_is_string (specifier));
TEST_ASSERT (jerry_get_string_size (specifier) == length);
TEST_ASSERT (jerry_string_to_char_buffer (specifier, buffer, length) == length);
TEST_ASSERT (memcmp (buffer, string, length) == 0);
} /* compare_specifier */
static jerry_value_t
module_import_callback (const jerry_value_t specifier, /* string value */
const jerry_value_t user_value, /* user value assigned to the script */
void *user_p) /* user pointer */
{
TEST_ASSERT (user_p == (void *) &mode);
jerry_value_t compare_value = jerry_binary_operation (JERRY_BIN_OP_STRICT_EQUAL,
user_value,
global_user_value);
TEST_ASSERT (jerry_value_is_true (compare_value));
jerry_release_value (compare_value);
switch (mode)
{
case 0:
{
compare_specifier (specifier, 1);
return jerry_create_error (JERRY_ERROR_RANGE, (const jerry_char_t *) "Err01");
}
case 1:
{
compare_specifier (specifier, 2);
return jerry_create_null ();
}
case 2:
{
compare_specifier (specifier, 3);
jerry_value_t promise_value = jerry_create_promise ();
/* Normally this should be a namespace object. */
jerry_value_t object_value = jerry_create_object ();
jerry_resolve_or_reject_promise (promise_value, object_value, true);
jerry_release_value (object_value);
return promise_value;
}
}
TEST_ASSERT (mode == 3 || mode == 4);
jerry_parse_options_t parse_options;
parse_options.options = JERRY_PARSE_MODULE;
jerry_value_t parse_result_value = jerry_parse ((const jerry_char_t *) "", 0, &parse_options);
TEST_ASSERT (!jerry_value_is_error (parse_result_value));
jerry_value_t result_value = jerry_module_link (parse_result_value, NULL, NULL);
TEST_ASSERT (!jerry_value_is_error (result_value));
jerry_release_value (result_value);
if (mode == 3)
{
result_value = jerry_module_evaluate (parse_result_value);
TEST_ASSERT (!jerry_value_is_error (result_value));
jerry_release_value (result_value);
}
return parse_result_value;
} /* module_import_callback */
static void
run_script (const char *source_p, /* source code */
jerry_parse_options_t *parse_options_p) /* parse options */
{
jerry_value_t parse_result_value;
parse_result_value = jerry_parse ((const jerry_char_t *) source_p, strlen (source_p), parse_options_p);
TEST_ASSERT (!jerry_value_is_error (parse_result_value));
jerry_value_t result_value;
if (parse_options_p->options & JERRY_PARSE_MODULE)
{
result_value = jerry_module_link (parse_result_value, NULL, NULL);
TEST_ASSERT (!jerry_value_is_error (result_value));
jerry_release_value (result_value);
result_value = jerry_module_evaluate (parse_result_value);
}
else
{
result_value = jerry_run (parse_result_value);
}
jerry_release_value (parse_result_value);
TEST_ASSERT (!jerry_value_is_error (result_value));
jerry_release_value (result_value);
result_value = jerry_run_all_enqueued_jobs ();
TEST_ASSERT (!jerry_value_is_error (result_value));
jerry_release_value (result_value);
} /* run_script */
int
main (void)
{
jerry_init (JERRY_INIT_EMPTY);
if (!jerry_is_feature_enabled (JERRY_FEATURE_MODULE))
{
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Module is disabled!\n");
jerry_cleanup ();
return 0;
}
register_assert ();
jerry_module_set_import_callback (module_import_callback, (void *) &mode);
jerry_parse_options_t parse_options;
parse_options.options = JERRY_PARSE_NO_OPTS;
if (jerry_is_feature_enabled (JERRY_FEATURE_ERROR_MESSAGES))
{
run_script ("var expected_message = 'Module cannot be instantiated'", &parse_options);
}
else
{
run_script ("var expected_message = ''", &parse_options);
}
global_user_value = jerry_create_object ();
const char *source_p = TEST_STRING_LITERAL ("import('01_module.mjs').then(\n"
" function(resolve) { assert(false) },\n"
" function(reject) {\n"
" assert(reject instanceof RangeError\n"
" && reject.message === 'Err01')\n"
" }\n"
")");
mode = 0;
parse_options.options = JERRY_PARSE_HAS_USER_VALUE;
parse_options.user_value = global_user_value;
run_script (source_p, &parse_options);
jerry_release_value (global_user_value);
global_user_value = jerry_create_null ();
source_p = TEST_STRING_LITERAL ("var src = \"import('02_module.mjs').then(\\\n"
" function(resolve) { assert(false) },\\\n"
" function(reject) {\\\n"
" assert(reject instanceof RangeError\\\n"
" && reject.message === expected_message)\\\n"
" }\\\n"
")\"\n"
"eval('eval(src)')");
mode = 1;
parse_options.options = JERRY_PARSE_HAS_USER_VALUE;
parse_options.user_value = global_user_value;
run_script (source_p, &parse_options);
jerry_release_value (global_user_value);
global_user_value = jerry_create_number (5.6);
source_p = TEST_STRING_LITERAL ("function f() {\n"
" return function () {\n"
" return import('03_module.mjs')\n"
" }\n"
"}\n"
"export var a = f()().then(\n"
" function(resolve) { assert(typeof resolve == 'object') },\n"
" function(reject) { assert(false) }\n"
")");
mode = 2;
parse_options.options = JERRY_PARSE_HAS_USER_VALUE | JERRY_PARSE_MODULE;
parse_options.user_value = global_user_value;
run_script (source_p, &parse_options);
jerry_release_value (global_user_value);
global_user_value = jerry_create_string ((const jerry_char_t *) "Any string...");
source_p = TEST_STRING_LITERAL ("var src = \"import('02_module.mjs').then(\\\n"
" function(resolve) { assert(typeof resolve == 'object') },\\\n"
" function(reject) { assert(false) }\\\n"
")\"\n"
"function f() {\n"
" eval('(function() { return eval(src) })()')\n"
"}\n"
"f()\n");
mode = 3;
parse_options.options = JERRY_PARSE_HAS_USER_VALUE;
parse_options.user_value = global_user_value;
run_script (source_p, &parse_options);
jerry_release_value (global_user_value);
global_user_value = jerry_create_external_function (global_assert);
source_p = TEST_STRING_LITERAL ("var src = \"import('02_module.mjs').then(\\\n"
" function(resolve) { assert(false) },\\\n"
" function(reject) {\\\n"
" assert(reject instanceof RangeError\\\n"
" && reject.message === expected_message)\\\n"
" }\\\n"
")\"\n"
"export function f() {\n"
" eval('(function() { return eval(src) })()')\n"
"}\n"
"f()\n");
mode = 4;
parse_options.options = JERRY_PARSE_HAS_USER_VALUE | JERRY_PARSE_MODULE;
parse_options.user_value = global_user_value;
run_script (source_p, &parse_options);
jerry_release_value (global_user_value);
jerry_cleanup ();
return 0;
} /* main */