internal static string WriteObject(IScriptable scriptable, Indent indent = null) { if (scriptable == null) { return(null); } IIgnorable ignorable = scriptable as IIgnorable; if (ignorable != null && ignorable.Ignored) { return(null); } if (scriptable is ICustomScriptable) { ICustomScriptable s = scriptable as ICustomScriptable; string r = s.Write(); if (indent != null) { r = indent.GetIndent(s.Indent()) + r; if (s.Indent() == "#") { r += " `[" + scriptable.GetType().Name + "]`"; } } return(r); } if (scriptable is IReadOnlyScriptable) { string r = scriptable.ToString(); if (indent != null) { indent.Push(null); r = "`" + r + "`"; } return(r); } foreach (Accessor accessor in FieldAccessor.GetForObject(scriptable)) { foreach (FieldTag tag in accessor.GetTags()) { if (tag.flag == FieldTags.Title) { string r = "" + accessor.Get(); if (indent != null) { r = indent.GetIndent(tag.arg) + r; if (tag.arg == "#") { r += " `[" + scriptable.GetType().Name + "]`"; } } return(r); } } } return(null); }
public object Invoke(IScriptContext context, object[] args) { context.CreateScope(); context.SetItem("me", scriptable.Instance); context.SetItem("body", scriptable); object rez = RuntimeHost.NullValue; try { rez = dynamicMethod.Invoke(context, arguments); } finally { context.RemoveLocalScope(); } if (rez != RuntimeHost.NullValue) { return(rez); } else { throw new ScriptException(string.Format("Dynamic method call failed in object {0}", scriptable.ToString())); } }