コード例 #1
0
ファイル: lambda.cs プロジェクト: Unknown6656/kiezellisp
        public object ApplyLambdaBind(Cons lambdaList, object[] args, bool bound, object env, Cons wholeMacroForm)
        {
            var context = Runtime.CurrentThreadContext;
            var saved   = context.Frame;

            context.Frame = Frame;
            object result;

            if (!bound)
            {
                args = MakeArgumentFrame(args, env, wholeMacroForm);
            }

            if (Runtime.DebugMode)
            {
                context.EvaluationStack = Runtime.MakeListStar(saved, context.SpecialStack, context.EvaluationStack);
                result = Definition.Proc(lambdaList, Owner ?? this, args);
                context.EvaluationStack = Runtime.Cddr(context.EvaluationStack);
            }
            else
            {
                result = Definition.Proc(lambdaList, Owner ?? this, args);
            }
            context.Frame = saved;

            return(result);
        }
コード例 #2
0
ファイル: lambda.cs プロジェクト: MilkTool/kiezellisp
        public object ApplyLambdaBind(Cons lambdaList, object[] args, bool bound, object env, Cons wholeMacroForm)
        {
            if (!Definition.ProcInitialized)
            {
                // race condition??
                lock (Definition)
                {
                    if (!Definition.ProcInitialized)
                    {
                        Definition.Proc            = Definition.ProcBuilder();
                        Definition.ProcInitialized = true;
                    }
                }
            }

            var context = Runtime.CurrentThreadContext;
            var saved   = context.Frame;

            context.Frame = HoistFrame;
            object result;

            if (!bound)
            {
                args = MakeArgumentFrame(args, env, wholeMacroForm);
            }

            if (Runtime.DebugLevel >= 1)
            {
                context.EvaluationStack = Runtime.MakeListStar(saved, context.SpecialStack, context.EvaluationStack);
                result = Definition.Proc(lambdaList, Owner ?? this, args, HoistFrame.Values);
                context.EvaluationStack = Runtime.Cddr(context.EvaluationStack);
            }
            else
            {
                result = Definition.Proc(lambdaList, Owner ?? this, args, HoistFrame.Values);
            }
            context.Frame = saved;

            return(result);
        }