Branch data Line data Source code
1 : : /* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
2 : : // SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
3 : : // SPDX-FileCopyrightText: 2008 litl, LLC
4 : :
5 : : #ifndef GJS_NATIVE_H_
6 : : #define GJS_NATIVE_H_
7 : :
8 : : #include <config.h>
9 : : #include <string>
10 : : #include <unordered_map>
11 : :
12 : : #include <js/TypeDecls.h>
13 : :
14 : : #include "gjs/macros.h"
15 : :
16 : : namespace Gjs {
17 : : class NativeModuleDefineFuncs {
18 : 96 : NativeModuleDefineFuncs() {}
19 : : typedef bool (*GjsDefineModuleFunc)(JSContext* context,
20 : : JS::MutableHandleObject module_out);
21 : :
22 : : std::unordered_map<std::string, GjsDefineModuleFunc> m_modules;
23 : :
24 : : public:
25 : 1404 : static NativeModuleDefineFuncs& get() {
26 [ + + + - ]: 1500 : static NativeModuleDefineFuncs the_singleton;
27 : 1404 : return the_singleton;
28 : : }
29 : :
30 : : /* called on context init */
31 : : void add(const char* module_id, GjsDefineModuleFunc func);
32 : :
33 : : // called by importer.cpp to to check for already loaded modules
34 : : [[nodiscard]] bool is_registered(const char* name) const;
35 : :
36 : : // called by importer.cpp to load a built-in native module
37 : : GJS_JSAPI_RETURN_CONVENTION
38 : : bool define(JSContext* cx, const char* name,
39 : : JS::MutableHandleObject module_out) const;
40 : : };
41 : : }; // namespace Gjs
42 : :
43 : : #endif // GJS_NATIVE_H_
|