コード例 #1
0
ファイル: StatementNode.cs プロジェクト: t-stf/TsBasic
        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);
        }
コード例 #2
0
 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();
     }
 }
コード例 #3
0
 get => (Func <double, double>)GetValue(FunctionProperty); set => SetValue(FunctionProperty, value);
コード例 #4
0
 SetValue(FunctionProperty, value);