Skip to content

Commit d3956ea

Browse files
committed
Merge pull request #103979 from ydeltastar/evaluator-global-classes
Fix global classes can't be used in the Evaluator
2 parents 8bff3c9 + a5181d7 commit d3956ea

File tree

1 file changed

+42
-7
lines changed

1 file changed

+42
-7
lines changed

core/debugger/remote_debugger.cpp

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -544,25 +544,60 @@ void RemoteDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
544544
break;
545545
}
546546

547+
PackedStringArray input_names;
548+
Array input_vals;
549+
547550
List<String> locals;
548551
List<Variant> local_vals;
549-
550552
script_debugger->get_break_language()->debug_get_stack_level_locals(frame, &locals, &local_vals);
551553
ERR_FAIL_COND(locals.size() != local_vals.size());
552554

553-
PackedStringArray locals_vector;
554555
for (const String &S : locals) {
555-
locals_vector.append(S);
556+
input_names.append(S);
556557
}
557558

558-
Array local_vals_array;
559559
for (const Variant &V : local_vals) {
560-
local_vals_array.append(V);
560+
input_vals.append(V);
561+
}
562+
563+
List<String> globals;
564+
List<Variant> globals_vals;
565+
script_debugger->get_break_language()->debug_get_globals(&globals, &globals_vals);
566+
ERR_FAIL_COND(globals.size() != globals_vals.size());
567+
568+
for (const String &S : globals) {
569+
input_names.append(S);
570+
}
571+
572+
for (const Variant &V : globals_vals) {
573+
input_vals.append(V);
574+
}
575+
576+
List<StringName> native_types;
577+
ClassDB::get_class_list(&native_types);
578+
for (const StringName &E : native_types) {
579+
if (!ClassDB::is_class_exposed(E) || !Engine::get_singleton()->has_singleton(E) || Engine::get_singleton()->is_singleton_editor_only(E)) {
580+
continue;
581+
}
582+
583+
input_names.append(E);
584+
input_vals.append(Engine::get_singleton()->get_singleton_object(E));
585+
}
586+
587+
List<StringName> user_types;
588+
ScriptServer::get_global_class_list(&user_types);
589+
for (const StringName &S : user_types) {
590+
String scr_path = ScriptServer::get_global_class_path(S);
591+
Ref<Script> scr = ResourceLoader::load(scr_path, "Script");
592+
ERR_CONTINUE_MSG(scr.is_null(), vformat(R"(Could not load the global class %s from resource path: "%s".)", S, scr_path));
593+
594+
input_names.append(S);
595+
input_vals.append(scr);
561596
}
562597

563598
Expression expression;
564-
expression.parse(expression_str, locals_vector);
565-
const Variant return_val = expression.execute(local_vals_array, breaked_instance->get_owner());
599+
expression.parse(expression_str, input_names);
600+
const Variant return_val = expression.execute(input_vals, breaked_instance->get_owner());
566601

567602
DebuggerMarshalls::ScriptStackVariable stvar;
568603
stvar.name = expression_str;

0 commit comments

Comments
 (0)