• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C# IAstVisitor类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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



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

示例1: DoEvaluate

        /// <summary>
        /// Evaluate the aggregate expression.
        /// </summary>
        /// <returns></returns>
        public override object DoEvaluate(IAstVisitor visitor)
        {
            var dataSource = _source.Evaluate(visitor) as LObject;
            ExceptionHelper.NotNull(this, dataSource, "aggregation(min/max)");

            List<object> items = null;

            // Check 1: Could have supplied a single number e.g. sum(2) so just return 2
            if (dataSource.Type == LTypes.Number)
                return dataSource.Clone();

            // Check 2: Expect array
            if (dataSource.Type != LTypes.Array)
                throw new NotSupportedException(_aggregateType + " not supported for list type of " + dataSource.GetType());

            items = dataSource.GetValue() as List<object>;
            var val = 0.0;
            if (_aggregateType == "sum")
                val = items.Sum(item => GetValue(item));

            else if (_aggregateType == "avg")
                val = items.Average(item => GetValue(item));

            else if (_aggregateType == "min")
                val = items.Min(item => GetValue(item));

            else if (_aggregateType == "max")
                val = items.Max(item => GetValue(item));

            else if (_aggregateType == "count" || _aggregateType == "number")
                val = items.Count;

            return new LNumber(val);
        }
开发者ID:shuxingliu,项目名称:SambaPOS-3,代码行数:38,代码来源:AggregatePlugin.cs


示例2: Call

        /// <summary>
        /// Calls the custom function.
        /// </summary>
        /// <param name="name">Name of the function</param>
        /// <param name="exp"></param>
        /// <returns></returns>
        public object Call(string name, FunctionCallExpr exp, IAstVisitor visitor)
        {
            var objectName = name;
            var method = string.Empty;
            Func<string, string, FunctionCallExpr, object> callback = null;

            // Contains callback for full function name ? e.g. CreateUser
            if (_customCallbacks.ContainsKey(name))
                callback = _customCallbacks[name];

            // Contains callback that handles multiple methods on a "object".
            // e.g. Blog.Create, Blog.Delete etc.
            if (name.Contains("."))
            {
                var ndxDot = name.IndexOf(".");
                objectName = name.Substring(0, ndxDot);
                method = name.Substring(ndxDot + 1);
                if (_customCallbacks.ContainsKey(objectName + ".*"))
                    callback = _customCallbacks[objectName + ".*"];
            }

            if (callback == null)
                return LObjects.Null;

            // 1. Resolve parameter froms expressions into Lang values.
            ParamHelper.ResolveParametersToHostLangValues(exp.ParamListExpressions, exp.ParamList, visitor);
            object result = callback(objectName, method, exp);
            return result;
        }
开发者ID:shuxingliu,项目名称:SambaPOS-3,代码行数:35,代码来源:ExternalFunctions.cs


示例3: AcceptChildren

 public static void AcceptChildren(this AstNode node, IAstVisitor visitor)
 {
     foreach (AstNode child in node.Children)
     {
         child.AcceptVisitor(visitor);
     }
 }
开发者ID:txdv,项目名称:Builder,代码行数:7,代码来源:Helpers.cs


示例4: FieldReferenceReflectionEmitter

        internal FieldReferenceReflectionEmitter(MemberReferenceExpression memberReferenceExpression,
                                                 Type target,
                                                 MemberInfo member,
                                                 ILGenerator ilGenerator,
                                                 IOpCodeIndexer instructionsIndexer,
                                                 IAstVisitor<ILGenerator, AstNode> visitor,
                                                 List<LocalBuilder> locals,
                                                 bool isSetter = false)
            : base(memberReferenceExpression, target, member, ilGenerator, instructionsIndexer, visitor, locals) {

            FieldReference = MemberReference.Annotation<FieldReference>();
            IsByRef = MemberReference.Parent is DirectionExpression;
            Type = FieldReference.FieldType.GetActualType();
            FieldInfo = FieldReference.GetActualField();
            NonPublic = !((FieldInfo.Attributes & (_publicFieldAttributes)) == _publicFieldAttributes);

            if (isSetter) {
                _emitAction = EmitStoreFieldReference;
                _emitPrivateAction = EmitPrivateStoreFieldReference;
            }
            else {
                _emitAction = EmitLoadFieldReference;
                _emitPrivateAction = EmitPrivateLoadFieldReference;
            }
        }
