Skip to content

Commit 254fe19

Browse files
committed
Fix compile error for godot 4.0
1 parent 5fd05b6 commit 254fe19

13 files changed

+519
-626
lines changed

ecmascript.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,6 @@ PlaceHolderScriptInstance *ECMAScript::placeholder_instance_create(Object *p_thi
7373
#endif
7474
}
7575

76-
bool ECMAScript::is_placeholder_fallback_enabled() const {
77-
#ifdef TOOLS_ENABLED
78-
return Engine::get_singleton()->is_editor_hint() && false;
79-
#else
80-
return false;
81-
#endif
82-
}
83-
8476
Error ECMAScript::reload(bool p_keep_state) {
8577
ecma_class = NULL;
8678
Error err = OK;
@@ -318,7 +310,7 @@ ECMAScriptModule::ECMAScriptModule() {
318310
}
319311

320312
Ref<Resource> ResourceFormatLoaderECMAScriptModule::load(const String &p_path, const String &p_original_path, Error *r_error) {
321-
Ref<Resource>turn load_static(p_path, p_original_path, r_error);
313+
return load_static(p_path, p_original_path, r_error);
322314
}
323315

324316
void ResourceFormatLoaderECMAScriptModule::get_recognized_extensions(List<String> *p_extensions) const {

ecmascript.h

Lines changed: 41 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -28,64 +28,60 @@ class ECMAScript : public Script {
2828
String code;
2929
String script_path;
3030
Vector<uint8_t> bytecode;
31-
3231
const BasicECMAClassInfo *ecma_class;
3332

3433
#ifdef TOOLS_ENABLED
3534
HashSet<PlaceHolderScriptInstance *> placeholders;
36-
virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder);
35+
virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder) override;
3736
#endif
3837

38+
Dictionary rpc_config;
39+
3940
protected:
4041
void _notification(int p_what) {}
4142
static void _bind_methods();
4243

4344
public:
44-
virtual bool can_instantiate() const;
45-
46-
/* TODO */ virtual Ref<Script> get_base_script() const { return nullptr; } //for script inheritance
47-
/* TODO */ virtual bool inherits_script(const Ref<Script> &p_script) const { return false; }
48-
49-
virtual StringName get_instance_base_type() const;
50-
virtual ScriptInstance *instance_create(Object *p_this);
51-
virtual bool instance_has(const Object *p_this) const;
52-
virtual PlaceHolderScriptInstance *placeholder_instance_create(Object *p_this);
45+
virtual bool can_instantiate() const override;
5346

54-
virtual bool is_placeholder_fallback_enabled() const;
47+
virtual Ref<Script> get_base_script() const override { return nullptr; }
48+
virtual bool inherits_script(const Ref<Script> &p_script) const override { return false; }
5549

56-
virtual bool has_source_code() const { return true; }
57-
virtual String get_source_code() const { return code; }
50+
virtual StringName get_instance_base_type() const override;
51+
virtual ScriptInstance *instance_create(Object *p_this) override;
52+
virtual PlaceHolderScriptInstance *placeholder_instance_create(Object *p_this) override;
53+
virtual bool instance_has(const Object *p_this) const override;
5854

59-
virtual void set_source_code(const String &p_code) { code = p_code; }
60-
virtual Error reload(bool p_keep_state = true);
55+
virtual bool has_source_code() const override { return true; }
56+
virtual String get_source_code() const override { return code; }
57+
virtual void set_source_code(const String &p_code) override { code = p_code; }
58+
virtual Error reload(bool p_keep_state = true) override;
6159

62-
virtual bool has_method(const StringName &p_method) const;
63-
virtual MethodInfo get_method_info(const StringName &p_method) const;
60+
#ifdef TOOLS_ENABLED
61+
_FORCE_INLINE_ virtual Vector<DocData::ClassDoc> get_documentation() const override { return Vector<DocData::ClassDoc>(); }
62+
#endif
6463

65-
virtual bool is_tool() const;
66-
virtual bool is_valid() const;
64+
virtual bool has_method(const StringName &p_method) const override;
65+
virtual MethodInfo get_method_info(const StringName &p_method) const override;
6766

68-
virtual void get_script_method_list(List<MethodInfo> *p_list) const;
69-
virtual void get_script_property_list(List<PropertyInfo> *p_list) const;
70-
virtual bool get_property_default_value(const StringName &p_property, Variant &r_value) const;
67+
virtual bool is_tool() const override;
68+
virtual bool is_valid() const override;
7169

72-
virtual bool has_script_signal(const StringName &p_signal) const;
73-
virtual void get_script_signal_list(List<MethodInfo> *r_signals) const;
70+
virtual ScriptLanguage *get_language() const override;
7471

75-
virtual void update_exports(); //editor tool
72+
virtual bool has_script_signal(const StringName &p_signal) const override;
73+
virtual void get_script_signal_list(List<MethodInfo> *r_signals) const override;
7674

77-
/* TODO */ virtual int get_member_line(const StringName &p_member) const { return -1; }
78-
/* TODO */ virtual void get_constants(HashMap<StringName, Variant> *p_constants) {}
79-
/* TODO */ virtual void get_members(HashSet<StringName> *p_constants) {}
75+
virtual bool get_property_default_value(const StringName &p_property, Variant &r_value) const override;
8076

81-
virtual ScriptLanguage *get_language() const;
77+
virtual void update_exports() override;
78+
virtual void get_script_method_list(List<MethodInfo> *p_list) const override;
79+
virtual void get_script_property_list(List<PropertyInfo> *p_list) const override;
8280

8381
_FORCE_INLINE_ String get_script_path() const { return script_path; }
8482
_FORCE_INLINE_ void set_script_path(const String &p_path) { script_path = p_path; }
8583

86-
#ifdef TOOLS_ENABLED
87-
_FORCE_INLINE_ virtual Vector<DocData::ClassDoc> get_documentation() { return Vector<DocData::ClassDoc>(); }
88-
#endif // TOOLS_ENABLED
84+
virtual const Variant get_rpc_config() const override { return rpc_config; }
8985

9086
ECMAScript();
9187
virtual ~ECMAScript();
@@ -95,18 +91,18 @@ class ResourceFormatLoaderECMAScript : public ResourceFormatLoader {
9591
GDCLASS(ResourceFormatLoaderECMAScript, ResourceFormatLoader)
9692
public:
9793
virtual Ref<Resource> load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
98-
virtual void get_recognized_extensions(List<String> *p_extensions) const;
99-
virtual void get_recognized_extensions_for_type(const String &p_type, List<String> *p_extensions) const;
100-
virtual bool handles_type(const String &p_type) const;
101-
virtual String get_resource_type(const String &p_path) const;
94+
virtual void get_recognized_extensions(List<String> *p_extensions) const override;
95+
virtual void get_recognized_extensions_for_type(const String &p_type, List<String> *p_extensions) const override;
96+
virtual bool handles_type(const String &p_type) const override;
97+
virtual String get_resource_type(const String &p_path) const override;
10298
};
10399

104100
class ResourceFormatSaverECMAScript : public ResourceFormatSaver {
105101
GDCLASS(ResourceFormatSaverECMAScript, ResourceFormatSaver)
106102
public:
107103
virtual Error save(const String &p_path, const Ref<Resource> &p_resource, uint32_t p_flags = 0);
108-
virtual void get_recognized_extensions(const Ref<Resource> &p_resource, List<String> *p_extensions) const;
109-
virtual bool recognize(const Ref<Resource> &p_resource) const;
104+
virtual void get_recognized_extensions(const Ref<Resource> &p_resource, List<String> *p_extensions) const override;
105+
virtual bool recognize(const Ref<Resource> &p_resource) const override;
110106
};
111107

112108
class ECMAScriptModule : public TextFile {
@@ -130,10 +126,10 @@ class ResourceFormatLoaderECMAScriptModule : public ResourceFormatLoader {
130126
GDCLASS(ResourceFormatLoaderECMAScriptModule, ResourceFormatLoader)
131127
public:
132128
virtual Ref<Resource> load(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
133-
virtual void get_recognized_extensions(List<String> *p_extensions) const;
134-
virtual void get_recognized_extensions_for_type(const String &p_type, List<String> *p_extensions) const;
135-
virtual bool handles_type(const String &p_type) const;
136-
virtual String get_resource_type(const String &p_path) const;
129+
virtual void get_recognized_extensions(List<String> *p_extensions) const override;
130+
virtual void get_recognized_extensions_for_type(const String &p_type, List<String> *p_extensions) const override;
131+
virtual bool handles_type(const String &p_type) const override;
132+
virtual String get_resource_type(const String &p_path) const override;
137133

138134
static Ref<Resource> load_static(const String &p_path, const String &p_original_path = "", Error *r_error = NULL);
139135
};
@@ -142,8 +138,8 @@ class ResourceFormatSaverECMAScriptModule : public ResourceFormatSaver {
142138
GDCLASS(ResourceFormatSaverECMAScriptModule, ResourceFormatSaver)
143139
public:
144140
virtual Error save(const String &p_path, const Ref<Resource> &p_resource, uint32_t p_flags = 0);
145-
virtual void get_recognized_extensions(const Ref<Resource> &p_resource, List<String> *p_extensions) const;
146-
virtual bool recognize(const Ref<Resource> &p_resource) const;
141+
virtual void get_recognized_extensions(const Ref<Resource> &p_resource, List<String> *p_extensions) const override;
142+
virtual bool recognize(const Ref<Resource> &p_resource) const override;
147143
};
148144

149145
#endif // ECMASCRIPT_H

ecmascript_binder.h

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,10 @@ class ECMAScriptBinder {
7171
virtual void language_finalize() = 0;
7272
virtual void frame() = 0;
7373

74-
virtual void *alloc_object_binding_data(Object *p_object) = 0;
75-
virtual void free_object_binding_data(void *p_gc_handle) = 0;
76-
77-
virtual void godot_refcount_incremented(RefCounted *p_object) = 0;
78-
virtual bool godot_refcount_decremented(RefCounted *p_object) = 0;
74+
virtual ECMAScriptGCHandler *alloc_object_binding_data(Object *p_object) = 0;
75+
virtual void free_object_binding_data(ECMAScriptGCHandler *p_gc_handle) = 0;
76+
virtual void godot_refcount_incremented(ECMAScriptGCHandler *p_gc_handle) = 0;
77+
virtual bool godot_refcount_decremented(ECMAScriptGCHandler *p_gc_handle) = 0;
7978

8079
virtual Error eval_string(const String &p_source, EvalType type, const String &p_path, ECMAScriptGCHandler &r_ret) = 0;
8180
virtual Error safe_eval_text(const String &p_source, EvalType type, const String &p_path, String &r_error, ECMAScriptGCHandler &r_ret) = 0;

ecmascript_instance.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Variant::Type ECMAScriptInstance::get_property_type(const StringName &p_name, bo
4646
return Variant::NIL;
4747
}
4848

49-
Variant ECMAScriptInstance::call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
49+
Variant ECMAScriptInstance::callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
5050
if (binder == NULL || ecma_object.ecma_object == NULL) {
5151
r_error.error = Callable::CallError::CALL_ERROR_INSTANCE_IS_NULL;
5252
ERR_FAIL_V(Variant());

ecmascript_instance.h

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,34 +18,21 @@ class ECMAScriptInstance : public ScriptInstance {
1818
const ECMAClassInfo *ecma_class;
1919

2020
public:
21-
virtual bool set(const StringName &p_name, const Variant &p_value);
22-
virtual bool get(const StringName &p_name, Variant &r_ret) const;
23-
virtual void get_property_list(List<PropertyInfo> *p_properties) const;
24-
virtual Variant::Type get_property_type(const StringName &p_name, bool *r_is_valid = NULL) const;
21+
virtual bool set(const StringName &p_name, const Variant &p_value) override;
22+
virtual bool get(const StringName &p_name, Variant &r_ret) const override;
23+
virtual void get_property_list(List<PropertyInfo> *p_properties) const override;
24+
virtual Variant::Type get_property_type(const StringName &p_name, bool *r_is_valid = nullptr) const override;
2525

26-
virtual Object *get_owner() { return owner; }
27-
virtual Ref<Script> get_script() const;
26+
virtual void get_method_list(List<MethodInfo> *p_list) const override;
27+
virtual bool has_method(const StringName &p_method) const override;
2828

29-
virtual void get_method_list(List<MethodInfo> *p_list) const;
30-
virtual bool has_method(const StringName &p_method) const;
29+
virtual Variant callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) override;
3130

32-
virtual Variant call(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error);
31+
virtual Object *get_owner() override { return owner; }
32+
virtual Ref<Script> get_script() const override;
33+
virtual ScriptLanguage *get_language() override;
3334

34-
/* TODO */ virtual void notification(int p_notification) {}
35-
36-
//this is used by script languages that keep a reference counter of their own
37-
//you can make make Ref<> not die when it reaches zero, so deleting the reference
38-
//depends entirely from the script
39-
40-
/* TODO */ virtual void refcount_incremented() {}
41-
/* TODO */ virtual bool refcount_decremented() { return true; } //return true if it can die
42-
43-
/* TODO */ virtual bool is_placeholder() const { return false; }
44-
45-
/* TODO */ virtual void property_set_fallback(const StringName &p_name, const Variant &p_value, bool *r_valid) {}
46-
/* TODO */ virtual Variant property_get_fallback(const StringName &p_name, bool *r_valid) { return Variant(); }
47-
48-
virtual ScriptLanguage *get_language();
35+
virtual void notification(int p_notification) override{};
4936

5037
ECMAScriptInstance();
5138
~ECMAScriptInstance();

ecmascript_language.cpp

Lines changed: 44 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,52 @@
33
#include "core/io/file_access.h"
44
ECMAScriptLanguage *ECMAScriptLanguage::singleton = NULL;
55

6+
namespace ECMAScriptInstanceBindingCallbacks {
7+
8+
static void *create_callback(void *p_token, void *p_instance) {
9+
if (ECMAScriptBinder *binder = ECMAScriptLanguage::get_singleton()->get_thread_binder(Thread::get_caller_id())) {
10+
return binder->alloc_object_binding_data(static_cast<Object *>(p_instance));
11+
}
12+
return nullptr;
13+
}
14+
15+
static void free_callback(void *p_token, void *p_instance, void *p_binding) {
16+
if (ECMAScriptBinder *binder = ECMAScriptLanguage::get_singleton()->get_thread_binder(Thread::get_caller_id())) {
17+
return binder->free_object_binding_data(static_cast<ECMAScriptGCHandler *>(p_binding));
18+
}
19+
}
20+
21+
static GDNativeBool reference_callback(void *p_token, void *p_binding, GDNativeBool p_reference) {
22+
if (ECMAScriptBinder *binder = ECMAScriptLanguage::get_singleton()->get_thread_binder(Thread::get_caller_id())) {
23+
if (p_reference) {
24+
binder->godot_refcount_incremented(static_cast<ECMAScriptGCHandler *>(p_binding));
25+
return false;
26+
} else {
27+
return binder->godot_refcount_decremented(static_cast<ECMAScriptGCHandler *>(p_binding));
28+
}
29+
}
30+
return true;
31+
}
32+
33+
} // namespace ECMAScriptInstanceBindingCallbacks
34+
35+
ECMAScriptLanguage::ECMAScriptLanguage() {
36+
ERR_FAIL_COND(singleton);
37+
singleton = this;
38+
main_binder = memnew(QuickJSBinder);
39+
instance_binding_callbacks.create_callback = ECMAScriptInstanceBindingCallbacks::create_callback;
40+
instance_binding_callbacks.free_callback = ECMAScriptInstanceBindingCallbacks::free_callback;
41+
instance_binding_callbacks.reference_callback = ECMAScriptInstanceBindingCallbacks::reference_callback;
42+
}
43+
44+
ECMAScriptLanguage::~ECMAScriptLanguage() {
45+
memdelete(main_binder);
46+
}
47+
648
void ECMAScriptLanguage::init() {
749
ERR_FAIL_NULL(main_binder);
850
main_binder->initialize();
51+
execute_file("bin/test.js");
952
}
1053

1154
void ECMAScriptLanguage::finish() {
@@ -212,7 +255,7 @@ Ref<Script> ECMAScriptLanguage::get_template(const String &p_class_name, const S
212255
}
213256

214257
Ref<Script> ECMAScriptLanguage::make_template(const String &p_template, const String &p_class_name, const String &p_base_class_name) const {
215-
Ref<Script> script;
258+
Ref<ECMAScript> script;
216259
script.instantiate();
217260
String src = script->get_source_code();
218261
src = src.replace("%BASE%", p_base_class_name).replace("%CLASS%", p_class_name);
@@ -267,32 +310,6 @@ void ECMAScriptLanguage::get_recognized_extensions(List<String> *p_extensions) c
267310
p_extensions->push_back(EXT_JSCLASS_BYTECODE);
268311
}
269312

270-
void *ECMAScriptLanguage::alloc_instance_binding_data(Object *p_object) {
271-
if (ECMAScriptBinder *binder = get_thread_binder(Thread::get_caller_id())) {
272-
return binder->alloc_object_binding_data(p_object);
273-
}
274-
return NULL;
275-
}
276-
277-
void ECMAScriptLanguage::free_instance_binding_data(void *p_data) {
278-
if (ECMAScriptBinder *binder = get_thread_binder(Thread::get_caller_id())) {
279-
return binder->free_object_binding_data(p_data);
280-
}
281-
}
282-
283-
void ECMAScriptLanguage::refcount_incremented_instance_binding(Object *p_object) {
284-
if (ECMAScriptBinder *binder = get_thread_binder(Thread::get_caller_id())) {
285-
binder->godot_refcount_incremented(static_cast<RefCounted *>(p_object));
286-
}
287-
}
288-
289-
bool ECMAScriptLanguage::refcount_decremented_instance_binding(Object *p_object) {
290-
if (ECMAScriptBinder *binder = get_thread_binder(Thread::get_caller_id())) {
291-
return binder->godot_refcount_decremented(static_cast<RefCounted *>(p_object));
292-
}
293-
return true;
294-
}
295-
296313
void ECMAScriptLanguage::frame() {
297314
main_binder->frame();
298315
}
@@ -325,14 +342,3 @@ String ECMAScriptLanguage::globalize_relative_path(const String &p_relative, con
325342
}
326343
return file;
327344
}
328-
329-
ECMAScriptLanguage::ECMAScriptLanguage() {
330-
331-
ERR_FAIL_COND(singleton);
332-
singleton = this;
333-
main_binder = memnew(QuickJSBinder);
334-
}
335-
336-
ECMAScriptLanguage::~ECMAScriptLanguage() {
337-
memdelete(main_binder);
338-
}

0 commit comments

Comments
 (0)