make_wrappers.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. proto = """
  2. #define EXBIND$VER($RETTYPE m_name$ARG) \\
  3. GDVIRTUAL$VER($RETTYPE_##m_name$ARG)\\
  4. virtual $RETVAL m_name($FUNCARGS) $CONST override { \\
  5. $RETPRE\\
  6. GDVIRTUAL_REQUIRED_CALL(_##m_name$CALLARGS$RETREF);\\
  7. $RETPOST\\
  8. }
  9. """
  10. def generate_version(argcount, const=False, returns=False):
  11. s = proto
  12. sproto = str(argcount)
  13. method_info = ""
  14. if returns:
  15. sproto += "R"
  16. s = s.replace("$RETTYPE", "m_ret, ")
  17. s = s.replace("$RETVAL", "m_ret")
  18. s = s.replace("$RETPRE", "m_ret ret; ZeroInitializer<m_ret>::initialize(ret);\\\n")
  19. s = s.replace("$RETPOST", "return ret;\\\n")
  20. else:
  21. s = s.replace("$RETTYPE", "")
  22. s = s.replace("$RETVAL", "void")
  23. s = s.replace("$RETPRE", "")
  24. s = s.replace("$RETPOST", "return;")
  25. if const:
  26. sproto += "C"
  27. s = s.replace("$CONST", "const")
  28. else:
  29. s = s.replace("$CONST", "")
  30. s = s.replace("$VER", sproto)
  31. argtext = ""
  32. funcargs = ""
  33. callargs = ""
  34. for i in range(argcount):
  35. if i > 0:
  36. funcargs += ", "
  37. argtext += ", m_type" + str(i + 1)
  38. funcargs += "m_type" + str(i + 1) + " arg" + str(i + 1)
  39. callargs += ", arg" + str(i + 1)
  40. if argcount:
  41. s = s.replace("$ARG", argtext)
  42. s = s.replace("$FUNCARGS", funcargs)
  43. s = s.replace("$CALLARGS", callargs)
  44. else:
  45. s = s.replace("$ARG", "")
  46. s = s.replace("$FUNCARGS", funcargs)
  47. s = s.replace("$CALLARGS", callargs)
  48. if returns:
  49. s = s.replace("$RETREF", ", ret")
  50. else:
  51. s = s.replace("$RETREF", "")
  52. return s
  53. def run(target, source, env):
  54. max_versions = 12
  55. txt = """
  56. #ifndef GDEXTENSION_WRAPPERS_GEN_H
  57. #define GDEXTENSION_WRAPPERS_GEN_H
  58. """
  59. for i in range(max_versions + 1):
  60. txt += "/* " + str(i) + " Arguments */\n\n"
  61. txt += generate_version(i, False, False)
  62. txt += generate_version(i, False, True)
  63. txt += generate_version(i, True, False)
  64. txt += generate_version(i, True, True)
  65. txt += "#endif"
  66. with open(target[0], "w") as f:
  67. f.write(txt)
  68. if __name__ == "__main__":
  69. from platform_methods import subprocess_main
  70. subprocess_main(globals())