Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_OBJECTS_H_ | 5 #ifndef V8_OBJECTS_H_ |
| 6 #define V8_OBJECTS_H_ | 6 #define V8_OBJECTS_H_ |
| 7 | 7 |
| 8 #include <iosfwd> | 8 #include <iosfwd> |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 8158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 8169 DECLARE_CAST(Module) | 8169 DECLARE_CAST(Module) |
| 8170 DECLARE_VERIFIER(Module) | 8170 DECLARE_VERIFIER(Module) |
| 8171 DECLARE_PRINTER(Module) | 8171 DECLARE_PRINTER(Module) |
| 8172 | 8172 |
| 8173 // The code representing this Module, or an abstraction thereof. | 8173 // The code representing this Module, or an abstraction thereof. |
| 8174 // This is either a SharedFunctionInfo or a JSFunction or a ModuleInfo | 8174 // This is either a SharedFunctionInfo or a JSFunction or a ModuleInfo |
| 8175 // depending on whether the module has been instantiated and evaluated. See | 8175 // depending on whether the module has been instantiated and evaluated. See |
| 8176 // Module::ModuleVerify() for the precise invariant. | 8176 // Module::ModuleVerify() for the precise invariant. |
| 8177 DECL_ACCESSORS(code, Object) | 8177 DECL_ACCESSORS(code, Object) |
| 8178 | 8178 |
| 8179 // The export table. | 8179 // The export table. |
|
adamk
2016/11/03 18:30:45
This comment could be further fleshed out too (e.g
neis
2016/11/04 10:14:39
Done.
| |
| 8180 DECL_ACCESSORS(exports, ObjectHashTable) | 8180 DECL_ACCESSORS(exports, ObjectHashTable) |
| 8181 | 8181 |
| 8182 DECL_ACCESSORS(regular_exports, FixedArray) | |
|
adamk
2016/11/03 18:30:45
Comments for these? Especially since "exports" and
neis
2016/11/04 10:14:39
Done.
| |
| 8183 DECL_ACCESSORS(regular_imports, FixedArray) | |
| 8184 | |
| 8182 // Hash for this object (a random non-zero Smi). | 8185 // Hash for this object (a random non-zero Smi). |
| 8183 DECL_INT_ACCESSORS(hash) | 8186 DECL_INT_ACCESSORS(hash) |
| 8184 | 8187 |
| 8185 // The namespace object (or undefined). | 8188 // The namespace object (or undefined). |
| 8186 DECL_ACCESSORS(module_namespace, HeapObject) | 8189 DECL_ACCESSORS(module_namespace, HeapObject) |
| 8187 | 8190 |
| 8188 // Modules imported or re-exported by this module. | 8191 // Modules imported or re-exported by this module. |
| 8189 // Corresponds 1-to-1 to the module specifier strings in | 8192 // Corresponds 1-to-1 to the module specifier strings in |
| 8190 // ModuleInfo::module_requests. | 8193 // ModuleInfo::module_requests. |
| 8191 DECL_ACCESSORS(requested_modules, FixedArray) | 8194 DECL_ACCESSORS(requested_modules, FixedArray) |
| 8192 | 8195 |
| 8193 // Get the ModuleInfo associated with the code. | 8196 // Get the ModuleInfo associated with the code. |
| 8194 inline ModuleInfo* info() const; | 8197 inline ModuleInfo* info() const; |
| 8195 | 8198 |
| 8196 inline bool instantiated() const; | 8199 inline bool instantiated() const; |
| 8197 inline bool evaluated() const; | 8200 inline bool evaluated() const; |
| 8198 inline void set_evaluated(); | 8201 inline void set_evaluated(); |
| 8199 | 8202 |
| 8200 // Implementation of spec operation ModuleDeclarationInstantiation. | 8203 // Implementation of spec operation ModuleDeclarationInstantiation. |
| 8201 // Returns false if an exception occurred during instantiation, true | 8204 // Returns false if an exception occurred during instantiation, true |
| 8202 // otherwise. | 8205 // otherwise. |
| 8203 static MUST_USE_RESULT bool Instantiate(Handle<Module> module, | 8206 static MUST_USE_RESULT bool Instantiate(Handle<Module> module, |
| 8204 v8::Local<v8::Context> context, | 8207 v8::Local<v8::Context> context, |
| 8205 v8::Module::ResolveCallback callback); | 8208 v8::Module::ResolveCallback callback); |
| 8206 | 8209 |
| 8207 // Implementation of spec operation ModuleEvaluation. | 8210 // Implementation of spec operation ModuleEvaluation. |
| 8208 static MUST_USE_RESULT MaybeHandle<Object> Evaluate(Handle<Module> module); | 8211 static MUST_USE_RESULT MaybeHandle<Object> Evaluate(Handle<Module> module); |
| 8209 | 8212 |
| 8210 static Handle<Object> LoadExport(Handle<Module> module, Handle<String> name); | 8213 static Handle<Object> LoadVariable(Handle<Module> module, int index); |
| 8211 static void StoreExport(Handle<Module> module, Handle<String> name, | 8214 static void StoreVariable(Handle<Module> module, int index, |
| 8212 Handle<Object> value); | 8215 Handle<Object> value); |
| 8213 | |
| 8214 static Handle<Object> LoadImport(Handle<Module> module, Handle<String> name, | |
| 8215 int module_request); | |
| 8216 | 8216 |
| 8217 // Get the namespace object for [module_request] of [module]. If it doesn't | 8217 // Get the namespace object for [module_request] of [module]. If it doesn't |
| 8218 // exist yet, it is created. | 8218 // exist yet, it is created. |
| 8219 static Handle<JSModuleNamespace> GetModuleNamespace(Handle<Module> module, | 8219 static Handle<JSModuleNamespace> GetModuleNamespace(Handle<Module> module, |
| 8220 int module_request); | 8220 int module_request); |
| 8221 | 8221 |
| 8222 static const int kCodeOffset = HeapObject::kHeaderSize; | 8222 static const int kCodeOffset = HeapObject::kHeaderSize; |
| 8223 static const int kExportsOffset = kCodeOffset + kPointerSize; | 8223 static const int kExportsOffset = kCodeOffset + kPointerSize; |
| 8224 static const int kHashOffset = kExportsOffset + kPointerSize; | 8224 static const int kRegularExportsOffset = kExportsOffset + kPointerSize; |
| 8225 static const int kRegularImportsOffset = kRegularExportsOffset + kPointerSize; | |
| 8226 static const int kHashOffset = kRegularImportsOffset + kPointerSize; | |
| 8225 static const int kModuleNamespaceOffset = kHashOffset + kPointerSize; | 8227 static const int kModuleNamespaceOffset = kHashOffset + kPointerSize; |
| 8226 static const int kRequestedModulesOffset = | 8228 static const int kRequestedModulesOffset = |
| 8227 kModuleNamespaceOffset + kPointerSize; | 8229 kModuleNamespaceOffset + kPointerSize; |
| 8228 static const int kSize = kRequestedModulesOffset + kPointerSize; | 8230 static const int kSize = kRequestedModulesOffset + kPointerSize; |
| 8229 | 8231 |
| 8230 private: | 8232 private: |
| 8231 enum { kEvaluatedBit }; | 8233 enum { kEvaluatedBit }; |
| 8232 | 8234 |
| 8233 static void CreateExport(Handle<Module> module, Handle<FixedArray> names); | 8235 static void CreateExport(Handle<Module> module, int index, |
| 8236 Handle<FixedArray> names); | |
| 8234 static void CreateIndirectExport(Handle<Module> module, Handle<String> name, | 8237 static void CreateIndirectExport(Handle<Module> module, Handle<String> name, |
| 8235 Handle<ModuleInfoEntry> entry); | 8238 Handle<ModuleInfoEntry> entry); |
| 8236 | 8239 |
| 8237 // Get the namespace object for [module]. If it doesn't exist yet, it is | 8240 // Get the namespace object for [module]. If it doesn't exist yet, it is |
| 8238 // created. | 8241 // created. |
| 8239 static Handle<JSModuleNamespace> GetModuleNamespace(Handle<Module> module); | 8242 static Handle<JSModuleNamespace> GetModuleNamespace(Handle<Module> module); |
| 8240 | 8243 |
| 8241 // The [must_resolve] argument indicates whether or not an exception should be | 8244 // The [must_resolve] argument indicates whether or not an exception should be |
| 8242 // thrown in case the module does not provide an export named [name] | 8245 // thrown in case the module does not provide an export named [name] |
| 8243 // (including when a cycle is detected). An exception is always thrown in the | 8246 // (including when a cycle is detected). An exception is always thrown in the |
| (...skipping 3541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 11785 } | 11788 } |
| 11786 return value; | 11789 return value; |
| 11787 } | 11790 } |
| 11788 }; | 11791 }; |
| 11789 | 11792 |
| 11790 | 11793 |
| 11791 } // NOLINT, false-positive due to second-order macros. | 11794 } // NOLINT, false-positive due to second-order macros. |
| 11792 } // NOLINT, false-positive due to second-order macros. | 11795 } // NOLINT, false-positive due to second-order macros. |
| 11793 | 11796 |
| 11794 #endif // V8_OBJECTS_H_ | 11797 #endif // V8_OBJECTS_H_ |
| OLD | NEW |