aboutsummaryrefslogtreecommitdiff
path: root/src/javascript
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-10-23 04:59:03 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-10-23 04:59:03 -0700
commita1b8c20c3fb39696fba24ac67489039397eb33c9 (patch)
treece79b2edffa59968bf91b8ef6dc58880b312f1ac /src/javascript
parentde01d581c164679140172d3950bd97da64036b7e (diff)
downloadbun-a1b8c20c3fb39696fba24ac67489039397eb33c9.tar.gz
bun-a1b8c20c3fb39696fba24ac67489039397eb33c9.tar.zst
bun-a1b8c20c3fb39696fba24ac67489039397eb33c9.zip
Add "process.env" to global object
Diffstat (limited to 'src/javascript')
-rw-r--r--src/javascript/jsc/bindings/ZigGlobalObject.cpp47
-rw-r--r--src/javascript/jsc/bindings/ZigGlobalObject.h3
-rw-r--r--src/javascript/jsc/bindings/headers-cpp.h2
-rw-r--r--src/javascript/jsc/bindings/helpers.h2
4 files changed, 36 insertions, 18 deletions
diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.cpp b/src/javascript/jsc/bindings/ZigGlobalObject.cpp
index e470e27b5..be7bd2000 100644
--- a/src/javascript/jsc/bindings/ZigGlobalObject.cpp
+++ b/src/javascript/jsc/bindings/ZigGlobalObject.cpp
@@ -86,15 +86,15 @@ bool has_loaded_jsc = false;
extern "C" void JSCInitialize() {
if (has_loaded_jsc) return;
- JSC::Options::useSourceProviderCache() = true;
- JSC::Options::useUnlinkedCodeBlockJettisoning() = false;
- // JSC::Options::useTopLevelAwait() = true;
- JSC::Options::exposeInternalModuleLoader() = true;
- // std::set_terminate([]() { Zig__GlobalObject__onCrash(); });
- WTF::initializeMainThread();
- JSC::initialize();
- // Gigacage::disablePrimitiveGigacage();
- has_loaded_jsc = true;
+ JSC::Options::useSourceProviderCache() = true;
+ JSC::Options::useUnlinkedCodeBlockJettisoning() = false;
+ // JSC::Options::useTopLevelAwait() = true;
+ JSC::Options::exposeInternalModuleLoader() = true;
+ // std::set_terminate([]() { Zig__GlobalObject__onCrash(); });
+ WTF::initializeMainThread();
+ JSC::initialize();
+ // Gigacage::disablePrimitiveGigacage();
+ has_loaded_jsc = true;
}
extern "C" JSC__JSGlobalObject *Zig__GlobalObject__create(JSClassRef *globalObjectClass, int count,
@@ -178,8 +178,6 @@ void GlobalObject::installAPIGlobals(JSClassRef *globals, int count) {
// modify it or it wasn't statically analyzable
JSC::JSObject *processDotEnv = JSC::constructEmptyObject(this, this->objectPrototype(), 0);
- process->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "env"), processDotEnv);
-
// this should be transpiled out, but just incase
process->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "browser"),
JSC::JSValue(false));
@@ -196,8 +194,8 @@ void GlobalObject::installAPIGlobals(JSClassRef *globals, int count) {
process->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "platform"),
JSC::jsString(this->vm(), WTF::String("linux")));
#endif
-
- for (int i = 0; i < count; i++) {
+ int i = 0;
+ for (; i < count - 1; i++) {
auto jsClass = globals[i];
JSC::JSCallbackObject<JSNonFinalObject> *object =
@@ -210,6 +208,20 @@ void GlobalObject::installAPIGlobals(JSClassRef *globals, int count) {
JSC::JSValue(object), JSC::PropertyAttribute::DontDelete | 0});
}
+ // The last one must be "process.env"
+ // Runtime-support is for if they change
+ {
+ auto jsClass = globals[i];
+
+ JSC::JSCallbackObject<JSNonFinalObject> *object =
+ JSC::JSCallbackObject<JSNonFinalObject>::create(this, this->callbackObjectStructure(),
+ jsClass, nullptr);
+ if (JSObject *prototype = jsClass->prototype(this)) object->setPrototypeDirect(vm(), prototype);
+
+ process->putDirect(this->vm(), JSC::Identifier::fromString(this->vm(), "env"),
+ JSC::JSValue(object), JSC::PropertyAttribute::DontDelete | 0);
+ }
+
extraStaticGlobals.uncheckedAppend(
GlobalPropertyInfo{JSC::Identifier::fromString(vm(), "process"), JSC::JSValue(process),
JSC::PropertyAttribute::DontDelete | 0});
@@ -396,6 +408,7 @@ JSC::JSInternalPromise *GlobalObject::moduleLoaderFetch(JSGlobalObject *globalOb
}
scope.release();
+
promise->resolve(globalObject, jsSourceCode);
globalObject->vm().drainMicrotasks();
return promise;
@@ -432,9 +445,11 @@ JSC::JSValue GlobalObject::moduleLoaderEvaluate(JSGlobalObject *globalObject,
JSModuleLoader *moduleLoader, JSValue key,
JSValue moduleRecordValue, JSValue scriptFetcher,
JSValue sentValue, JSValue resumeMode) {
- // VM& vm = globalObject->vm();
- return moduleLoader->evaluateNonVirtual(globalObject, key, moduleRecordValue, scriptFetcher,
- sentValue, resumeMode);
+
+ JSC::JSValue result = moduleLoader->evaluateNonVirtual(globalObject, key, moduleRecordValue,
+ scriptFetcher, sentValue, resumeMode);
+
+ return result;
}
} // namespace Zig \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.h b/src/javascript/jsc/bindings/ZigGlobalObject.h
index d3e7f0f81..4b1e1e935 100644
--- a/src/javascript/jsc/bindings/ZigGlobalObject.h
+++ b/src/javascript/jsc/bindings/ZigGlobalObject.h
@@ -1,7 +1,8 @@
#include "root.h"
-
#pragma once
+#include "headers-handwritten.h"
+
namespace JSC {
class Structure;
class Identifier;
diff --git a/src/javascript/jsc/bindings/headers-cpp.h b/src/javascript/jsc/bindings/headers-cpp.h
index 63510791c..3480e3f09 100644
--- a/src/javascript/jsc/bindings/headers-cpp.h
+++ b/src/javascript/jsc/bindings/headers-cpp.h
@@ -1,4 +1,4 @@
-//-- AUTOGENERATED FILE -- 1632635195
+//-- AUTOGENERATED FILE -- 1634766497
// clang-format off
#pragma once
diff --git a/src/javascript/jsc/bindings/helpers.h b/src/javascript/jsc/bindings/helpers.h
index 2812a0cb3..73582d1dc 100644
--- a/src/javascript/jsc/bindings/helpers.h
+++ b/src/javascript/jsc/bindings/helpers.h
@@ -10,6 +10,8 @@
#include <JavaScriptCore/ThrowScope.h>
#include <JavaScriptCore/VM.h>
+#pragma once
+
template <class CppType, typename ZigType> class Wrap {
public:
Wrap(){};