public object Invoke(IScriptContext context, object[] args) { string code = (String)args[0]; ScriptAst result = null; LanguageCompiler compiler = (LanguageCompiler)context.GetItem("Compiler", true); RuntimeHost.Lock(); try { result = Script.Parse(code + ";", false) as ScriptAst; //TODO: Create LocalOnlyScope that can't change Parent's variables //No, need for doing these. It is already done context.CreateScope(); } finally { RuntimeHost.UnLock(); } result.Evaluate(context); context.RemoveLocalScope(); return(context.Result); }
public void BaseCode() { Script script = Script.Compile("1+1; a=0; c = <! 1+1; !>; b = 12;"); script.Execute(); ScriptAst metaNode = (ScriptAst)script.Context.GetItem("c", true); string code = script.Code(metaNode); Assert.Equal("<! 1+1; !>", code); }
public void MetaOperatorNew() { object rez = Script.RunCode("<! 1+1; !>;"); Assert.IsType <ScriptProg>(rez); ScriptAst prog = (ScriptAst)rez; object rez1 = prog.Execute(new ScriptContext()); Assert.Equal(2, rez1); }
public void MetaOperatorNew() { object rez = Script.RunCode("<! 1+1; !>;"); ///Should be ScriptProg Assert.IsInstanceOfType(rez, typeof(ScriptAst)); ScriptAst prog = (ScriptAst)rez; object rez1 = prog.Execute(new ScriptContext()); Assert.AreEqual(2, rez1); }
public static CodeProgram Compile(ScriptAst syntaxTree) { var syntaxProgram = syntaxTree as ScriptProg; var domProgram = new CodeProgram { SourceSpan = syntaxTree.Span }; if (syntaxProgram != null) { foreach (var result in syntaxProgram.Elements.Select(element => Compile(element, domProgram)).OfType <CodeStatement>()) { domProgram.Statements.Add(result); } } return(domProgram); }
/// <summary> /// Returns source code for given node /// </summary> /// <param name="node">Node</param> /// <returns>source code</returns> public string Code(ScriptAst node) { return(SourceCode.Substring(node.Span.Start.Position, node.Span.Length)); }