Пример #1
0
        public OptimizedFunctionAny(string name, MethodInfo[] infos, MethodBase[] targets, FunctionType functionType) : base(name, targets, functionType)
        {
            for (int i = 0; i < infos.Length; i++)
            {
                Debug.Assert(infos[i].IsStatic);

                switch (infos[i].GetParameters().Length)
                {
                case 0: target0 = IronPython.Compiler.CodeGen.CreateDelegate(infos[i], typeof(CallTarget0)) as CallTarget0; break;

                case 1:
                    if (!infos[i].GetParameters()[0].ParameterType.HasElementType)
                    {
                        target1 = IronPython.Compiler.CodeGen.CreateDelegate(infos[i], typeof(CallTarget1)) as CallTarget1;
                    }
                    else
                    {
                        targetN = IronPython.Compiler.CodeGen.CreateDelegate(infos[i], typeof(CallTargetN)) as CallTargetN;
                    }
                    break;

                case 2: target2 = IronPython.Compiler.CodeGen.CreateDelegate(infos[i], typeof(CallTarget2)) as CallTarget2; break;

                case 3: target3 = IronPython.Compiler.CodeGen.CreateDelegate(infos[i], typeof(CallTarget3)) as CallTarget3; break;

                case 4: target4 = IronPython.Compiler.CodeGen.CreateDelegate(infos[i], typeof(CallTarget4)) as CallTarget4; break;

                case 5: target5 = IronPython.Compiler.CodeGen.CreateDelegate(infos[i], typeof(CallTarget5)) as CallTarget5; break;
                }
            }
        }
Пример #2
0
 public OptimizedFunctionAny(OptimizedFunctionAny from) : base(from)
 {
     target0 = from.target0;
     target1 = from.target1;
     target2 = from.target2;
     target3 = from.target3;
     target4 = from.target4;
     target5 = from.target5;
     targetN = from.targetN;
 }
Пример #3
0
        ProcedureInfo GetProcedureInfoInternal(string proc, string importspec)
        {
            if (string.IsNullOrEmpty(proc))
            {
                throw new ArgumentException("proc cannot be null or empty");
            }
            if (string.IsNullOrEmpty(importspec))
            {
                throw new ArgumentException("importspec cannot be null or empty");
            }

            try
            {
                Callable c =
                    @"(lambda (maker)
    (let ((p (eval {0} {1})))
      (let ((forms (call-with-values (lambda () (procedure-form p)) vector)))
        (maker (symbol->string {0}) forms))))".Eval <Callable>(SymbolTable.StringToObject(proc), importspec.Eval());

                CallTarget2 maker = (n, forms) =>
                {
                    var           f  = forms as object[];
                    List <string> ff = new List <string>();
                    foreach (Cons fc in f)
                    {
                        ff.Add(fc.PrettyPrint.TrimEnd('\n'));
                    }

                    var pi = new ProcedureInfo
                    {
                        Name  = n as string,
                        Forms = ff.ToArray()
                    };
                    return(pi);
                };

                return(c.Call(Closure.Create(maker)) as ProcedureInfo);
            }
            catch (Exception ex)
            {
                throw new EvaluationException(ex.ToString());
            }
        }
Пример #4
0
        SymbolBinding[] GetBindingsInternal(string importspec)
        {
            if (string.IsNullOrEmpty(importspec))
            {
                throw new ArgumentException("importspec cannot be null or empty");
            }
            try
            {
                Callable c =
                    @"(lambda (maker)
    (map (lambda (b) 
            (maker (car b) (cdr b)))
         (environment-bindings {0})))".Eval <Callable>(importspec.Eval());

                CallTarget2 maker = (n, t) =>
                {
                    return(new SymbolBinding
                    {
                        Name = SymbolTable.IdToString((SymbolId)n),
                        Type = (BindingType)Enum.Parse(typeof(BindingType), SymbolTable.IdToString((SymbolId)t), true),
                    });
                };

                var r = c.Call(Closure.Create(maker)) as IEnumerable;

                List <SymbolBinding> sbs = new List <SymbolBinding>();

                foreach (SymbolBinding sb in r)
                {
                    sbs.Add(sb);
                }

                return(sbs.ToArray());
            }
            catch (Exception ex)
            {
                throw new EvaluationException(ex.ToString());
            }
        }
Пример #5
0
 public BinaryOperator(string symbol, CallTarget2 target, CallTarget2 inPlaceTarget, int precedence)
     : base(symbol, precedence)
 {
     this.target = target;
     this.inPlaceTarget = inPlaceTarget;
 }
Пример #6
0
 public DivisionOperator(string symbol, CallTarget2 target, CallTarget2 inPlaceTarget, CallTarget2 targetTrue, CallTarget2 inPlaceTargetTrue, int precedence)
     : base(symbol, target, inPlaceTarget, precedence)
 {
     this.targetTrue = targetTrue;
     this.inPlaceTargetTrue = inPlaceTargetTrue;
 }
Пример #7
0
 public OpsReflectedType(string name, Type baseType, Type opsType, Type extensibleType, CallTarget2 optimizedCtor)
     : this(name, baseType, opsType, extensibleType)
 {
     optCtor2 = optimizedCtor;
 }
 public OpsReflectedType(string name, Type baseType, Type opsType, Type extensibleType, CallTarget2 optimizedCtor)
     : this(name, baseType, opsType, extensibleType)
 {
     optCtor2 = optimizedCtor;
 }
Пример #9
0
 public DivisionOperator(string symbol, CallTarget2 target, CallTarget2 inPlaceTarget, CallTarget2 targetTrue, CallTarget2 inPlaceTargetTrue, int precedence)
     : base(symbol, target, inPlaceTarget, precedence)
 {
     this.targetTrue        = targetTrue;
     this.inPlaceTargetTrue = inPlaceTargetTrue;
 }
Пример #10
0
 public Function2(PythonModule globals, string name, CallTarget2 target, string[] argNames, object[] defaults)
     : base(globals, name, argNames, defaults)
 {
     this.target = target;
 }
Пример #11
0
 public OptimizedFunction2(OptimizedFunction2 from) : base(from)
 {
     target = from.target;
 }
Пример #12
0
 public OptimizedFunction2(string name, MethodInfo info, MethodBase[] targets, FunctionType functionType) : base(name, targets, functionType)
 {
     target = IronPython.Compiler.CodeGen.CreateDelegate(info, typeof(CallTarget2)) as CallTarget2;
 }
 public FastCallable2(string name, CallTarget2 target)
 {
     this.target2 = target;
     this.name = name;
 }
Пример #14
0
 public static Func <A1, A2, R> MakeTyped <A1, A2, R>(CallTarget2 f)
 {
     return((a1, a2) => Unbox <R>(f(a1, a2)));
 }
 public Function2(PythonModule globals, string name, CallTarget2 target, string[] argNames, object[] defaults)
     : base(globals, name, argNames, defaults)
 {
     this.target = target;
 }
Пример #16
0
 public static Action <A1, A2> MakeVoidTyped <A1, A2>(CallTarget2 f)
 {
     return((a1, a2) => f(a1, a2));
 }
Пример #17
0
 public BinaryOperator(string symbol, CallTarget2 target, CallTarget2 inPlaceTarget, int precedence)
     : base(symbol, precedence)
 {
     this.target        = target;
     this.inPlaceTarget = inPlaceTarget;
 }