当前位置: 首页>>代码示例>>C#>>正文


C# Interpreter.ScriptThread类代码示例

本文整理汇总了C#中Irony.Interpreter.ScriptThread的典型用法代码示例。如果您正苦于以下问题:C# ScriptThread类的具体用法?C# ScriptThread怎么用?C# ScriptThread使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。


ScriptThread类属于Irony.Interpreter命名空间,在下文中一共展示了ScriptThread类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: EvaluateSpecialForm

 // Evaluation for special forms
 private object EvaluateSpecialForm(ScriptThread thread)
 {
     thread.CurrentNode = this;  //standard prolog
       var result = _specialForm(thread, _specialFormArgs);
       thread.CurrentNode = Parent; //standard epilog
       return result;
 }
开发者ID:MarcusTheBold,项目名称:Irony,代码行数:8,代码来源:FunctionCallNode.cs

示例2: DoEvaluate

        protected override object DoEvaluate(ScriptThread thread)
        {
            thread.CurrentNode = this;  //standard prolog
            var pi = thread.GetPageInfo();

            var test = globalNode.AsString.ToLower();
            if (test.Contains(":")) {
                Console.WriteLine("");
            }
            if ( test == "pagenumber") {
                return pi.PageNumber;
            } else if (test == "pages") {
                return pi.TotalPages;
            } else if (test == "reportname") {
                return pi.ReportName;
            } else if (test == "reportfolder") {
                return pi.ReportFolder;
            } else if (test == "reportfilename") {
                return pi.ReportFileName;
            }

            else {
                return String.Format(CultureInfo.CurrentCulture,"Syntaxerror in Globals <{0}>",globalNode.AsString);
            }
        }
开发者ID:2594636985,项目名称:SharpDevelop,代码行数:25,代码来源:GlobalsNode.cs

示例3: ExtractLibraryFunctions

		public static LibraryFunction[] ExtractLibraryFunctions(ScriptThread thread, object instance)
		{
			if (instance == null)
				return new LibraryFunction[0];

			var list = new List<LibraryFunction>();
			var languageCaseSensitive = thread.App.Language.Grammar.CaseSensitive;

			MethodInfo[] methods = instance.GetType().GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly);
			foreach (MethodInfo method in methods)
			{
				var fun = method.CreateDelegate<LibraryDelegate>(instance, false);
				if (fun != null)
				{
					var fname = method.GetCustomAttribute<FunctionNamesAttribute>();
					var names = (fname == null) ? new string[] { method.Name } : fname.Names;
					foreach (var strName in names)
					{
						string name = languageCaseSensitive ? strName : strName.ToLowerInvariant();
						list.Add(new LibraryFunction(name, fun));
					}
				}
			}

			return list.ToArray();
		}
开发者ID:Rezura,项目名称:LiveSplit,代码行数:26,代码来源:LibraryFunction.cs

示例4: Sum

		public static object Sum(ScriptThread thread, AstNode[] childNodes) {
			double sum =  0;
			var fieldName = childNodes[0].Evaluate(thread).ToString();
			
			var dataSource = thread.GetDataSource();
			
			var grouped = ImportAggregateHelper.IsGrouped(dataSource);
			
			if (grouped != null) {
				
				foreach (var element in grouped) {
					var s = element.Sum(o => {
					                    	var v = ReadValueFromObject(fieldName, o);
					                    	return TypeNormalizer.EnsureType<double>(v);
					                    });
					sum = sum + s;
				}
			} else {
				if (ImportAggregateHelper.FieldExist(dataSource.FirstOrDefault(),fieldName)) {
					sum = dataSource.Sum(o => {
					                     	var v = ReadValueFromObject(fieldName, o);
					                     	return TypeNormalizer.EnsureType<double>(v);
					                     });
				}
			}
			return sum.ToString();
		}
开发者ID:fanyjie,项目名称:SharpDevelop,代码行数:27,代码来源:ImportAggregates.cs

