aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-24 00:15:44 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-02-24 00:15:44 -0800
commitb37cb738021fa87fffa2bee50329c1ae55d79f4d (patch)
tree03a430a048349a590217c7a07cb024a0d596aa18
parent806e406b675f2827cec8c301c6bac3bd40211908 (diff)
downloadbun-b37cb738021fa87fffa2bee50329c1ae55d79f4d.tar.gz
bun-b37cb738021fa87fffa2bee50329c1ae55d79f4d.tar.zst
bun-b37cb738021fa87fffa2bee50329c1ae55d79f4d.zip
Use a JSFinalobject for Path
-rw-r--r--src/javascript/jsc/bindings/Path.cpp74
-rw-r--r--src/javascript/jsc/bindings/Path.h49
2 files changed, 42 insertions, 81 deletions
diff --git a/src/javascript/jsc/bindings/Path.cpp b/src/javascript/jsc/bindings/Path.cpp
index 4bb0f146c..09ea7ecf6 100644
--- a/src/javascript/jsc/bindings/Path.cpp
+++ b/src/javascript/jsc/bindings/Path.cpp
@@ -1,19 +1,15 @@
-#include "Path.h"
+#include "BunClientData.h"
+#include "root.h"
+#include <JavaScriptCore/JSFunction.h>
#include <JavaScriptCore/JSMicrotask.h>
#include <JavaScriptCore/ObjectConstructor.h>
#pragma mark - Node.js Path
-extern JSC__JSValue Bun__Path__create(JSC::JSGlobalObject* globalObject, bool isWindows)
-{
- JSC::VM& vm = globalObject->vm();
-
- return JSC::JSValue::encode(JSC::JSValue(Zig::Path::create(
- vm, isWindows, Zig::Path::createStructure(vm, globalObject, globalObject->objectPrototype()))));
-}
-
namespace Zig {
+static JSC::JSObject* createPath(JSC::JSGlobalObject* globalThis, bool isWindows);
+
using JSGlobalObject = JSC::JSGlobalObject;
using Exception = JSC::Exception;
using JSValue = JSC::JSValue;
@@ -28,7 +24,7 @@ namespace JSCastingHelpers = JSC::JSCastingHelpers;
// clang-format off
#define DEFINE_CALLBACK_FUNCTION_BODY(ZigFunction) JSC::VM& vm = globalObject->vm(); \
- auto* thisObject = JSC::jsDynamicCast<Path*>(vm, callFrame->thisValue()); \
+ auto* thisObject = JSC::jsDynamicCast<JSC::JSFinalObject*>(vm, callFrame->thisValue()); \
auto scope = DECLARE_THROW_SCOPE(vm); \
if (!thisObject) \
return throwVMTypeError(globalObject, scope); \
@@ -40,8 +36,10 @@ namespace JSCastingHelpers = JSC::JSCastingHelpers;
arguments.uncheckedAppend(JSC::JSValue::encode(callFrame->uncheckedArgument(i))); \
} \
} \
+ auto clientData = Bun::clientData(vm); \
+ auto isWindows = thisObject->get(globalObject, clientData->builtinNames().isWindowsPrivateName()); \
JSC::JSValue result = JSC::JSValue::decode( \
- ZigFunction(globalObject, thisObject->isWindows, arguments.data(), argCount) \
+ ZigFunction(globalObject, isWindows.asBoolean(), arguments.data(), argCount) \
); \
JSC::JSObject *obj = result.getObject(); \
if (UNLIKELY(obj != nullptr && obj->isErrorInstance())) { \
@@ -124,72 +122,84 @@ static JSC_DEFINE_HOST_FUNCTION(Path_functionToNamespacedPath,
return JSC::JSValue::encode(callFrame->argument(0));
}
-void Path::finishCreation(JSC::VM& vm)
+static JSC::JSObject* createPath(JSGlobalObject* globalThis, bool isWindows)
{
- Base::finishCreation(vm);
+ JSC::VM& vm = globalThis->vm();
+ JSC::Structure* plainObjectStructure = JSC::JSFinalObject::createStructure(vm, globalThis, globalThis->objectPrototype(), 0);
+ JSC::JSObject* path = JSC::JSFinalObject::create(vm, plainObjectStructure);
auto clientData = Bun::clientData(vm);
- JSC::JSGlobalObject* globalThis = globalObject();
- this->putDirect(vm, clientData->builtinNames().basenamePublicName(),
+ path->putDirect(vm, clientData->builtinNames().isWindowsPrivateName(),
+ JSC::jsBoolean(isWindows), 0);
+
+ path->putDirect(vm, clientData->builtinNames().basenamePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("basename"), Path_functionBasename),
0);
- this->putDirect(vm, clientData->builtinNames().dirnamePublicName(),
+ path->putDirect(vm, clientData->builtinNames().dirnamePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("dirname"), Path_functionDirname),
0);
- this->putDirect(vm, clientData->builtinNames().extnamePublicName(),
+ path->putDirect(vm, clientData->builtinNames().extnamePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("extname"), Path_functionExtname),
0);
- this->putDirect(vm, clientData->builtinNames().formatPublicName(),
+ path->putDirect(vm, clientData->builtinNames().formatPublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("format"), Path_functionFormat),
0);
- this->putDirect(vm, clientData->builtinNames().isAbsolutePublicName(),
+ path->putDirect(vm, clientData->builtinNames().isAbsolutePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("isAbsolute"), Path_functionIsAbsolute),
0);
- this->putDirect(vm, clientData->builtinNames().joinPublicName(),
+ path->putDirect(vm, clientData->builtinNames().joinPublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("join"), Path_functionJoin),
0);
- this->putDirect(vm, clientData->builtinNames().normalizePublicName(),
+ path->putDirect(vm, clientData->builtinNames().normalizePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("normalize"), Path_functionNormalize),
0);
- this->putDirect(vm, clientData->builtinNames().parsePublicName(),
+ path->putDirect(vm, clientData->builtinNames().parsePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("parse"), Path_functionParse),
0);
- this->putDirect(vm, clientData->builtinNames().relativePublicName(),
+ path->putDirect(vm, clientData->builtinNames().relativePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("relative"), Path_functionRelative),
0);
- this->putDirect(vm, clientData->builtinNames().resolvePublicName(),
+ path->putDirect(vm, clientData->builtinNames().resolvePublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("resolve"), Path_functionResolve),
0);
- this->putDirect(vm, clientData->builtinNames().toNamespacedPathPublicName(),
+ path->putDirect(vm, clientData->builtinNames().toNamespacedPathPublicName(),
JSC::JSFunction::create(vm, JSC::jsCast<JSC::JSGlobalObject*>(globalThis), 0,
WTF::String("toNamespacedPath"),
Path_functionToNamespacedPath),
0);
if (isWindows) {
- this->putDirect(vm, clientData->builtinNames().sepPublicName(),
+ path->putDirect(vm, clientData->builtinNames().sepPublicName(),
JSC::jsString(vm, WTF::String("\\"_s)), 0);
- this->putDirect(vm, clientData->builtinNames().delimiterPublicName(),
+ path->putDirect(vm, clientData->builtinNames().delimiterPublicName(),
JSC::jsString(vm, WTF::String(";"_s)), 0);
} else {
- this->putDirect(vm, clientData->builtinNames().sepPublicName(),
+ path->putDirect(vm, clientData->builtinNames().sepPublicName(),
JSC::jsString(vm, WTF::String("/"_s)), 0);
- this->putDirect(vm, clientData->builtinNames().delimiterPublicName(),
+ path->putDirect(vm, clientData->builtinNames().delimiterPublicName(),
JSC::jsString(vm, WTF::String(":"_s)), 0);
}
+
+ return path;
}
-const JSC::ClassInfo Path::s_info = { "Path", &Base::s_info, nullptr, nullptr,
- CREATE_METHOD_TABLE(Path) };
-} // namespace Zig \ No newline at end of file
+} // namespace Zig
+
+extern JSC__JSValue Bun__Path__create(JSC::JSGlobalObject* globalObject, bool isWindows)
+{
+ JSC::VM& vm = globalObject->vm();
+
+ return JSC::JSValue::encode(JSC::JSValue(Zig::createPath(
+ globalObject, isWindows)));
+} \ No newline at end of file
diff --git a/src/javascript/jsc/bindings/Path.h b/src/javascript/jsc/bindings/Path.h
index d229fedc6..e69de29bb 100644
--- a/src/javascript/jsc/bindings/Path.h
+++ b/src/javascript/jsc/bindings/Path.h
@@ -1,49 +0,0 @@
-#pragma once
-
-#include "BunBuiltinNames.h"
-#include "BunClientData.h"
-#include "root.h"
-
-namespace Zig {
-
-using namespace JSC;
-
-class Path : public JSC::JSNonFinalObject {
- using Base = JSC::JSNonFinalObject;
-
-public:
- Path(JSC::VM& vm, JSC::Structure* structure, bool isWindows_)
- : Base(vm, structure)
- {
- isWindows = isWindows_;
- }
-
- DECLARE_INFO;
-
- static constexpr unsigned StructureFlags = Base::StructureFlags;
-
- template<typename CellType, SubspaceAccess> static GCClient::IsoSubspace* subspaceFor(VM& vm)
- {
- return &vm.plainObjectSpace();
- }
-
- static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject,
- JSC::JSValue prototype)
- {
- return JSC::Structure::create(vm, globalObject, prototype,
- JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
- }
-
- static Path* create(JSC::VM& vm, bool isWindows, JSC::Structure* structure)
- {
- Path* accessor = new (NotNull, JSC::allocateCell<Path>(vm)) Path(vm, structure, isWindows);
-
- accessor->finishCreation(vm);
- return accessor;
- }
- bool isWindows = false;
-
- void finishCreation(JSC::VM& vm);
-};
-
-} // namespace Zig \ No newline at end of file