コード例 #1
0
ファイル: Builtin.cs プロジェクト: weimingtom/IronPythonMod
 public static object Iter(object func, object sentinel)
 {
     if (PythonOperator.IsCallable(func) == Ops.FALSE)
     {
         throw Ops.TypeError("iter(v, w): v must be callable");
     }
     return(new SentinelIterator(func, sentinel));
 }
コード例 #2
0
ファイル: Builtin.cs プロジェクト: weimingtom/IronPythonMod
        public static object Eval(ICallerContext context, string expression, IDictionary <object, object> globals, object locals)
        {
            if (locals != null && PythonOperator.IsMappingType(context, locals) == Ops.FALSE)
            {
                throw Ops.TypeError("locals must be mapping");
            }

            CompilerContext cc = context.CreateCompilerContext();
            Parser          p  = Parser.FromString(context.SystemState, cc, expression.TrimStart(' ', '\t'));
            Expr            e  = p.ParseTestListAsExpression();

            PythonModule mod = new PythonModule("<eval>", globals, context.SystemState, null, context.ContextFlags);

            if (Options.FastEval)  //!!! experimenting with a HUGE (>100x) performance boost to simple evals
            {
                return(e.Evaluate(new NameEnv(mod, locals)));
            }
            else
            {
                Stmt      s  = new ReturnStmt(e);
                FrameCode fc = OutputGenerator.GenerateSnippet(cc, s, false);
                return(fc.Run(new Frame(mod, globals, locals)));
            }
        }