WebAssemblyModuleRecord.h [plain text]
#pragma once
#if ENABLE(WEBASSEMBLY)
#include "AbstractModuleRecord.h"
#include "WasmCreationMode.h"
#include "WasmModuleInformation.h"
namespace JSC {
class JSWebAssemblyInstance;
class JSWebAssemblyModule;
class WebAssemblyFunction;
class WebAssemblyModuleRecord final : public AbstractModuleRecord {
friend class LLIntOffsetsExtractor;
public:
using Base = AbstractModuleRecord;
static constexpr bool needsDestruction = true;
static void destroy(JSCell*);
template<typename CellType, SubspaceAccess mode>
static IsoSubspace* subspaceFor(VM& vm)
{
return vm.webAssemblyModuleRecordSpace<mode>();
}
DECLARE_EXPORT_INFO;
static Structure* createStructure(VM&, JSGlobalObject*, JSValue);
static WebAssemblyModuleRecord* create(JSGlobalObject*, VM&, Structure*, const Identifier&, const Wasm::ModuleInformation&);
void prepareLink(VM&, JSWebAssemblyInstance*);
void link(JSGlobalObject*, JSValue scriptFetcher, JSObject* importObject, Wasm::CreationMode);
JS_EXPORT_PRIVATE JSValue evaluate(JSGlobalObject*);
JSObject* exportsObject() const { return m_exportsObject.get(); }
private:
WebAssemblyModuleRecord(VM&, Structure*, const Identifier&);
void finishCreation(JSGlobalObject*, VM&, const Wasm::ModuleInformation&);
static void visitChildren(JSCell*, SlotVisitor&);
WriteBarrier<JSWebAssemblyInstance> m_instance;
WriteBarrier<JSObject> m_startFunction;
WriteBarrier<JSObject> m_exportsObject;
};
}
#endif // ENABLE(WEBASSEMBLY)