Pyrogenesis HEAD
Pyrogenesis, a RTS Engine
InterfaceScripted.h
Go to the documentation of this file.
1/* Copyright (C) 2021 Wildfire Games.
2 * This file is part of 0 A.D.
3 *
4 * 0 A.D. is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * 0 A.D. is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with 0 A.D. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef INCLUDED_INTERFACE_SCRIPTED
19#define INCLUDED_INTERFACE_SCRIPTED
20
24
25#define BEGIN_INTERFACE_WRAPPER(iname) \
26 JSClass class_ICmp##iname = { \
27 "ICmp" #iname, JSCLASS_HAS_PRIVATE \
28 }; \
29 static JSFunctionSpec methods_ICmp##iname[] = {
30
31#define END_INTERFACE_WRAPPER(iname) \
32 JS_FS_END \
33 }; \
34 void ICmp##iname::InterfaceInit(ScriptInterface& scriptInterface) { \
35 scriptInterface.DefineCustomObjectType(&class_ICmp##iname, NULL, 0, NULL, methods_ICmp##iname, NULL, NULL); \
36 } \
37 bool ICmp##iname::NewJSObject(const ScriptInterface& scriptInterface, JS::MutableHandleObject out) const\
38 { \
39 out.set(scriptInterface.CreateCustomObject("ICmp" #iname)); \
40 return true; \
41 } \
42 void RegisterComponentInterface_##iname(ScriptInterface& scriptInterface) { \
43 ICmp##iname::InterfaceInit(scriptInterface); \
44 }
45
46template <typename T, JSClass* jsClass>
47inline T* ComponentGetter(const ScriptRequest& rq, JS::CallArgs& args)
48{
49 return ScriptInterface::GetPrivate<T>(rq, args, jsClass);
50}
51
52#define DEFINE_INTERFACE_METHOD(scriptname, classname, methodname) \
53 ScriptFunction::Wrap<&classname::methodname, ComponentGetter<classname, &class_##classname>>(scriptname),
54
55#endif // INCLUDED_INTERFACE_SCRIPTED
T * ComponentGetter(const ScriptRequest &rq, JS::CallArgs &args)
Definition: InterfaceScripted.h:47
Spidermonkey maintains some 'local' state via the JSContext* object.
Definition: ScriptRequest.h:60
#define T(string_literal)
Definition: secure_crt.cpp:77