开发者ID:sagifogel,项目名称:NJection.LambdaConverter,代码行数:25,代码来源:FieldReferenceReflectionEmitter.cs


示例5: SetVariableValue

        /// <summary>
        /// Sets a value on a member of a basic type.
        /// </summary>
        /// <param name="ctx">The context of the runtime</param>
        /// <param name="node">The assignment ast node</param>
        /// <param name="isDeclaration">Whether or not this is a declaration</param>
        /// <param name="varExp">The expression representing the index of the instance to set</param>
        /// <param name="valExp">The expression representing the value to set</param>
        public static void SetVariableValue(Context ctx, IAstVisitor visitor, AstNode node, bool isDeclaration, Expr varExp, Expr valExp)
        {
            string varname = ((VariableExpr)varExp).Name;

            // Case 1: var result;
            if (valExp == null)
            {
                ctx.Memory.SetValue(varname, LObjects.Null, isDeclaration);
            }
            // Case 2: var result = <expression>;
            else
            {
                var result = valExp.Evaluate(visitor);
                
                // Check for type: e.g. LFunction ? when using Lambda?
                if (result != null && result != LObjects.Null)
                {
                    var lobj = result as LObject;
                    if (lobj != null && lobj.Type.TypeVal == TypeConstants.Function)
                    {
                        // 1. Define the function in global symbol scope
                        SymbolHelper.ResetSymbolAsFunction(varExp.SymScope, varname, lobj);
                    }
                }
                // CHECK_LIMIT:
                ctx.Limits.CheckStringLength(node, result);
                ctx.Memory.SetValue(varname, result, isDeclaration);
            }

            // LIMIT CHECK
            ctx.Limits.CheckScopeCount(varExp);
            ctx.Limits.CheckScopeStringLength(varExp);
        }
开发者ID:GHLabs,项目名称:SambaPOS-3,代码行数:41,代码来源:AssignHelper.cs


示例6: SetIndexValue

        /// <summary>
        /// Sets a value on a member of a basic type.
        /// </summary>
        /// <param name="ctx">The context of the runtime</param>
        /// <param name="varExp">The expression representing the index of the instance to set</param>
        /// <param name="valExp">The expression representing the value to set</param>
        /// <param name="node">The assignment ast node</param>
        public static void SetIndexValue(Context ctx, IAstVisitor visitor, AstNode node, Expr varExp, Expr valExp)
        {
            // 1. Get the value that is being assigned.
            var val = valExp.Evaluate(visitor) as LObject;

            // 2. Check the limit if string.
            ctx.Limits.CheckStringLength(node, val);

            // 3. Evaluate expression to get index info.
            var indexExp = varExp.Evaluate(visitor) as IndexAccess;
            if (indexExp == null)
                throw ComLib.Lang.Helpers.ExceptionHelper.BuildRunTimeException(node, "Value to assign is null");

            // 4. Get the target of the index access and the name / number to set.
            var target = indexExp.Instance;
            var memberNameOrIndex = indexExp.MemberName;

            // Get methods associated with type.
            var methods = ctx.Methods.Get(target.Type);

            // Case 1: users[0] = 'kishore'
            if (target.Type == LTypes.Array)
            {
                var index = Convert.ToInt32(((LNumber)memberNameOrIndex).Value);
                methods.SetByNumericIndex(target, index, val);
            }
            // Case 2: users['total'] = 20
            else if (target.Type == LTypes.Map)
            {
                var name = ((LString)memberNameOrIndex).Value;
                methods.SetByStringMember(target, name, val);
            }
        }
开发者ID:shuxingliu,项目名称:SambaPOS-3,代码行数:40,代码来源:AssignHelper.cs


