#ifndef V8_OBJECTS_MODULE_H_
#define V8_OBJECTS_MODULE_H_
#if defined(OS_OHOS)
#include "arkweb/build/features/features.h"
#endif
#include "include/v8-script.h"
#include "src/objects/js-objects.h"
#include "src/objects/objects.h"
#include "src/objects/struct.h"
#include "src/objects/object-macros.h"
namespace v8 {
namespace internal {
class JSModuleNamespace;
class SourceTextModuleDescriptor;
class SourceTextModuleInfo;
class SourceTextModuleInfoEntry;
class Zone;
template <typename T>
class ZoneForwardList;
#include "torque-generated/src/objects/module-tq.inc"
class Module : public TorqueGeneratedModule<Module, HeapObject> {
public:
DECL_VERIFIER(Module)
DECL_PRINTER(Module)
enum Status {
kUnlinked,
kPreLinking,
kLinking,
kLinked,
kEvaluating,
kEvaluatingAsync,
kEvaluated,
kErrored
};
#ifdef DEBUG
static const char* StatusString(Module::Status status);
#endif
Tagged<Object> GetException();
V8_WARN_UNUSED_RESULT bool IsGraphAsync(Isolate* isolate) const;
struct UserResolveCallbacks {
v8::Module::ResolveModuleCallback module_callback = nullptr;
v8::Module::ResolveSourceCallback source_callback = nullptr;
v8::Module::ResolveModuleByIndexCallback module_callback_by_index = nullptr;
v8::Module::ResolveSourceByIndexCallback source_callback_by_index = nullptr;
};
static V8_WARN_UNUSED_RESULT bool Instantiate(
Isolate* isolate, Handle<Module> module, v8::Local<v8::Context> context,
const UserResolveCallbacks& callbacks);
static V8_WARN_UNUSED_RESULT MaybeDirectHandle<Object> Evaluate(
Isolate* isolate, Handle<Module> module);
static DirectHandle<JSModuleNamespace> GetModuleNamespace(
Isolate* isolate, Handle<Module> module);
using BodyDescriptor =
FixedBodyDescriptor<kExportsOffset, kHeaderSize, kHeaderSize>;
struct Hash;
protected:
friend class Factory;
#if defined(OS_OHOS)
#if BUILDFLAG(ARKWEB_ENABLE_PAC)
class __attribute__((nopac)) ResolveSet;
#else
class ResolveSet;
#endif
#else
class ResolveSet;
#endif
static V8_WARN_UNUSED_RESULT MaybeHandle<Cell> ResolveExport(
Isolate* isolate, Handle<Module> module,
DirectHandle<String> module_specifier, Handle<String> export_name,
MessageLocation loc, bool must_resolve, ResolveSet* resolve_set);
static V8_WARN_UNUSED_RESULT bool PrepareInstantiate(
Isolate* isolate, DirectHandle<Module> module,
v8::Local<v8::Context> context, const UserResolveCallbacks& callbacks);
static V8_WARN_UNUSED_RESULT bool FinishInstantiate(
Isolate* isolate, Handle<Module> module,
ZoneForwardList<Handle<SourceTextModule>>* stack, unsigned* dfs_index,
Zone* zone);
static void Reset(Isolate* isolate, DirectHandle<Module> module);
static void ResetGraph(Isolate* isolate, DirectHandle<Module> module);
void SetStatus(Status status);
void RecordError(Isolate* isolate, Tagged<Object> error);
TQ_OBJECT_CONSTRUCTORS(Module)
};
class JSModuleNamespace
: public TorqueGeneratedJSModuleNamespace<JSModuleNamespace,
JSSpecialObject> {
public:
DECL_PRINTER(JSModuleNamespace)
V8_WARN_UNUSED_RESULT MaybeDirectHandle<Object> GetExport(
Isolate* isolate, DirectHandle<String> name);
bool HasExport(Isolate* isolate, DirectHandle<String> name);
static V8_WARN_UNUSED_RESULT Maybe<PropertyAttributes> GetPropertyAttributes(
LookupIterator* it);
static V8_WARN_UNUSED_RESULT Maybe<bool> DefineOwnProperty(
Isolate* isolate, DirectHandle<JSModuleNamespace> o,
DirectHandle<Object> key, PropertyDescriptor* desc,
Maybe<ShouldThrow> should_throw);
enum {
kToStringTagFieldIndex,
kInObjectFieldCount,
};
static constexpr int kSize =
kHeaderSize + (kTaggedSize * kInObjectFieldCount);
TQ_OBJECT_CONSTRUCTORS(JSModuleNamespace)
};
V8_OBJECT class ScriptOrModule : public StructLayout {
public:
inline Tagged<Object> resource_name() const;
inline void set_resource_name(Tagged<Object> value,
WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
inline Tagged<FixedArray> host_defined_options() const;
inline void set_host_defined_options(
Tagged<FixedArray> value, WriteBarrierMode mode = UPDATE_WRITE_BARRIER);
DECL_PRINTER(ScriptOrModule)
DECL_VERIFIER(ScriptOrModule)
using BodyDescriptor = StructBodyDescriptor;
private:
friend class TorqueGeneratedScriptOrModuleAsserts;
TaggedMember<Object> resource_name_;
TaggedMember<FixedArray> host_defined_options_;
} V8_OBJECT_END;
}
}
#include "src/objects/object-macros-undef.h"
#endif