diff options
author | Marc <marc.gilleron@gmail.com> | 2020-08-16 23:30:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-16 23:30:52 +0100 |
commit | 19fa40591b8b37616cd902947f0038ba87729fcd (patch) | |
tree | 86d4fc21efff8a3ce19ddeb2476adc9ac3a3b272 /binding_generator.py | |
parent | 16000199c5e2f27c0507acf23c2c0d1459c3a0c5 (diff) | |
parent | 33f9de16e414ad091fb6d4a6326f5cc435016ef9 (diff) | |
download | redot-cpp-19fa40591b8b37616cd902947f0038ba87729fcd.tar.gz |
Merge pull request #365 from sheepandshepherd/class_ptr
Fix `cast_to` for non-exposed engine types
Diffstat (limited to 'binding_generator.py')
-rw-r--r-- | binding_generator.py | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/binding_generator.py b/binding_generator.py index 13505db..2f17592 100644 --- a/binding_generator.py +++ b/binding_generator.py @@ -146,10 +146,14 @@ def generate_class_header(used_classes, c): source.append("\t};") source.append("\tstatic ___method_bindings ___mb;") + source.append("\tstatic void *_detail_class_tag;") source.append("") source.append("public:") source.append("\tstatic void ___init_method_bindings();") + # class id from core engine for casting + source.append("\tinline static size_t ___get_id() { return (size_t)_detail_class_tag; }") + source.append("") @@ -355,11 +359,19 @@ def generate_class_implementation(icalls, used_classes, c): source.append(class_name + "::___method_bindings " + class_name + "::___mb = {};") source.append("") + source.append("void *" + class_name + "::_detail_class_tag = nullptr;") + source.append("") + source.append("void " + class_name + "::___init_method_bindings() {") for method in c["methods"]: source.append("\t___mb.mb_" + method["name"] + " = godot::api->godot_method_bind_get_method(\"" + c["name"] + "\", \"" + method["name"] + "\");") + source.append("\tgodot_string_name class_name;") + source.append("\tgodot::api->godot_string_name_new_data(&class_name, \"" + c["name"] + "\");") + source.append("\t_detail_class_tag = godot::core_1_2_api->godot_get_class_tag(&class_name);") + source.append("\tgodot::api->godot_string_name_destroy(&class_name);") + source.append("}") source.append("") |