Skip to content

Commit 6d05d21

Browse files
committed
Implement LuaScriptInstance tostring
1 parent a17b731 commit 6d05d21

File tree

4 files changed

+21
-5
lines changed

4 files changed

+21
-5
lines changed

src/script-language/LuaScript.cpp

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,12 +322,26 @@ void LuaScript::_instance_notification(LuaScriptInstance *instance, int32_t what
322322
}
323323
}
324324

325+
bool LuaScript::_instance_tostring(LuaScriptInstance *instance, String& str) const {
326+
if (const Ref<LuaFunction> *method = methods.getptr("__tostring")) {
327+
Variant result = method->ptr()->call_method(instance);
328+
if (LuaError *lua_error = Object::cast_to<LuaError>(result)) {
329+
ERR_FAIL_V_MSG(false, lua_error->get_message());
330+
}
331+
str = result;
332+
return true;
333+
}
334+
else {
335+
return false;
336+
}
337+
}
338+
325339
void LuaScript::_bind_methods() {
326340
ClassDB::bind_vararg_method(METHOD_FLAGS_DEFAULT, "new", &LuaScript::_new);
327341
}
328342

329343
String LuaScript::_to_string() const {
330-
return String("[%s:%d]") % Array::make(get_class(), get_instance_id());
344+
return String("[%s:%d]") % Array::make(get_class_static(), get_instance_id());
331345
}
332346

333347
void LuaScript::process_script_result(const Variant& result) {
@@ -364,7 +378,6 @@ void LuaScript::process_script_result(const Variant& result) {
364378
default:
365379
// TODO: add support for property metadata
366380
properties[key] = LuaScriptProperty {
367-
.name = key,
368381
.type = value.get_type(),
369382
.default_value = value,
370383
};

src/script-language/LuaScript.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ class LuaScriptLanguage;
3737
class LuaTable;
3838

3939
struct LuaScriptProperty {
40-
StringName name;
4140
Variant::Type type;
4241
Variant default_value;
4342

@@ -94,6 +93,7 @@ class LuaScript : public ScriptExtension {
9493
bool _instance_get(LuaScriptInstance *instance, const StringName& p_name, Variant& p_value) const;
9594
Variant _instance_call(LuaScriptInstance *instance, const StringName& p_name, const Variant **p_args, GDExtensionInt p_argument_count, GDExtensionCallError& r_error) const;
9695
void _instance_notification(LuaScriptInstance *instance, int32_t what, GDExtensionBool reversed) const;
96+
bool _instance_tostring(LuaScriptInstance *instance, String& str) const;
9797

9898
protected:
9999
static void _bind_methods();

src/script-language/LuaScriptInstance.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ namespace luagdextension {
3232
LuaScriptInstance::LuaScriptInstance(Object *owner, Ref<LuaScript> script)
3333
: owner(owner)
3434
, script(script)
35+
, properties()
3536
{
3637
known_instances.insert(owner, this);
3738
}
@@ -79,7 +80,9 @@ void notification_func(LuaScriptInstance *p_instance, int32_t p_what, GDExtensio
7980
p_instance->script->_instance_notification(p_instance, p_what, p_reversed);
8081
}
8182

82-
GDExtensionScriptInstanceToString to_string_func;
83+
void to_string_func(LuaScriptInstance *p_instance, GDExtensionBool *r_is_valid, String *r_out) {
84+
*r_is_valid = p_instance->script->_instance_tostring(p_instance, *r_out);
85+
}
8386

8487
void refcount_incremented_func(LuaScriptInstance *) {
8588
}

src/script-language/LuaScriptInstance.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ struct LuaScriptInstance {
4141

4242
Object *owner;
4343
Ref<LuaScript> script;
44-
Dictionary properties = {};
44+
Dictionary properties;
4545

4646
private:
4747
static HashMap<Object *, LuaScriptInstance *> known_instances;

0 commit comments

Comments
 (0)