Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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));
 }