Ignore:
Timestamp:
Sep 17, 2020, 3:30:19 AM (5 years ago)
Author:
[email protected]
Message:

Support export namespace export * as ns
https://bugs.webkit.org/show_bug.cgi?id=214379

Reviewed by Ross Kirsling.

JSTests:

  • stress/modules-syntax-error.js:
  • stress/modules-syntax.js:
  • test262/expectations.yaml:

Source/JavaScriptCore:

This patch supports export * as ns from "module" syntax. If it is used, we expose "module"'s namespace object as "ns".
For each module environment, we create *namespace* (starNamespace) private symbol scope variable. And we fill it later
with module namespace object. This way allows us to use module namespace object IC and super fast imported module binding
lookup though environment variable lookup mechanism.

  • builtins/BuiltinNames.h:
  • bytecompiler/BytecodeGenerator.cpp:

(JSC::BytecodeGenerator::BytecodeGenerator):

  • parser/NodesAnalyzeModule.cpp:

(JSC::ExportNamedDeclarationNode::analyzeModule):

  • parser/Parser.cpp:

(JSC::Parser<LexerType>::parseExportDeclaration):

  • runtime/AbstractModuleRecord.cpp:

(JSC::AbstractModuleRecord::ExportEntry::createNamespace):
(JSC::AbstractModuleRecord::resolveExportImpl):
(JSC::AbstractModuleRecord::getModuleNamespace):
(JSC::AbstractModuleRecord::setModuleEnvironment):
(JSC::AbstractModuleRecord::dump):

  • runtime/AbstractModuleRecord.h:
  • runtime/CommonIdentifiers.h:
  • runtime/JSFunction.cpp:

(JSC::JSFunction::name):
(JSC::JSFunction::reifyName):

  • runtime/JSModuleNamespaceObject.cpp:

(JSC::JSModuleNamespaceObject::getOwnPropertySlotCommon):

  • runtime/JSModuleRecord.cpp:

(JSC::JSModuleRecord::instantiateDeclarations):
(JSC::JSModuleRecord::evaluate):

  • wasm/js/JSWebAssemblyModule.cpp:

(JSC::JSWebAssemblyModule::finishCreation):

  • wasm/js/WebAssemblyModuleRecord.cpp:

(JSC::WebAssemblyModuleRecord::link):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp

    r266264 r267186  
    960960    // Now declare all variables.
    961961
     962    createVariable(m_vm.propertyNames->starNamespacePrivateName, VarKind::Scope, moduleEnvironmentSymbolTable, VerifyExisting);
    962963    createVariable(m_vm.propertyNames->builtinNames().metaPrivateName(), VarKind::Scope, moduleEnvironmentSymbolTable, VerifyExisting);
    963964
Note: See TracChangeset for help on using the changeset viewer.