示例7: PropertyReferenceReflectionEmitter

        public PropertyReferenceReflectionEmitter(MemberReferenceExpression memberReferenceExpression,
                                                  Type target,
                                                  MemberInfo member,
                                                  ILGenerator ilGenerator,
                                                  IOpCodeIndexer instructionsIndexer,
                                                  IAstVisitor<ILGenerator, AstNode> visitor,
                                                  List<LocalBuilder> locals,
                                                  bool isSetter = false)
            : base(memberReferenceExpression, target, member, ilGenerator, instructionsIndexer, visitor, locals) {

            var propertyInfo = Member as PropertyInfo;

            _isSetter = isSetter;
            _propertyDefinition = MemberReference.Annotation<Cecil.PropertyDefinition>();
            NonPublic = !_propertyDefinition.GetMethod.IsPublic;
            Type = _propertyDefinition.PropertyType.GetActualType();

            if (isSetter) {
                _propertyMethod = propertyInfo.GetSetMethod(NonPublic);
                _emitPrivateAction = EmitPrivateStorePropertyReference;
            }
            else {
                _propertyMethod = propertyInfo.GetGetMethod(NonPublic);
                _emitPrivateAction = EmitPrivateLoadPropertyReference;
            }
        }
开发者ID:sagifogel,项目名称:NJection.LambdaConverter,代码行数:26,代码来源:PropertyReferenceReflectionEmitter.cs


示例8: RunTraversal

        public object RunTraversal(IAstVisitor visitor, ITraversalStrategy strategy)
        {
            visitor.StartSession(Expression);
            object traversalResult;

            try
            {
                strategy.Initialize(Expression);

                while (strategy.HasNext())
                {
                    try
                    {
                        var current = strategy.Next();
                        current.Accept(visitor);
                    }
                    catch (RestartTraversalException rte)
                    {
//                        Expression.Analyze(new TreeDumper());
                        strategy.Restart(rte.Root);
                    }
                }
            }
            finally
            {
                traversalResult = visitor.FinishSession();
            }

            return traversalResult;
        }
开发者ID:xeno-by,项目名称:rapt,代码行数:30,代码来源:AstTraverser.cs


示例9: AbstractReflectionEmitter

 internal AbstractReflectionEmitter(ILGenerator ilGenerator,
                                    IOpCodeIndexer instructionsIndexer,
                                    IAstVisitor<ILGenerator, AstNode> visitor,
                                    List<LocalBuilder> locals)
     : base(ilGenerator, instructionsIndexer) {
     Visitor = visitor;
     Locals = locals;
 }
开发者ID:sagifogel,项目名称:NJection.LambdaConverter,代码行数:8,代码来源:AbstractReflectionEmitter.cs


示例10: EventReferenceReflectionEmitter

 internal EventReferenceReflectionEmitter(MemberReferenceExpression memberReferenceExpression,
                                          Type target,
                                          MemberInfo member,
                                          ILGenerator ilGenerator,
                                          IOpCodeIndexer instructionsIndexer,
                                          IAstVisitor<ILGenerator, AstNode> visitor,
                                          List<LocalBuilder> locals)
     : base(memberReferenceExpression, target, member, ilGenerator, instructionsIndexer, visitor, locals) { }
开发者ID:sagifogel,项目名称:NJection.LambdaConverter,代码行数:8,代码来源:EventReferenceReflectionEmitter.cs


示例11: AcceptVisitor

 public virtual void AcceptVisitor(IAstVisitor visitor)
 {
   visitor.BeginVisit(this);
   if (ChildNodes.Count > 0)
     foreach (AstNode node in ChildNodes)
       node.AcceptVisitor(visitor);
   visitor.EndVisit(this);
 }
开发者ID:eightrivers,项目名称:SSharp,代码行数:8,代码来源:AstNode.cs


示例12: AcceptChildren

		public virtual object AcceptChildren(IAstVisitor visitor, object data)
		{
			foreach (INode child in children) {
				Debug.Assert(child != null);
				child.AcceptVisitor(visitor, data);
			}
			return data;
		}