示例5: DoEvaluate

		protected override object DoEvaluate(ScriptThread thread)
		{
			// standard prolog
			thread.CurrentNode = this;

			if (EntryPoint == null)
			{
				thread.ThrowScriptError("No entry point defined (entry point is a function named «Go»)");
				return null;
			}

			// define built-in runtime library functions
			var libraryFunctions = LibraryFunction.ExtractLibraryFunctions(thread, new RefalLibrary(thread));
			foreach (var libFun in libraryFunctions)
			{
				var binding = thread.Bind(libFun.Name, BindingRequestFlags.Write | BindingRequestFlags.ExistingOrNew);
				binding.SetValueRef(thread, libFun);
			}

			// define functions declared in the compiled program
			foreach (var fun in FunctionList)
			{
				fun.Evaluate(thread);
			}

			// call entry point with an empty expression
			EntryPoint.Call(thread, new object[] { PassiveExpression.Build() });

			// standard epilog
			thread.CurrentNode = Parent;
			return null;
		}
开发者ID:androdev4u,项目名称:XLParser,代码行数:32,代码来源:Program.cs

示例6: Iif

        public static object Iif(ScriptThread thread, AstNode[] childNodes)
        {
            var testValue = childNodes[0].Evaluate(thread);
            object result = thread.Runtime.IsTrue(testValue) ? childNodes[1].Evaluate(thread) : childNodes[2].Evaluate(thread);
            return result;

        }
开发者ID:HyperSharp,项目名称:Hyperspace.DotLua,代码行数:7,代码来源:SpecialFormsLibrary.cs

示例7: DoEvaluate

 protected override object DoEvaluate(ScriptThread thread)
 {
     thread.CurrentNode = this;  //standard prolog
       //assign implementation method
       switch (Op) {
     case ExpressionType.AndAlso:
       this.Evaluate = EvaluateAndAlso;
       break;
     case ExpressionType.OrElse:
       this.Evaluate = EvaluateOrElse;
       break;
     default:
       this.Evaluate = DefaultEvaluateImplementation;
       break;
       }
       // actually evaluate and get the result.
       var result = Evaluate(thread);
       // Check if result is constant - if yes, save the value and switch to method that directly returns the result.
       if (IsConstant()) {
     _constValue = result;
     AsString = Op + "(operator) Const=" + _constValue;
     this.Evaluate = EvaluateConst;
       }
       thread.CurrentNode = Parent; //standard epilog
       return result;
 }
开发者ID:MarcusTheBold,项目名称:Irony,代码行数:26,代码来源:BinaryOperationNode.cs

示例8: DoEvaluate

        protected override object DoEvaluate(ScriptThread thread)
        {
            thread.CurrentNode = this;
            try
            {
                var result = new MtResult();
                var targetThread = _target.NewScriptThread(thread);
                var rTarget = _target.Evaluate(targetThread) as MtResult;

                var sourceThread = _source.NewScriptThread(thread);
                var rSource = _source.Evaluate(sourceThread) as MtResult;

                rTarget.GetValue(target =>
                {
                    rSource.GetValue(source =>
                    {
                        MtStream.ReadFromWriteTo(
                            source.Value as MtStream, target.Value as MtStream, () => {
                                result.SetValue(MtObject.True);
                            });
                    });
                });

                return result;
            }
            catch (Exception e)
            {
                throw new Exception("Exception on MtFlowRightToLeft.DoEvaluate", e);
            }
            finally
            {
                //thread.CurrentNode = Parent;
            }
        }
开发者ID:fabriceleal,项目名称:Multitasks,代码行数:34,代码来源:MtFlowRightToLeft.cs

示例9: DoEvaluate

		protected override object DoEvaluate(ScriptThread thread)
		{
			// standard prolog
			thread.CurrentNode = this;
			object result = null;

			// is this variable a part of a pattern?
			if (UseType == NodeUseType.Name)
			{
				// don't evaluate it
				result = CreateVariable();
			}
			else
			{
				// get last recognized pattern
				var pattern = thread.GetLastPattern();
				if (pattern == null)
				{
					thread.ThrowScriptError("No pattern recognized!");
					return null;
				}

				// read variable from the last recognized pattern
				result = pattern.GetVariable(Index);
			}

			// standard epilog
			thread.CurrentNode = Parent;
			return result;
		}
开发者ID:androdev4u,项目名称:XLParser,代码行数:30,代码来源:Variable.cs

示例10: ReallyDoEvaluate

        protected override object ReallyDoEvaluate(ScriptThread thread)
        {
            Context.CurrentAct = actnumber;
            thread.rs().Action.At(Span).Label(actnumber);

            return base.ReallyDoEvaluate(thread);
        }
