object deep_var(object[] args) { string key = args[0] == null ? null : args[0].ToString(); if (string.IsNullOrEmpty(key)) { return(null); } bool set; RTSStack stack = Ref.GetField(mThreads[pid], "mStack", out set) as RTSStack; Dictionary <string, object> dics; while (stack != null) { dics = Ref.GetField(stack, "mVars", out set) as Dictionary <string, object>; if (dics != null && dics.ContainsKey(key)) { return(dics[key]); } stack = stack.getSuper() as RTSStack; } dics = Ref.GetField(mEngine, "mVars", out set) as Dictionary <string, object>; if (dics != null && dics.ContainsKey(key)) { return(dics[key]); } return(null); }
object variables(object[] args) { bool set; Dictionary <string, object> dics = Ref.GetField(mEngine, "mVars", out set) as Dictionary <string, object>; int counter = 0; StringBuilder builder = new StringBuilder(); if (dics != null) { builder.Append("\nglobal variables >>>"); foreach (string s in dics.Keys) { object o = dics[s]; builder.Append("\n ").Append(counter++).Append(": global "); if (o != null) { builder.Append(o.GetType()).Append(" "); } builder.Append(s).Append(" = ").Append(o); } } RTSStack stack = Ref.GetField(mThreads[pid], "mStack", out set) as RTSStack; while (stack != null) { dics = Ref.GetField(stack, "mVars", out set) as Dictionary <string, object>; if (dics != null) { builder.Append("\nvariables in current thread >>> stack_").Append(stack.getId()).Append(" >>>"); foreach (string s in dics.Keys) { object o = dics[s]; builder.Append("\n ").Append(counter++).Append(": "); if (o != null) { builder.Append(o.GetType()).Append(" "); } builder.Append(s).Append(" = ").Append(o); } } stack = stack.getSuper() as RTSStack; } PutLog(Level.info, builder.ToString()); return(RTSVoid.VOID); }