summaryrefslogtreecommitdiffstats
path: root/toolkit/components/reflect
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /toolkit/components/reflect
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/reflect')
-rw-r--r--toolkit/components/reflect/components.conf14
-rw-r--r--toolkit/components/reflect/moz.build22
-rw-r--r--toolkit/components/reflect/reflect.cpp36
-rw-r--r--toolkit/components/reflect/reflect.h29
-rw-r--r--toolkit/components/reflect/reflect.jsm28
5 files changed, 129 insertions, 0 deletions
diff --git a/toolkit/components/reflect/components.conf b/toolkit/components/reflect/components.conf
new file mode 100644
index 0000000000..227be02919
--- /dev/null
+++ b/toolkit/components/reflect/components.conf
@@ -0,0 +1,14 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+Classes = [
+ {
+ 'cid': '{1a817186-357a-47cd-8aea-2850d60e959e}',
+ 'contract_ids': ['@mozilla.org/jsreflect;1'],
+ 'type': 'mozilla::reflect::Module',
+ 'headers': ['/toolkit/components/reflect/reflect.h'],
+ },
+]
diff --git a/toolkit/components/reflect/moz.build b/toolkit/components/reflect/moz.build
new file mode 100644
index 0000000000..3bd952b157
--- /dev/null
+++ b/toolkit/components/reflect/moz.build
@@ -0,0 +1,22 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+with Files("**"):
+ BUG_COMPONENT = ("Core", "JavaScript Engine")
+
+SOURCES += [
+ "reflect.cpp",
+]
+
+EXTRA_JS_MODULES += [
+ "reflect.jsm",
+]
+
+XPCOM_MANIFESTS += [
+ "components.conf",
+]
+
+FINAL_LIBRARY = "xul"
diff --git a/toolkit/components/reflect/reflect.cpp b/toolkit/components/reflect/reflect.cpp
new file mode 100644
index 0000000000..e807e559cf
--- /dev/null
+++ b/toolkit/components/reflect/reflect.cpp
@@ -0,0 +1,36 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "reflect.h"
+#include "jsapi.h"
+
+#include "nsString.h"
+#include "xpc_make_class.h"
+
+namespace mozilla::reflect {
+
+NS_IMPL_ISUPPORTS(Module, nsIXPCScriptable)
+
+Module::Module() = default;
+
+Module::~Module() = default;
+
+#define XPC_MAP_CLASSNAME Module
+#define XPC_MAP_QUOTED_CLASSNAME "Module"
+#define XPC_MAP_FLAGS XPC_SCRIPTABLE_WANT_CALL
+#include "xpc_map_end.h"
+
+NS_IMETHODIMP
+Module::Call(nsIXPConnectWrappedNative* wrapper, JSContext* cx, JSObject* obj,
+ const JS::CallArgs& args, bool* _retval) {
+ JS::Rooted<JSObject*> global(cx, JS::GetScriptedCallerGlobal(cx));
+ if (!global) return NS_ERROR_NOT_AVAILABLE;
+
+ JSAutoRealm ar(cx, global);
+ *_retval = JS_InitReflectParse(cx, global);
+ return NS_OK;
+}
+
+} // namespace mozilla::reflect
diff --git a/toolkit/components/reflect/reflect.h b/toolkit/components/reflect/reflect.h
new file mode 100644
index 0000000000..0e5524dd3c
--- /dev/null
+++ b/toolkit/components/reflect/reflect.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#ifndef COMPONENTS_REFLECT_H
+#define COMPONENTS_REFLECT_H
+
+#include "nsIXPCScriptable.h"
+#include "nsISupports.h"
+
+namespace mozilla {
+namespace reflect {
+
+class Module final : public nsIXPCScriptable {
+ public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIXPCSCRIPTABLE
+
+ Module();
+
+ private:
+ ~Module();
+};
+
+} // namespace reflect
+} // namespace mozilla
+
+#endif
diff --git a/toolkit/components/reflect/reflect.jsm b/toolkit/components/reflect/reflect.jsm
new file mode 100644
index 0000000000..cfdd208afd
--- /dev/null
+++ b/toolkit/components/reflect/reflect.jsm
@@ -0,0 +1,28 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var EXPORTED_SYMBOLS = ["Reflect"];
+
+/*
+ * This is the js module for Reflect. Import it like so:
+ * const { Reflect } = ChromeUtils.import(
+ * "resource://gre/modules/reflect.jsm"
+ * );
+ *
+ * This will create a 'Reflect' object, which provides an interface to the
+ * SpiderMonkey parser API.
+ *
+ * For documentation on the API, see:
+ * https://developer.mozilla.org/en/SpiderMonkey/Parser_API
+ *
+ */
+
+// Initialize the ctypes object. You do not need to do this yourself.
+const init = Cc["@mozilla.org/jsreflect;1"].createInstance();
+init();
+
+// Reflect is a standard built-in defined on the shared global.
+// Export it via a lexical variable on the per-JSM global.
+const Reflect = globalThis.Reflect;