| 674 | } |
| 675 | |
| 676 | HError QueryScriptVariableInContext(const ScriptExecutor *exec, const String &var_ref, VariableInfo &var_info) |
| 677 | { |
| 678 | if (var_ref.IsNullOrSpace()) |
| 679 | return new Error("Bad input"); // no name |
| 680 | |
| 681 | if (!exec->GetRunningScript()) |
| 682 | return new Error("No running script"); // not in running script |
| 683 | |
| 684 | MemoryReference mem_ref; |
| 685 | FieldInfo var_field_info; |
| 686 | HError err = VariableRefToMemoryRef(var_ref, exec, mem_ref, var_field_info); |
| 687 | if (!err) |
| 688 | return err; // failed to parse variable name chain |
| 689 | |
| 690 | MemoryValue mem_value; |
| 691 | if (ResolveMemory(mem_ref, 0u, mem_value)) |
| 692 | { |
| 693 | String type_name = var_field_info.Type->name; |
| 694 | if (var_field_info.FieldFlags & RTTI::kField_Array) |
| 695 | { |
| 696 | if (var_field_info.NumElems > 0) |
| 697 | type_name.AppendFmt("[%u]", var_field_info.NumElems); |
| 698 | else |
| 699 | type_name.Append("[]"); |
| 700 | } |
| 701 | var_info = VariableInfo(mem_value.Value, type_name, mem_value.TypeHint); |
| 702 | return HError::None(); |
| 703 | } |
| 704 | cc_clear_error(); // reset script error in case resolving memory went wrong |
| 705 | return new Error("Failed to resolve script memory"); |
| 706 | } |
| 707 | |
| 708 | } // namespace MemoryInspect |
| 709 | } // namespace Engine |
no test coverage detected