开发者ID:Adam-Fogle,项目名称:agentralphplugin,代码行数:8,代码来源:AbstractNode.cs


示例13: DecoratedOutputFormatter

 public DecoratedOutputFormatter(IOutputFormatter formatter, IAstVisitor visitor)
 {
     if (formatter == null)
         throw new ArgumentNullException(nameof(formatter));
     if (visitor == null)
         throw new ArgumentNullException(nameof(visitor));
     _formatter = formatter;
     _visitor = visitor;
 }
开发者ID:JerreS,项目名称:AbstractCode,代码行数:9,代码来源:DecoratedOutputFormatter.cs


示例14: MultipuleAssignmentEmitter

 internal MultipuleAssignmentEmitter(MemberReferenceExpression memberReferenceExpression,
                                     Expression assignor,
                                     ILGenerator ilGenerator,
                                     IOpCodeIndexer instructionsIndexer,
                                     IAstVisitor<ILGenerator, AstNode> visitor,
                                     List<LocalBuilder> locals)
     : base(memberReferenceExpression, ilGenerator, instructionsIndexer, visitor, locals) {
     _assignorExpression = assignor;
 }
开发者ID:sagifogel,项目名称:NJection.LambdaConverter,代码行数:9,代码来源:MultipuleAssignmentEmitter.cs


示例15: GetMemberAccess

        /// <summary>
        /// Gets a member access object representing the a member access.
        /// </summary>
        /// <param name="node"></param>
        /// <param name="ctx"></param>
        /// <param name="varExp"></param>
        /// <param name="memberName"></param>
        /// <returns></returns>
        public static MemberAccess GetMemberAccess(AstNode node, Context ctx, Expr varExp, string memberName, IAstVisitor visitor)
        {
            var isVariableExp = varExp.IsNodeType(NodeTypes.SysVariable);
            var variableName = isVariableExp ? ((VariableExpr) varExp).Name : string.Empty;

            // CASE 1: External function call "user.create"
            if (isVariableExp && FunctionHelper.IsExternalFunction(ctx.ExternalFunctions, variableName, memberName))
                return new MemberAccess(MemberMode.FunctionExternal) {Name = variableName, MemberName = memberName};

            // CASE 2. Static method call: "Person.Create" 
            if (isVariableExp)
            {
                var result = MemberHelper.IsExternalTypeName(ctx.Memory, ctx.Types, variableName);
                if (result.Success)
                    return MemberHelper.GetExternalTypeMember(node, (Type) result.Item, variableName, null, memberName, true);
            }
            
            // CASE 3: Module
            if (varExp.IsNodeType(NodeTypes.SysVariable))
            {
                var name = varExp.ToQualifiedName();
                if (!ctx.Memory.Contains(name))
                {
                    var modresult = ResolveSymbol(varExp.SymScope, name);
                    if (modresult != null) return modresult;
                }
            }

            // CASE 4: Nested member.
            var res = varExp.Visit(visitor);
            if (res is MemberAccess )
            {
                return res as MemberAccess;
            }

            var obj = res as LObject;
            // Check for empty objects.
            ExceptionHelper.NotNull(node,  obj, "member access");

            var type = obj.Type;

            // Case 3: Method / Property on FluentScript type
            bool isCoreType = obj.Type.IsBuiltInType();
            if (isCoreType)
            {
                var result = MemberHelper.GetLangBasicTypeMember(node, ctx.Methods, obj, memberName);
                return result;
            }

            // CASE 4: Method / Property on External/Host language type (C#)
            var lclass = obj as LClass;
            var lclassType = lclass.Type as LClassType;
            var member = MemberHelper.GetExternalTypeMember(node, lclassType.DataType, variableName, lclass.Value, memberName, false);
            return member;
        }
开发者ID:GHLabs,项目名称:SambaPOS-3,代码行数:63,代码来源:MemberHelper.cs


示例16: AcceptChildren

		public virtual object AcceptChildren(IAstVisitor visitor, object data)
		{
			foreach (INode child in children) {
                if (child != null)
                    //Debug.Assert(child != null);
                    child.AcceptVisitor(visitor, data);
                else
                    PublicDI.log.error("In AcceptChildren child == null");
			}
			return data;
		}