开发者ID:jamescurran,项目名称:ShakespeareCompiler,代码行数:7,代码来源:PlayAST.cs

示例11: DoEvaluate

		protected override object DoEvaluate(ScriptThread thread)
		{
			// standard prolog
			thread.CurrentNode = this;

			var binding = thread.Bind(FunctionName, BindingRequestFlags.Read);
			var result = binding.GetValueRef(thread);
			if (result == null)
			{
				thread.ThrowScriptError("Unknown identifier: {0}", FunctionName);
				return null;
			}

			CallTarget = result as ICallTarget;
			if (CallTarget == null)
			{
				thread.ThrowScriptError("This identifier cannot be called: {0}", FunctionName);
				return null;
			}

			// set Evaluate pointer
			Evaluate = DoCall;

			// standard epilog is done by DoCall
			return DoCall(thread);
		}
开发者ID:Rezura,项目名称:LiveSplit,代码行数:26,代码来源:FunctionCall.cs

示例12: DoEvaluate

 protected override object DoEvaluate(ScriptThread thread)
 {
     thread.CurrentNode = this;  //standard prolog
       var arg = Argument.Evaluate(thread);
       var result = thread.Runtime.ExecuteUnaryOperator(base.ExpressionType, arg, ref _lastUsed);
       thread.CurrentNode = Parent; //standard epilog
       return result;
 }
开发者ID:MarcusTheBold,项目名称:Irony,代码行数:8,代码来源:UnaryOperationNode.cs

示例13: DoEvaluate

 protected override object DoEvaluate(ScriptThread thread)
 {
     thread.CurrentNode = this;  //standard prolog
       SetupEvaluateMethod(thread);
       var result = Evaluate(thread);
       thread.CurrentNode = Parent; //standard epilog
       return result;
 }
开发者ID:MarcusTheBold,项目名称:Irony,代码行数:8,代码来源:FunctionCallNode.cs

示例14: RefalLibrary

		public RefalLibrary(ScriptThread thread)
		{
			ScriptThread = thread;
			OpenFiles = new Dictionary<string, object>();
			BuriedKeys = new Dictionary<string, PassiveExpression>();
			BuriedValues = new Dictionary<string, PassiveExpression>();
			CommandLineArguments = null;
		}
开发者ID:PrototypeAlpha,项目名称:LiveSplit,代码行数:8,代码来源:RefalLibrary.cs

示例15: DoEvaluate

        protected override object DoEvaluate(ScriptThread thread)
        {
            thread.CurrentNode = this;
            try
            {
                var programResult = new MtResult();

                // do NOT use this for anything else other than counting the number of to-finish-threads
                var count = _chains.Count;
                var waitForAllToEnd = new ManualResetEvent(false);

                // TODO THIS NEEDS TO BE FIXED!
                // The rest of the program only cares about the result of the last expression
                // which doesn't depend of the result of the previous expressions;
                // however, the program shouldn't end.
                // SOLUTION: Keep a global counter of all awaiting MtResults?

                for (int i = 0; i < _chains.Count; ++i)
                {
                    // This is here because of issues with closures using the for variable
                    var safe_i = i + 0;
                    var ch = _chains[i];
                    var subthread = ch.NewScriptThread(thread);
                    var chResult = ch.Evaluate(subthread) as MtResult;

                    // Lookout:
                    // do not capture anything loop related inside here
                    chResult.GetValue(delegate(MtObject x)
                    {
                        if (Interlocked.Decrement(ref count) == 0)
                        {
                            waitForAllToEnd.Set();
                        }

                        // Wait for the last chain to end.
                        // Last refers in the order of the chain in the code,
                        // not the order of execution!!!
                        if (safe_i == _chains.Count - 1)
                        {
                            // Wait for the end of *all* the chains before returning ...
                            waitForAllToEnd.WaitOne();
                            programResult.SetValue(x);
                        }
                    });
                }

                // Return value does not matter. This is asynchronous, remember?
                return programResult;
            }
            catch (Exception e)
            {
                throw new Exception("Exception on MtProgram.", e);
            }
            finally
            {
                //thread.CurrentNode = Parent;
            }
        }
开发者ID:fabriceleal,项目名称:Multitasks,代码行数:58,代码来源:MtFork.cs


注:本文中的Irony.Interpreter.ScriptThread类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。