| 2339 | } |
| 2340 | |
| 2341 | String VisualScripting::GetStackTrace() |
| 2342 | { |
| 2343 | String result; |
| 2344 | auto frame = ThreadStacks.Get().Stack; |
| 2345 | while (frame) |
| 2346 | { |
| 2347 | String node; |
| 2348 | switch (frame->Node->Type) |
| 2349 | { |
| 2350 | // Get/Set Parameter |
| 2351 | case GRAPH_NODE_MAKE_TYPE(6, 3): |
| 2352 | case GRAPH_NODE_MAKE_TYPE(6, 4): |
| 2353 | { |
| 2354 | const auto param = frame->Script->Graph.GetParameter((Guid)frame->Node->Values[0]); |
| 2355 | node = frame->Node->TypeID == 3 ? TEXT("Get ") : TEXT("Set "); |
| 2356 | node += param ? param->Name : ((Guid)frame->Node->Values[0]).ToString(); |
| 2357 | break; |
| 2358 | } |
| 2359 | // Method Override |
| 2360 | case GRAPH_NODE_MAKE_TYPE(16, 3): |
| 2361 | node = (StringView)frame->Node->Values[0]; |
| 2362 | node += TEXT("()"); |
| 2363 | break; |
| 2364 | // Invoke Method |
| 2365 | case GRAPH_NODE_MAKE_TYPE(16, 4): |
| 2366 | node = (StringView)frame->Node->Values[0]; |
| 2367 | node += TEXT("."); |
| 2368 | node += (StringView)frame->Node->Values[1]; |
| 2369 | node += TEXT("()"); |
| 2370 | break; |
| 2371 | // Function |
| 2372 | case GRAPH_NODE_MAKE_TYPE(16, 6): |
| 2373 | node = String(frame->Script->GetScriptTypeName()); |
| 2374 | for (int32 i = 0; i < frame->Script->_methods.Count(); i++) |
| 2375 | { |
| 2376 | auto& method = frame->Script->_methods[i]; |
| 2377 | if (method.Node == frame->Node) |
| 2378 | { |
| 2379 | node += TEXT("."); |
| 2380 | node += String(method.Name); |
| 2381 | node += TEXT("()"); |
| 2382 | break; |
| 2383 | } |
| 2384 | } |
| 2385 | break; |
| 2386 | default: |
| 2387 | node = StringUtils::ToString(frame->Node->Type); |
| 2388 | break; |
| 2389 | } |
| 2390 | result += String::Format(TEXT(" at {0}:{1} in node {2}\n"), StringUtils::GetFileNameWithoutExtension(frame->Script->GetPath()), frame->Script->GetID(), node); |
| 2391 | frame = frame->PreviousFrame; |
| 2392 | } |
| 2393 | return result; |
| 2394 | } |
| 2395 | |
| 2396 | VisualScriptingBinaryModule* VisualScripting::GetBinaryModule() |
| 2397 | { |