| 83 | } |
| 84 | |
| 85 | void Invoke(StringView args) const |
| 86 | { |
| 87 | PROFILE_CPU(); |
| 88 | |
| 89 | // Get command signature |
| 90 | Array<ScriptingTypeMethodSignature::Param, InlinedAllocation<16>> sigParams; |
| 91 | VariantType sigValue; |
| 92 | if (Method) |
| 93 | { |
| 94 | ScriptingTypeMethodSignature sig; |
| 95 | Module->GetMethodSignature(Method, sig); |
| 96 | sigParams = MoveTemp(sig.Params); |
| 97 | sigValue = MoveTemp(sig.ReturnType); |
| 98 | } |
| 99 | else if (Field) |
| 100 | { |
| 101 | ScriptingTypeFieldSignature sig; |
| 102 | Module->GetFieldSignature(Field, sig); |
| 103 | auto& p = sigParams.AddOne(); |
| 104 | p.IsOut = false; |
| 105 | p.Type = sig.ValueType; |
| 106 | sigValue = MoveTemp(sig.ValueType); |
| 107 | } |
| 108 | else if (MethodSet && args.HasChars()) |
| 109 | { |
| 110 | ScriptingTypeMethodSignature sig; |
| 111 | Module->GetMethodSignature(MethodSet, sig); |
| 112 | sigParams = MoveTemp(sig.Params); |
| 113 | sigParams.Resize(1); |
| 114 | } |
| 115 | else if (MethodGet && args.IsEmpty()) |
| 116 | { |
| 117 | ScriptingTypeMethodSignature sig; |
| 118 | Module->GetMethodSignature(MethodGet, sig); |
| 119 | sigValue = MoveTemp(sig.ReturnType); |
| 120 | } |
| 121 | |
| 122 | // Parse arguments |
| 123 | if (args == StringView(TEXT("?"), 1)) |
| 124 | { |
| 125 | LOG(Warning, "TODO: debug commands help/docs printing"); // TODO: debug commands help/docs printing (use CodeDocsModule that parses XML docs) |
| 126 | return; |
| 127 | } |
| 128 | Array<Variant> params; |
| 129 | params.Resize(sigParams.Count()); |
| 130 | Array<String> argsSeparated; |
| 131 | String argsStr(args); |
| 132 | argsStr.Split(' ', argsSeparated); |
| 133 | for (int32 i = 0; i < argsSeparated.Count() && i < params.Count(); i++) |
| 134 | { |
| 135 | params[i] = Variant::Parse(argsSeparated[i], sigParams[i].Type); |
| 136 | } |
| 137 | |
| 138 | // Call command |
| 139 | LOG(Info, "> {}{}{}", Name, args.Length() != 0 ? TEXT(" ") : TEXT(""), args); |
| 140 | Variant result; |
| 141 | if (Method) |
| 142 | { |
no test coverage detected