public ScriptOutput Execute(Ast.Script script, ScriptEnv env, IReadOnlyDictionary <string, object> args)
 {
     foreach (var arg in args)
     {
         var lowercaseKey = arg.Key.ToLower();
         env.Vars[lowercaseKey] = arg.Value;
     }
     Execute(script, env);
     return(env.Output);
 }
        public void Execute(Ast.Script script, ScriptEnv env)
        {
            ExecuteBlock(script.Block, env);

            if (env.DidBreak)
            {
                throw new ScriptException($"Attempted to BREAK outside of a WHILE loop.");
            }
            else if (env.DidContinue)
            {
                throw new ScriptException($"Attempted to CONTINUE outside of a WHILE loop.");
            }
            else if (env.DidThrow)
            {
                throw new UncaughtErrorScriptException(env.ErrorNumber, env.ErrorMessage, env.ErrorState);
            }
        }
Esempio n. 3
0
        private Ast.Script ParseScript(TokenQueue q)
        {
            var script = new Ast.Script {
                SourceToken = q.SourceToken
            };

            script.Block = new Ast.Block {
                SourceToken = q.SourceToken
            };
            while (!q.Eof())
            {
                var stmt = ParseStmt(q);
                if (stmt != null)
                {
                    script.Block.Statements.Add(stmt);
                }
            }
            return(script);
        }
 // must be run from the SQLite thread
 public ScriptOutput Execute(Ast.Script script, IReadOnlyDictionary <string, object> args)
 {
     return(Execute(script, new ScriptEnv(), args));
 }