Skip to content

Commit

Permalink
Fix registration of PythonScriptLanguage&PythonScriptLanguage
Browse files Browse the repository at this point in the history
  • Loading branch information
touilleMan committed Dec 24, 2023
1 parent b75655e commit 056dfc0
Show file tree
Hide file tree
Showing 6 changed files with 140 additions and 131 deletions.
10 changes: 5 additions & 5 deletions scripts/gdextension_cython_preprocessor.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ def generate_injected_code_method(spec: MethodDef, class_spec: ClassDef) -> str:
cdef void __godot_extension_class_meth_{spec.method_name}(
void *method_userdata,
GDExtensionClassInstancePtr p_instance,
const GDNativeTypePtr *p_args,
GDNativeTypePtr r_ret,
) with gil:
const GDExtensionConstTypePtr *p_args,
GDExtensionTypePtr r_ret,
) noexcept with gil:
"""

if spec.return_type == "void":
Expand All @@ -69,13 +69,13 @@ def __godot_extension_unregister_class():
unregister_extension_class(b"{spec.class_name}")
@staticmethod
cdef GDExtensionClassInstancePtr __godot_extension_new(void* p_userdata) with gil:
cdef GDExtensionClassInstancePtr __godot_extension_new(void* p_userdata) noexcept with gil:
cdef {spec.class_name} obj = {spec.class_name}()
Py_INCREF(obj)
return <PyObject*>obj
@staticmethod
cdef void __godot_extension_free(void* p_userdata, GDExtensionClassInstancePtr p_instance) with gil:
cdef void __godot_extension_free(void* p_userdata, GDExtensionClassInstancePtr p_instance) noexcept with gil:
Py_DECREF(<{spec.class_name}>p_instance)
@staticmethod
Expand Down
14 changes: 10 additions & 4 deletions src/_pythonscript.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,11 @@ cdef api void _pythonscript_early_init() noexcept with gil:

pass
# # 1) Register `PythonScript` class into Godot
# PythonScriptLanguage.__godot_extension_register_class()
# PythonScript.__godot_extension_register_class()
# See `scripts/gdextension_cython_preprocessor.py` for the detail of
# `__godot_extension_register_class`'s implementation.

PythonScriptLanguage._PythonScriptLanguage__godot_extension_register_class()
PythonScript._PythonScript__godot_extension_register_class()


# # OS and ProjectSettings are singletons exposed as global python objects,
Expand Down Expand Up @@ -195,6 +198,8 @@ cdef api void _pythonscript_early_init() noexcept with gil:

cdef api void _pythonscript_initialize(int p_level) noexcept with gil:
if p_level == GDEXTENSION_INITIALIZATION_SERVERS:
_pythonscript_early_init()

import sys
from godot._version import __version__ as pythonscript_version

Expand Down Expand Up @@ -222,5 +227,6 @@ cdef api void _pythonscript_deinitialize(int p_level) noexcept with gil:
# That will continue until `godot_gdnative_terminate` is called (which is
# responsible for the actual teardown of the interpreter).

# PythonScript.__godot_extension_unregister_class()
# PythonScriptLanguage.__godot_extension_unregister_class()
if p_level == GDEXTENSION_INITIALIZATION_SERVERS:
PythonScript._PythonScript__godot_extension_unregister_class()
PythonScriptLanguage._PythonScriptLanguage__godot_extension_unregister_class()
122 changes: 61 additions & 61 deletions src/_pythonscript_extension_class_language.pxi
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
cdef StringName gdname_scriptlanguageextension = StringName("ScriptLanguageExtension")
cdef StringName gdname_pythonscriptlanguage = StringName("PythonScriptLanguage")

# godot_extension_class: class(parent="ScriptLanguageExtension")
# godot_extension: class(parent="ScriptLanguageExtension")
@cython.final
cdef class PythonScriptLanguage:
cdef gd_object_t _gd_ptr
Expand All @@ -10,251 +10,251 @@ cdef class PythonScriptLanguage:
self._gd_ptr = pythonscript_gdextension.classdb_construct_object(&gdname_scriptlanguageextension._gd_data)
pythonscript_gdextension.object_set_instance(self._gd_ptr, &gdname_pythonscriptlanguage._gd_data, <PyObject*>self)

# godot_extension_class: generate_code()
# godot_extension: generate_code()

# # editor

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_dictionary_t _validate(gd_string_t script, gd_string_t path, gd_bool_t validate_functions, gd_bool_t validate_errors, gd_bool_t validate_warnings, gd_bool_t validate_safe_lines):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_string_t _validate_path(gd_string_t path):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_string_t _auto_indent_code(gd_string_t code, gd_int_t from_line, gd_int_t to_line):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_dictionary_t _complete_code(gd_string_t code, gd_string_t path, gd_object_t owner):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_int_t _find_function(gd_string_t class_name, gd_string_t function_name):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef Error _open_in_external_editor(Script script, gd_int_t line, gd_int_t column):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_string_t _make_function(gd_string_t class_name, gd_string_t function_name, gd_packed_string_array_t function_args):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef Script _make_template(gd_string_t template, gd_string_t class_name, gd_string_t base_class_name):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_dictionary_t _lookup_code(gd_string_t code, gd_string_t symbol, gd_string_t path, gd_object_t owner):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef gd_bool_t _overrides_external_editor():
# pass

# # debug

# # godot_extension_class: method()
# # godot_extension: method()
# cdef gd_dictionary_t _debug_get_current_stack_info():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_string_t _debug_get_error():
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef gd_dictionary_t _debug_get_globals(gd_int_t max_subitems, gd_int_t max_depth):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_int_t _debug_get_stack_level_count():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_string_t _debug_get_stack_level_function(gd_int_t level):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void* _debug_get_stack_level_instance(gd_int_t level):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_int_t _debug_get_stack_level_line(gd_int_t level):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef gd_dictionary_t _debug_get_stack_level_locals(gd_int_t level, gd_int_t max_subitems, gd_int_t max_depth):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef gd_dictionary_t _debug_get_stack_level_members(gd_int_t level, gd_int_t max_subitems, gd_int_t max_depth):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef gd_string_t _debug_parse_stack_level_expression(gd_int_t level, gd_string_t expression, gd_int_t max_subitems, gd_int_t max_depth):
# pass

# # profiling

# # godot_extension_class: method()
# # godot_extension: method()
# cdef gd_int_t _profiling_get_accumulated_data(ScriptLanguageExtensionProfilingInfo* info_array, gd_int_t info_max):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef gd_int_t _profiling_get_frame_data(ScriptLanguageExtensionProfilingInfo* info_array, gd_int_t info_max):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _profiling_start():
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _profiling_stop():
# pass

# # spec

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_bool_t _can_inherit_from_file():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_packed_string_array_t _get_comment_delimiters():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_string_t _get_extension():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_string_t _get_name():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_packed_string_array_t _get_recognized_extensions():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_packed_string_array_t _get_reserved_words():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_packed_string_array_t _get_string_delimiters():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_string_t _get_type():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_bool_t _has_named_classes():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_bool_t _is_control_flow_keyword(gd_string_t keyword):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef gd_bool_t _is_using_templates():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_bool_t _supports_builtin_mode():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_bool_t _supports_documentation():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_dictionary_t _get_built_in_templates(gd_string_name_t object):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_dictionary_t _get_global_class_name(gd_string_t path):
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_dictionary_t _get_public_annotations():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_dictionary_t _get_public_constants():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_dictionary_t _get_public_functions():
# pass

# # runtime

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _add_global_constant(gd_string_name_t name, gd_variant_t value):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _add_named_global_constant(gd_string_name_t name, gd_variant_t value):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _remove_named_global_constant(gd_string_name_t name):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _init():
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _finish():
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _frame():
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void* _alloc_instance_binding_data(gd_object_t object):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _free_instance_binding_data(void* data):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef gd_bool_t _refcount_decremented_instance_binding(gd_object_t object):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _refcount_incremented_instance_binding(gd_object_t object):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _thread_enter():
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _thread_exit():
# pass


# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_object_t _create_script():
# pass

# # godot_extension_class: method(const=True)
# # godot_extension: method(const=True)
# cdef gd_bool_t _handles_global_class_type(gd_string_t type):
# pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef Error _execute_file(gd_string_t path):
# pass

# godot_extension_class: method()
# godot_extension: method()
cdef void _reload_all_scripts(self):
pass

# # godot_extension_class: method()
# # godot_extension: method()
# cdef void _reload_tool_script(self, Script script, gd_bool_t soft_reload):
# pass
Loading

0 comments on commit 056dfc0

Please sign in to comment.