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); }
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); }