예제 #1
0
 public override SymbolRef FindDynamic(ScriptExecutionContext context)
 {
     return(context.FindSymbolByName(m_VarName));
 }
예제 #2
0
		public override SymbolRef FindDynamic(ScriptExecutionContext context)
		{
			return context.FindSymbolByName(m_VarName);
		}
예제 #3
0
        private static void GetInfoAboutFunction(Table infoTable, DynValue function, string what, ScriptExecutionContext executionContext)
        {
            if (function.Type == DataType.Function)
            {
                Closure f         = function.Function;
                var     sourceRef = executionContext.GetFunctionSourceCodeRef(f);
                var     source    = executionContext.OwnerScript.GetSourceCode(sourceRef.SourceIdx);
                if (what.Contains("S"))
                {
                    infoTable["source"]    = source.Name;
                    infoTable["short_src"] = source.Name.Substring(0, Math.Min(source.Name.Length, 60));

                    infoTable["what"] = "Lua";
                }

                if (what.Contains("L"))
                {
                    var lines = new Table(executionContext.OwnerScript);
                    for (int i = sourceRef.FromLine; i <= sourceRef.ToLine; i++)
                    {
                        lines.Append(DynValue.NewString(source.Lines[i]));
                    }
                    infoTable["activelines"] = lines;
                }

                if (what.Contains("n"))
                {
                    var name = executionContext.GetFunctionName(f);
                    infoTable["name"] = name;
                    var symbolRef = executionContext.FindSymbolByName(name);
                    switch (symbolRef.Type)
                    {
                    case SymbolRefType.Global:
                        infoTable["namewhat"] = "global";
                        break;

                    case SymbolRefType.Local:
                        infoTable["namewhat"] = "local";
                        break;

                    case SymbolRefType.DefaultEnv:
                        infoTable["namewhat"] = "field";
                        break;
                    }
                }

                if (what.Contains("u"))
                {
                    infoTable["nups"] = f.GetUpvaluesCount();
                }

                infoTable["linedefined"]     = sourceRef.FromLine;
                infoTable["lastlinedefined"] = sourceRef.ToLine;
            }
            else if (function.Type == DataType.ClrFunction)
            {
                CallbackFunction f = function.Callback;
                if (what.Contains("S"))
                {
                    infoTable["source"]    = "[C]";
                    infoTable["short_src"] = "[C]";
                    infoTable["what"]      = "C";
                }

                if (what.Contains("n"))
                {
                    var symbolRef = executionContext.FindSymbolByName(f.Name);
                    infoTable["name"] = f.Name;
                    switch (symbolRef.Type)
                    {
                    case SymbolRefType.Global:
                        infoTable["namewhat"] = "global";
                        break;

                    case SymbolRefType.Local:
                        infoTable["namewhat"] = "local";
                        break;

                    case SymbolRefType.DefaultEnv:
                        infoTable["namewhat"] = "field";
                        break;
                    }
                }
            }
        }