예제 #1
0
파일: Program.cs 프로젝트: yallie/refal
        public override void EvaluateNode(EvaluationContext context, AstMode mode)
        {
            if (EntryPoint == null)
            {
                context.ThrowError("No entry point defined (entry point is a function named «Go»)");
            }

            // load standard run-time library functions
            var libraryFunctions = LibraryFunction.ExtractLibraryFunctions(context, new RefalLibrary(context));

            foreach (LibraryFunction libFun in libraryFunctions)
            {
                context.SetValue(libFun.Name, libFun);
            }

            // define all functions
            foreach (Function fun in FunctionList)
            {
                fun.Evaluate(context, mode);
            }

            // call entry point with empty expression as an argument
            context.Data.Push(Runtime.PassiveExpression.Build());
            EntryPoint.Call(context);

            // discard execution results
            context.Data.Pop();
            context.ClearLastResult();
        }