aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/JSSocketAddress.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/bindings/JSSocketAddress.cpp')
-rw-r--r--src/bun.js/bindings/JSSocketAddress.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/bun.js/bindings/JSSocketAddress.cpp b/src/bun.js/bindings/JSSocketAddress.cpp
new file mode 100644
index 000000000..53084adb6
--- /dev/null
+++ b/src/bun.js/bindings/JSSocketAddress.cpp
@@ -0,0 +1,61 @@
+#include "JSSocketAddress.h"
+#include "ZigGlobalObject.h"
+#include "JavaScriptCore/JSObjectInlines.h"
+#include "JavaScriptCore/ObjectConstructor.h"
+#include "JavaScriptCore/JSCast.h"
+
+using namespace JSC;
+
+namespace Bun {
+namespace JSSocketAddress {
+
+// Using a structure with inlined offsets will be more lightweight than a class.
+
+Structure* createStructure(VM& vm, JSGlobalObject* globalObject)
+{
+ JSC::Structure* structure = globalObject->structureCache().emptyObjectStructureForPrototype(
+ globalObject,
+ globalObject->objectPrototype(),
+ 3);
+
+ JSC::PropertyOffset offset;
+ structure = structure->addPropertyTransition(
+ vm,
+ structure,
+ JSC::Identifier::fromString(vm, "address"_s),
+ 0,
+ offset);
+
+ structure = structure->addPropertyTransition(
+ vm,
+ structure,
+ JSC::Identifier::fromString(vm, "family"_s),
+ 0,
+ offset);
+
+ structure = structure->addPropertyTransition(
+ vm,
+ structure,
+ JSC::Identifier::fromString(vm, "port"_s),
+ 0,
+ offset);
+
+ return structure;
+}
+
+} // namespace JSSocketAddress
+} // namespace Bun
+
+extern "C" JSObject* JSSocketAddress__create(JSGlobalObject* globalObject, JSString* value, int32_t port, bool isIPv6)
+{
+ VM& vm = globalObject->vm();
+
+ auto* global = jsCast<Zig::GlobalObject*>(globalObject);
+
+ JSObject* thisObject = constructEmptyObject(vm, global->JSSocketAddressStructure());
+ thisObject->putDirectOffset(vm, 0, value);
+ thisObject->putDirectOffset(vm, 1, isIPv6 ? jsString(vm, Bun::JSSocketAddress::IPv6) : jsString(vm, Bun::JSSocketAddress::IPv4));
+ thisObject->putDirectOffset(vm, 2, jsNumber(port));
+
+ return thisObject;
+}