Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(578)

Unified Diff: src/objects.h

Issue 2388153003: [modules] Implement namespace imports. (Closed)
Patch Set: Add comment on VisitModuleNamespaceImports. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/interpreter/bytecode-generator.cc ('k') | src/objects.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/objects.h
diff --git a/src/objects.h b/src/objects.h
index ea086931a4d53768ab85c93eeb9a98d5669e4aa8..c81cfbbb7e2da1747f61f5efed28f889817c8729 100644
--- a/src/objects.h
+++ b/src/objects.h
@@ -71,6 +71,7 @@
// - JSValue
// - JSDate
// - JSMessageObject
+// - JSModuleNamespace
// - JSProxy
// - FixedArrayBase
// - ByteArray
@@ -416,6 +417,7 @@ const int kStubMinorKeyBits = kSmiValueSize - kStubMajorKeyBits - 1;
V(JS_ARGUMENTS_TYPE) \
V(JS_CONTEXT_EXTENSION_OBJECT_TYPE) \
V(JS_GENERATOR_OBJECT_TYPE) \
+ V(JS_MODULE_NAMESPACE_TYPE) \
V(JS_GLOBAL_OBJECT_TYPE) \
V(JS_GLOBAL_PROXY_TYPE) \
V(JS_API_OBJECT_TYPE) \
@@ -717,6 +719,7 @@ enum InstanceType {
JS_ARGUMENTS_TYPE,
JS_CONTEXT_EXTENSION_OBJECT_TYPE,
JS_GENERATOR_OBJECT_TYPE,
+ JS_MODULE_NAMESPACE_TYPE,
JS_ARRAY_TYPE,
JS_ARRAY_BUFFER_TYPE,
JS_TYPED_ARRAY_TYPE,
@@ -886,6 +889,7 @@ class LayoutDescriptor;
class LiteralsArray;
class LookupIterator;
class FieldType;
+class Module;
class ModuleDescriptor;
class ModuleInfoEntry;
class ModuleInfo;
@@ -970,6 +974,7 @@ template <class C> inline bool Is(Object* obj);
V(JSObject) \
V(JSContextExtensionObject) \
V(JSGeneratorObject) \
+ V(JSModuleNamespace) \
V(Map) \
V(DescriptorArray) \
V(FrameArray) \
@@ -3950,6 +3955,9 @@ class ObjectHashTable: public HashTable<ObjectHashTable,
Object* Lookup(Handle<Object> key, int32_t hash);
Object* Lookup(Isolate* isolate, Handle<Object> key, int32_t hash);
+ // Returns the value at entry.
+ Object* ValueAt(int entry);
+
// Adds (or overwrites) the value associated with the given key.
static Handle<ObjectHashTable> Put(Handle<ObjectHashTable> table,
Handle<Object> key,
@@ -7898,6 +7906,29 @@ class JSGeneratorObject: public JSObject {
DISALLOW_IMPLICIT_CONSTRUCTORS(JSGeneratorObject);
};
+// When importing a module namespace (import * as foo from "bar"), a
+// JSModuleNamespace object (representing module "bar") is created and bound to
+// the declared variable (foo). A module can have at most one namespace object.
+class JSModuleNamespace : public JSObject {
+ public:
+ DECLARE_CAST(JSModuleNamespace)
+ DECLARE_VERIFIER(JSModuleNamespace)
+
+ // The actual module whose namespace is being represented.
+ DECL_ACCESSORS(module, Module)
+
+ // Retrieve the value exported by [module] under the given [name]. If there is
+ // no such export, return Just(undefined). If the export is uninitialized,
+ // schedule an exception and return Nothing.
+ MUST_USE_RESULT MaybeHandle<Object> GetExport(Handle<String> name);
+
+ static const int kModuleOffset = JSObject::kHeaderSize;
+ static const int kSize = kModuleOffset + kPointerSize;
+
+ private:
+ DISALLOW_IMPLICIT_CONSTRUCTORS(JSModuleNamespace);
+};
+
// A Module object is a mapping from export names to cells
// This is still very much in flux.
class Module : public Struct {
@@ -7906,13 +7937,15 @@ class Module : public Struct {
DECLARE_VERIFIER(Module)
DECLARE_PRINTER(Module)
- // The code representing this Module, either a
- // SharedFunctionInfo or a JSFunction depending
- // on whether it's been instantiated.
+ // The code representing this Module, either a SharedFunctionInfo or a
+ // JSFunction depending on whether it's been instantiated.
DECL_ACCESSORS(code, Object)
DECL_ACCESSORS(exports, ObjectHashTable)
+ // The namespace object (or undefined).
+ DECL_ACCESSORS(module_namespace, HeapObject)
+
// [[RequestedModules]]: Modules imported or re-exported by this module.
// Corresponds 1-to-1 to the module specifier strings in
// ModuleInfo::module_requests.
@@ -7922,7 +7955,7 @@ class Module : public Struct {
// are only evaluated a single time.
DECL_BOOLEAN_ACCESSORS(evaluated)
- // Storage for [[Evaluated]]
+ // Storage for [[Evaluated]].
DECL_INT_ACCESSORS(flags)
// Embedder-specified data
@@ -7955,12 +7988,18 @@ class Module : public Struct {
static Handle<Object> LoadImport(Handle<Module> module, Handle<String> name,
int module_request);
+ // Get the namespace object for [module_request] of [module]. If it doesn't
+ // exist yet, it is created.
+ static Handle<JSModuleNamespace> GetModuleNamespace(Handle<Module> module,
+ int module_request);
+
static const int kCodeOffset = HeapObject::kHeaderSize;
static const int kExportsOffset = kCodeOffset + kPointerSize;
static const int kRequestedModulesOffset = kExportsOffset + kPointerSize;
static const int kFlagsOffset = kRequestedModulesOffset + kPointerSize;
static const int kEmbedderDataOffset = kFlagsOffset + kPointerSize;
- static const int kSize = kEmbedderDataOffset + kPointerSize;
+ static const int kModuleNamespaceOffset = kEmbedderDataOffset + kPointerSize;
+ static const int kSize = kModuleNamespaceOffset + kPointerSize;
private:
enum { kEvaluatedBit };
@@ -7969,6 +8008,10 @@ class Module : public Struct {
static void CreateIndirectExport(Handle<Module> module, Handle<String> name,
Handle<ModuleInfoEntry> entry);
+ // Get the namespace object for [module]. If it doesn't exist yet, it is
+ // created.
+ static Handle<JSModuleNamespace> GetModuleNamespace(Handle<Module> module);
+
// The [must_resolve] argument indicates whether or not an exception should be
// thrown in case the module does not provide an export named [name]
// (including when a cycle is detected). An exception is always thrown in the
« no previous file with comments | « src/interpreter/bytecode-generator.cc ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698