summaryrefslogtreecommitdiff
path: root/core/extension
diff options
context:
space:
mode:
authorbruvzg <7645683+bruvzg@users.noreply.github.com>2022-09-27 11:23:34 +0300
committerbruvzg <7645683+bruvzg@users.noreply.github.com>2022-09-28 10:04:11 +0300
commit8f5d56e04a60020ec8a6db2aebc9bf9bbaf727d1 (patch)
tree90eef85405113fa5f7d108ce738ac5f76f0e682b /core/extension
parent92bcd3c01d5188480793c03b2b50e97363ceb624 (diff)
[GDExtension] Use function names with underscore for TextServer extension, add macros to generate wrappers for module functions.
Diffstat (limited to 'core/extension')
-rw-r--r--core/extension/make_wrappers.py83
1 files changed, 71 insertions, 12 deletions
diff --git a/core/extension/make_wrappers.py b/core/extension/make_wrappers.py
index 862d313fba..1e4634ad2c 100644
--- a/core/extension/make_wrappers.py
+++ b/core/extension/make_wrappers.py
@@ -1,4 +1,60 @@
-proto = """
+proto_mod = """
+#define MODBIND$VER($RETTYPE m_name$ARG) \\
+virtual $RETVAL _##m_name($FUNCARGS) $CONST; \\
+_FORCE_INLINE_ virtual $RETVAL m_name($FUNCARGS) $CONST override { \\
+ $RETX _##m_name($CALLARGS);\\
+}
+"""
+
+
+def generate_mod_version(argcount, const=False, returns=False):
+ s = proto_mod
+ sproto = str(argcount)
+ method_info = ""
+ if returns:
+ sproto += "R"
+ s = s.replace("$RETTYPE", "m_ret, ")
+ s = s.replace("$RETVAL", "m_ret")
+ s = s.replace("$RETX", "return")
+
+ else:
+ s = s.replace("$RETTYPE", "")
+ s = s.replace("$RETVAL", "void")
+ s = s.replace("$RETX", "")
+
+ if const:
+ sproto += "C"
+ s = s.replace("$CONST", "const")
+ else:
+ s = s.replace("$CONST", "")
+
+ s = s.replace("$VER", sproto)
+ argtext = ""
+ funcargs = ""
+ callargs = ""
+
+ for i in range(argcount):
+ if i > 0:
+ funcargs += ", "
+ callargs += ", "
+
+ argtext += ", m_type" + str(i + 1)
+ funcargs += "m_type" + str(i + 1) + " arg" + str(i + 1)
+ callargs += "arg" + str(i + 1)
+
+ if argcount:
+ s = s.replace("$ARG", argtext)
+ s = s.replace("$FUNCARGS", funcargs)
+ s = s.replace("$CALLARGS", callargs)
+ else:
+ s = s.replace("$ARG", "")
+ s = s.replace("$FUNCARGS", funcargs)
+ s = s.replace("$CALLARGS", callargs)
+
+ return s
+
+
+proto_ex = """
#define EXBIND$VER($RETTYPE m_name$ARG) \\
GDVIRTUAL$VER($RETTYPE_##m_name$ARG)\\
virtual $RETVAL m_name($FUNCARGS) $CONST override { \\
@@ -9,8 +65,8 @@ virtual $RETVAL m_name($FUNCARGS) $CONST override { \\
"""
-def generate_version(argcount, const=False, returns=False):
- s = proto
+def generate_ex_version(argcount, const=False, returns=False):
+ s = proto_ex
sproto = str(argcount)
method_info = ""
if returns:
@@ -63,25 +119,28 @@ def generate_version(argcount, const=False, returns=False):
def run(target, source, env):
-
max_versions = 12
txt = """
#ifndef GDEXTENSION_WRAPPERS_GEN_H
#define GDEXTENSION_WRAPPERS_GEN_H
-
-
"""
for i in range(max_versions + 1):
+ txt += "\n/* Extension Wrapper " + str(i) + " Arguments */\n"
+ txt += generate_ex_version(i, False, False)
+ txt += generate_ex_version(i, False, True)
+ txt += generate_ex_version(i, True, False)
+ txt += generate_ex_version(i, True, True)
- txt += "/* " + str(i) + " Arguments */\n\n"
- txt += generate_version(i, False, False)
- txt += generate_version(i, False, True)
- txt += generate_version(i, True, False)
- txt += generate_version(i, True, True)
+ for i in range(max_versions + 1):
+ txt += "\n/* Module Wrapper " + str(i) + " Arguments */\n"
+ txt += generate_mod_version(i, False, False)
+ txt += generate_mod_version(i, False, True)
+ txt += generate_mod_version(i, True, False)
+ txt += generate_mod_version(i, True, True)
- txt += "#endif"
+ txt += "\n#endif\n"
with open(target[0], "w") as f:
f.write(txt)