Skip to content

Commit 9da1b4f

Browse files
committed
Fix global classes can't be used in the Evaluator
1 parent 78c9f8d commit 9da1b4f

File tree

1 file changed

+28
-8
lines changed

1 file changed

+28
-8
lines changed

core/debugger/remote_debugger.cpp

+28-8
Original file line numberDiff line numberDiff line change
@@ -541,23 +541,43 @@ void RemoteDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
541541

542542
List<String> locals;
543543
List<Variant> local_vals;
544-
545544
script_debugger->get_break_language()->debug_get_stack_level_locals(frame, &locals, &local_vals);
546-
ERR_FAIL_COND(locals.size() != local_vals.size());
547545

548-
PackedStringArray locals_vector;
546+
PackedStringArray input_names;
549547
for (const String &S : locals) {
550-
locals_vector.append(S);
548+
input_names.append(S);
551549
}
552550

553-
Array local_vals_array;
551+
Array input_vals;
554552
for (const Variant &V : local_vals) {
555-
local_vals_array.append(V);
553+
input_vals.append(V);
554+
}
555+
556+
List<StringName> native_types;
557+
ClassDB::get_class_list(&native_types);
558+
for (const StringName &E : native_types) {
559+
if (!ClassDB::is_class_exposed(E) || !Engine::get_singleton()->has_singleton(E)) {
560+
continue;
561+
}
562+
563+
input_names.append(E);
564+
input_vals.append(Engine::get_singleton()->get_singleton_object(E));
565+
}
566+
567+
List<StringName> globals;
568+
ScriptServer::get_global_class_list(&globals);
569+
for (const StringName &S : globals) {
570+
String scr_path = ScriptServer::get_global_class_path(S);
571+
Ref<Script> scr = ResourceLoader::load(scr_path, "Script");
572+
ERR_CONTINUE_MSG(scr.is_null(), vformat("Could not load the global class %s from resource path: %s", S, scr_path));
573+
574+
input_names.append(S);
575+
input_vals.append(scr);
556576
}
557577

558578
Expression expression;
559-
expression.parse(expression_str, locals_vector);
560-
const Variant return_val = expression.execute(local_vals_array, breaked_instance->get_owner());
579+
expression.parse(expression_str, input_names);
580+
const Variant return_val = expression.execute(input_vals, breaked_instance->get_owner());
561581

562582
DebuggerMarshalls::ScriptStackVariable stvar;
563583
stvar.name = expression_str;

0 commit comments

Comments
 (0)