1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-13 13:31:48 +00:00

Fix global classes can't be used in the Evaluator

This commit is contained in:
ydeltastar
2025-03-11 13:32:38 -03:00
parent 42c7f14422
commit a5181d75f4

View File

@@ -544,25 +544,60 @@ void RemoteDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
break;
}
PackedStringArray input_names;
Array input_vals;
List<String> locals;
List<Variant> local_vals;
script_debugger->get_break_language()->debug_get_stack_level_locals(frame, &locals, &local_vals);
ERR_FAIL_COND(locals.size() != local_vals.size());
PackedStringArray locals_vector;
for (const String &S : locals) {
locals_vector.append(S);
input_names.append(S);
}
Array local_vals_array;
for (const Variant &V : local_vals) {
local_vals_array.append(V);
input_vals.append(V);
}
List<String> globals;
List<Variant> globals_vals;
script_debugger->get_break_language()->debug_get_globals(&globals, &globals_vals);
ERR_FAIL_COND(globals.size() != globals_vals.size());
for (const String &S : globals) {
input_names.append(S);
}
for (const Variant &V : globals_vals) {
input_vals.append(V);
}
List<StringName> native_types;
ClassDB::get_class_list(&native_types);
for (const StringName &E : native_types) {
if (!ClassDB::is_class_exposed(E) || !Engine::get_singleton()->has_singleton(E) || Engine::get_singleton()->is_singleton_editor_only(E)) {
continue;
}
input_names.append(E);
input_vals.append(Engine::get_singleton()->get_singleton_object(E));
}
List<StringName> user_types;
ScriptServer::get_global_class_list(&user_types);
for (const StringName &S : user_types) {
String scr_path = ScriptServer::get_global_class_path(S);
Ref<Script> scr = ResourceLoader::load(scr_path, "Script");
ERR_CONTINUE_MSG(scr.is_null(), vformat(R"(Could not load the global class %s from resource path: "%s".)", S, scr_path));
input_names.append(S);
input_vals.append(scr);
}
Expression expression;
expression.parse(expression_str, locals_vector);
const Variant return_val = expression.execute(local_vals_array, breaked_instance->get_owner());
expression.parse(expression_str, input_names);
const Variant return_val = expression.execute(input_vals, breaked_instance->get_owner());
DebuggerMarshalls::ScriptStackVariable stvar;
stvar.name = expression_str;