From 729d445b6885f69dd2c6355f38707bd42851c791 Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Wed, 22 Jun 2022 23:21:48 -0700 Subject: change the directory structure --- src/bun.js/bindings/ZigSourceProvider.h | 87 +++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/bun.js/bindings/ZigSourceProvider.h (limited to 'src/bun.js/bindings/ZigSourceProvider.h') diff --git a/src/bun.js/bindings/ZigSourceProvider.h b/src/bun.js/bindings/ZigSourceProvider.h new file mode 100644 index 000000000..cd45a0217 --- /dev/null +++ b/src/bun.js/bindings/ZigSourceProvider.h @@ -0,0 +1,87 @@ +#include "headers.h" +#include "root.h" + +#pragma once + +namespace JSC { +class Structure; +class Identifier; +class SourceCodeKey; +class SourceProvider; +} // namespace JSC + +#include "JavaScriptCore/CachedBytecode.h" +#include "JavaScriptCore/JSGlobalObject.h" +#include "JavaScriptCore/JSTypeInfo.h" +#include "ZigConsoleClient.h" +// #include "JavaScriptCore/SourceCodeKey.h" +#include "JavaScriptCore/SourceProvider.h" +#include "JavaScriptCore/Structure.h" + +namespace Zig { + +class SourceProvider final : public JSC::SourceProvider { + WTF_MAKE_FAST_ALLOCATED; + using Base = JSC::SourceProvider; + using BytecodeCacheGenerator = JSC::BytecodeCacheGenerator; + using UnlinkedFunctionExecutable = JSC::UnlinkedFunctionExecutable; + using CachedBytecode = JSC::CachedBytecode; + using UnlinkedFunctionCodeBlock = JSC::UnlinkedFunctionCodeBlock; + using SourceCode = JSC::SourceCode; + using CodeSpecializationKind = JSC::CodeSpecializationKind; + using SourceOrigin = JSC::SourceOrigin; + +public: + static Ref create(ResolvedSource resolvedSource); + ~SourceProvider() + { + freeSourceCode(); + + commitCachedBytecode(); + } + + unsigned hash() const { return m_hash; }; + StringView source() const { return StringView(m_source.get()); } + RefPtr cachedBytecode() + { + // if (m_resolvedSource.bytecodecache_fd == 0) { + return nullptr; + // } + + // return m_cachedBytecode; + }; + + void updateCache(const UnlinkedFunctionExecutable* executable, const SourceCode&, + CodeSpecializationKind kind, const UnlinkedFunctionCodeBlock* codeBlock); + void cacheBytecode(const BytecodeCacheGenerator& generator); + void commitCachedBytecode(); + bool isBytecodeCacheEnabled() const; + void readOrGenerateByteCodeCache(JSC::VM& vm, const JSC::SourceCode& sourceCode); + ResolvedSource m_resolvedSource; + int readCache(JSC::VM& vm, const JSC::SourceCode& sourceCode); + void freeSourceCode(); + +private: + SourceProvider(ResolvedSource resolvedSource, WTF::StringImpl& sourceImpl, + const SourceOrigin& sourceOrigin, WTF::String&& sourceURL, + const TextPosition& startPosition, JSC::SourceProviderSourceType sourceType) + : Base(sourceOrigin, WTFMove(sourceURL), startPosition, sourceType) + , m_source(sourceImpl) + { + + m_resolvedSource = resolvedSource; + + m_hash = resolvedSource.hash; + + getHash(); + } + + unsigned m_hash; + unsigned getHash(); + RefPtr m_cachedBytecode; + Ref m_source; + bool did_free_source_code = false; + // JSC::SourceCodeKey key; +}; + +} // namespace Zig \ No newline at end of file -- cgit v1.2.3