summaryrefslogtreecommitdiffstats
path: root/toolkit/components/reflect
diff options
context:
space:
mode:
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.sys.mjs21
5 files changed, 122 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..2da16815a0
--- /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.sys.mjs",
+]
+
+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.sys.mjs b/toolkit/components/reflect/reflect.sys.mjs
new file mode 100644
index 0000000000..99535aa94e
--- /dev/null
+++ b/toolkit/components/reflect/reflect.sys.mjs
@@ -0,0 +1,21 @@
+/* -*- 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/. */
+
+/*
+ * This is the js module for Reflect. Import it like so:
+ * const { Reflect } = ChromeUtils.importESModule(
+ * "resource://gre/modules/reflect.sys.mjs"
+ * );
+ *
+ * This will create a 'Reflect' object, which provides an interface to the
+ * SpiderMonkey parser API.
+ */
+
+// Initialize the Reflect 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 const Reflect = globalThis.Reflect;