diff options
Diffstat (limited to 'core/extension')
-rw-r--r-- | core/extension/make_wrappers.py | 83 |
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) |