internal bool Link(BasicEnvironment env) { if (env.GetProperty(name) != null) { return(false); } var f = new FunctionProperty { argumentNames = parNames, FuncImpl = Call, Name = name }; env.SetProperty(f); return(true); }
internal BasicNode ApplyFunc(BasicEnvironment env, FunctionProperty func) { env.InstructionCount++; if (!env.SaveContext()) { return(env.LastError); } try { // create the formal parameters with their values int nArgs = func.argumentNames.Length; ConstantNode[] evaledArgs = new ConstantNode[nArgs]; for (int i = 0; i < nArgs; i++) { string argName = func.argumentNames[i]; BasicNode evArg = null; if (i < Arguments.Length) { evArg = Arguments[i].Eval(env); } else { evArg = CheckStringName(argName) ? ConstantNode.EmptyString : ConstantNode.Zero; } if (evArg.IsAbort()) { return(evArg); } var econs = evArg as ConstantNode; if (econs == null) { env.RuntimeError(); } evaledArgs[i] = econs; } var result = func.Apply(env, evaledArgs); if (result == null) { result = env.RuntimeError(ERuntimeErrors.NotImplemented, Name); } return(result); } finally { env.RestoreContext(); } }
get => (Func <double, double>)GetValue(FunctionProperty); set => SetValue(FunctionProperty, value);
SetValue(FunctionProperty, value);