开发者ID:modulexcite,项目名称:FluentSharp_Fork.SharpDevelopEditor,代码行数:11,代码来源:AbstractNode.cs


示例17: AcceptChildren

		public virtual object AcceptChildren(IAstVisitor visitor, object data)
		{
			foreach (INode child in children) {
                if (child != null)
                    //Debug.Assert(child != null);
                    child.AcceptVisitor(visitor, data);
                else
                    System.Diagnostics.Debug.WriteLine("In AcceptChildren child == null");
			}
			return data;
		}
开发者ID:SiGhTfOrbACQ,项目名称:O2.Platform.Projects,代码行数:11,代码来源:AbstractNode.cs


示例18: PatternCompiler

        public PatternCompiler(ErrorLog errorLog,
			SymbolTable symbolTable,
			IodineMethod methodBuilder,
			int temporary,
			IAstVisitor parent)
        {
            parentVisitor = parent;
            this.errorLog = errorLog;
            this.methodBuilder = methodBuilder;
            this.symbolTable = symbolTable;
            this.temporary = temporary;
        }
开发者ID:iwatakeshi,项目名称:Iodine,代码行数:12,代码来源:PatternCompiler.cs


示例19: DoEvaluate

        /// <summary>
        /// Evaluate
        /// </summary>
        /// <returns></returns>
        public override object DoEvaluate(IAstVisitor visitor)
        {
            var exePath = "";
            var workingDir = "";
            var failOnError = false;
            LArray args = null;
            var exitcode = -1;
            /*
            try
            {
                this.ResolveParams();
                exePath = this.GetParamValueString(0, false, string.Empty);
                workingDir = this.GetParamValueString(1, true, string.Empty);
                args = this.GetParamValue(2, true, null) as LArray;
                failOnError = this.GetParamValueBool(3, true, false);

                // Convert the items in the array to strings.
                // TODO: type-changes
                //var list = args.Raw;
                var list = new List<object>();
                var stringArgs = "";
                if (args != null && args.Value != null)
                {
                    foreach (var item in args.Value)
                    {
                        var lobj = (LObject)item;
                        stringArgs += Convert.ToString(lobj.GetValue()) + " ";
                    }
                }
                var p = new System.Diagnostics.Process();
                p.StartInfo.FileName = exePath;
                p.StartInfo.Arguments = stringArgs;
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.WorkingDirectory = workingDir;
                p.Start();
                // TODO: Set up options on this plugin to configure wait time ( indefinite | milliseconds )
                p.WaitForExit();
                exitcode = p.ExitCode;
            }
            catch (Exception ex)
            {
                exitcode = 1;
                if (failOnError)
                {
                    var error = string.Format("An error occurred executing external application '{0}', in '{1}', with '{2}'.\r\n"
                              + "message: {3}", exePath, workingDir, args, ex.Message);
                    throw new LangFailException(error, this.Ref.ScriptName, this.Ref.Line);
                }
            }
            */
            return new LNumber(Convert.ToDouble(exitcode));
        }
开发者ID:shuxingliu,项目名称:SambaPOS-3,代码行数:57,代码来源:ExecPlugin.cs


示例20: ResolveNonNamedParameters

        /// <summary>
        /// Resolve all the non-named parameter expressions and puts the values into the param list supplied.
        /// </summary>
        public static void ResolveNonNamedParameters(List<Expr> paramListExpressions, List<object> paramList, IAstVisitor visitor)
        {
            if (paramListExpressions == null || paramListExpressions.Count == 0)
                return;

            paramList.Clear();
            foreach (var exp in paramListExpressions)
            {
                object val = exp.Evaluate(visitor);
                paramList.Add(val);
            }
        }
开发者ID:GHLabs,项目名称:SambaPOS-3,代码行数:15,代码来源:ParamHelper.cs



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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# IAsymmetricBlockCipher类代码示例发布时间:2022-05-24
下一篇:
C# IAstNode类代码示例发布时间:2022-05-24
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap