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

C# TypeSystem.Ambiguous类代码示例

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

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



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

示例1: ResolveAmbiguousMethodReference

 private IEntity ResolveAmbiguousMethodReference(ReferenceExpression node, Ambiguous candidates, ExpressionCollection args)
 {
     //BOO-656
     if (!AstUtil.IsTargetOfMethodInvocation(node)
         && !AstUtil.IsTargetOfSlicing(node)
         && !node.IsTargetOfAssignment())
     {
         return candidates.Entities[0];
     }
     return candidates;
 }
开发者ID:stuman08,项目名称:boo,代码行数:11,代码来源:ProcessMethodBodies.cs


示例2: ResolveAmbiguousPropertyReference

        private IEntity ResolveAmbiguousPropertyReference(ReferenceExpression node, Ambiguous candidates, ExpressionCollection args)
        {
            IEntity[] entities = candidates.Entities;
            IEntity[] getters = GetGetMethods(entities);
            IEntity found = GetCorrectCallableReference(node, args, getters);
            if (null != found && EntityType.Method == found.EntityType)
            {
                IProperty property = (IProperty)entities[GetIndex(getters, found)];
                BindProperty(node, property);
                return property;
            }

            return candidates;
        }
开发者ID:stuman08,项目名称:boo,代码行数:14,代码来源:ProcessMethodBodies.cs


示例3: GetMatchesByGenericity

 private List<IEntity> GetMatchesByGenericity(ReferenceExpression node, Ambiguous candidates)
 {
     bool isGenericReference = (node.ParentNode is GenericReferenceExpression);
     List<IEntity> matches = new List<IEntity>();
     foreach (IEntity candidate in candidates.Entities)
     {
         IType type = candidate as IType;
         bool isGenericType = (type != null && type.GenericInfo != null);
         if (isGenericType == isGenericReference)
         {
             matches.Add(candidate);
         }
     }
     return matches;
 }
开发者ID:stuman08,项目名称:boo,代码行数:15,代码来源:ProcessMethodBodies.cs


示例4: ResolveAmbiguousLValue

        private IEntity ResolveAmbiguousLValue(Expression sourceNode, Ambiguous candidates, Expression rvalue)
        {
            if (!candidates.AllEntitiesAre(EntityType.Property)) return null;

            IEntity[] entities = candidates.Entities;
            IEntity[] getters = GetSetMethods(entities);
            ExpressionCollection args = new ExpressionCollection();
            args.Add(rvalue);
            IEntity found = GetCorrectCallableReference(sourceNode, args, getters);
            if (null != found && EntityType.Method == found.EntityType)
            {
                IProperty property = (IProperty)entities[GetIndex(getters, found)];
                BindProperty(sourceNode, property);
                return property;
            }
            return null;
        }
开发者ID:stuman08,项目名称:boo,代码行数:17,代码来源:ProcessMethodBodies.cs


示例5: GetEntityFromList

 public static IEntity GetEntityFromList(IList list)
 {
     IEntity element = null;
     if (list.Count > 0)
     {
         if (list.Count > 1)
         {
             element = new Ambiguous(list);
         }
         else
         {
             element = (IEntity)list[0];
         }
         list.Clear();
     }
     return element;
 }
开发者ID:w4x,项目名称:boolangstudio,代码行数:17,代码来源:NameResolutionService.cs


示例6: ResolveCallableReference

        private IEntity ResolveCallableReference(MethodInvocationExpression node, Ambiguous entity)
        {
            IEntity resolved = CallableResolutionService.ResolveCallableReference(node.Arguments, entity.Entities);
            if (null == resolved)
                return null;

            IMember member = (IMember)resolved;
            if (NodeType.ReferenceExpression == node.Target.NodeType)
            {
                ResolveMemberInfo((ReferenceExpression)node.Target, member);
            }
            else
            {
                Bind(node.Target, member);
                BindExpressionType(node.Target, member.Type);
            }
            return resolved;
        }
开发者ID:Bombadil77,项目名称:boo,代码行数:18,代码来源:ProcessMethodBodies.cs


示例7: MapAmbiguousEntity

 private IEntity MapAmbiguousEntity(Ambiguous source)
 {
     // Map each individual entity in the ambiguous list
     return new Ambiguous(Array.ConvertAll<IEntity, IEntity>(source.Entities, Map));
 }
开发者ID:boo,项目名称:boo-lang,代码行数:5,代码来源:GenericMapping.cs


示例8: ResolveAmbiguousTypeReference

        private IEntity ResolveAmbiguousTypeReference(ReferenceExpression node, Ambiguous candidates)
        {
            List<IEntity> matches = GetMatchesByGenericity(node, candidates);
            if (matches.Count > 1)
            {
                PreferInternalEntitiesOverNonInternal(matches);
            }

            if (matches.Count == 1)
            {
                Bind(node, matches[0]);
            }
            else
            {
                Bind(node, new Ambiguous(matches));
            }

            return node.Entity;
        }
开发者ID:stuman08,项目名称:boo,代码行数:19,代码来源:ProcessMethodBodies.cs


示例9: ResolveAmbiguousReferenceByAccessibility

        private IEntity ResolveAmbiguousReferenceByAccessibility(Ambiguous candidates)
        {
            List newEntities = new List();
            foreach (IEntity entity in candidates.Entities)
            {
                if (!IsInaccessible(entity))
                { newEntities.Add(entity); }
            }

            if (newEntities.Count == 1)
            { return (IEntity)newEntities[0]; }

            return new Ambiguous(newEntities);
        }
开发者ID:w4x,项目名称:boolangstudio,代码行数:14,代码来源:ProcessMethodBodies.cs


示例10: ResolveAmbiguousTypeReference

        private IEntity ResolveAmbiguousTypeReference(ReferenceExpression node, Ambiguous candidates)
        {
            bool isGenericReference = (node.ParentNode is GenericReferenceExpression);

            List matches = new List();

            foreach (IEntity candidate in candidates.Entities)
            {
                IType type = candidate as IType;
                bool isGenericType = (type != null && type.GenericInfo != null);
                if (isGenericType == isGenericReference)
                {
                    matches.Add(candidate);
                }
            }

            if (matches.Count == 1)
            {
                Bind(node, (IEntity)matches[0]);
            }
            else
            {
                Bind(node, new Ambiguous(matches));
            }

            return node.Entity;
        }
开发者ID:w4x,项目名称:boolangstudio,代码行数:27,代码来源:ProcessMethodBodies.cs


示例11: ResolveAmbiguousReference

        private IEntity ResolveAmbiguousReference(ReferenceExpression node, Ambiguous candidates)
        {
            if (!AstUtil.IsTargetOfSlicing(node)
                && !AstUtil.IsLhsOfAssignment(node))
            {
                if (candidates.AllEntitiesAre(EntityType.Property))
                {
                    return ResolveAmbiguousPropertyReference(node, candidates, EmptyExpressionCollection);
                }
                else if (candidates.AllEntitiesAre(EntityType.Method))
                {
                    return ResolveAmbiguousMethodReference(node, candidates, EmptyExpressionCollection);
                    }
                else if (candidates.AllEntitiesAre(EntityType.Type))
                {
                    return ResolveAmbiguousTypeReference(node, candidates);
                }
            }

            return ResolveAmbiguousReferenceByAccessibility(candidates);
        }
开发者ID:w4x,项目名称:boolangstudio,代码行数:21,代码来源:ProcessMethodBodies.cs


示例12: ResolveAmbiguousExtension

        private IEntity ResolveAmbiguousExtension(MethodInvocationExpression node, Ambiguous ambiguous)
        {
            IEntity resolved = ResolveCallableReference(node, ambiguous);
            if (null != resolved) return resolved;

            return CantResolveAmbiguousMethodInvocation(node, ambiguous.Entities);
        }
开发者ID:w4x,项目名称:boolangstudio,代码行数:7,代码来源:ProcessMethodBodies.cs


示例13: ResolveAmbiguousMethodInvocation

        protected virtual IEntity ResolveAmbiguousMethodInvocation(MethodInvocationExpression node, Ambiguous entity)
        {
            _context.TraceVerbose("{0}: resolving ambigous method invocation: {1}", node.LexicalInfo, entity);

            IEntity resolved = ResolveCallableReference(node, entity);
            if (null != resolved) return resolved;

            if (TryToProcessAsExtensionInvocation(node)) return null;

            return CantResolveAmbiguousMethodInvocation(node, entity.Entities);
        }
开发者ID:w4x,项目名称:boolangstudio,代码行数:11,代码来源:ProcessMethodBodies.cs


示例14: ResolveAmbiguousReference

        private IEntity ResolveAmbiguousReference(ReferenceExpression node, Ambiguous candidates)
        {
            var resolved = ResolveAmbiguousReferenceByAccessibility(candidates);
            var accessibleCandidates = resolved as Ambiguous;

            if (accessibleCandidates == null || AstUtil.IsTargetOfSlicing(node) || node.IsTargetOfAssignment())
                return resolved;

            if (accessibleCandidates.AllEntitiesAre(EntityType.Property))
                return ResolveAmbiguousPropertyReference(node, accessibleCandidates, EmptyExpressionCollection);

            if (accessibleCandidates.AllEntitiesAre(EntityType.Method))
                return ResolveAmbiguousMethodReference(node, accessibleCandidates, EmptyExpressionCollection);

            if (accessibleCandidates.AllEntitiesAre(EntityType.Type))
                return ResolveAmbiguousTypeReference(node, accessibleCandidates);

            return resolved;
        }
开发者ID:stuman08,项目名称:boo,代码行数:19,代码来源:ProcessMethodBodies.cs


示例15: ResolveMacroExtensionType

 IEntity ResolveMacroExtensionType(MacroStatement node, Ambiguous extensions)
 {
     if (null == extensions)
         return null;
     foreach (var entity in extensions.Entities)
     {
         var extensionType = ResolveMacroExtensionType(node, entity as IMethod);
         if (null != extensionType)
             return extensionType;
     }
     return null;
 }
开发者ID:scottstephens,项目名称:boo,代码行数:12,代码来源:MacroExpander.cs


示例16: ResolveAmbiguousReferenceByAccessibility

 private IEntity ResolveAmbiguousReferenceByAccessibility(Ambiguous candidates)
 {
     var newEntities = new List<IEntity>();
     foreach (IEntity entity in candidates.Entities)
         if (!IsInaccessible(entity))
             newEntities.Add(entity);
     return Entities.EntityFromList(newEntities);
 }
开发者ID:stuman08,项目名称:boo,代码行数:8,代码来源:ProcessMethodBodies.cs


示例17: ConstructAmbiguousEntity

        /// <summary>
        /// Constructs generic entities out of an ambiguous definition.
        /// </summary>
        private IEntity ConstructAmbiguousEntity(Node constructionNode, Ambiguous ambiguousDefinition, IType[] typeArguments)
        {
            GenericConstructionChecker checker = new GenericConstructionChecker(
                TypeSystemServices,
                constructionNode,
                typeArguments,
                new CompilerErrorCollection());

            List<IEntity> matches = new List<IEntity>(ambiguousDefinition.Entities);

            // Filter matches by genericness, generity and constraints
            Predicate<IEntity>[] filters = new Predicate<IEntity>[] {
                checker.NotGenericDefinition,
                checker.IncorrectGenerity,
                checker.ViolatesParameterConstraints };

            foreach (Predicate<IEntity> filter in filters)
            {
                checker.Errors.Clear();
                matches.RemoveAll(filter);

                // If no matches pass the filter, record the first error only
                // (providing all the distinct errors that occured would be superfluous)
                if (matches.Count == 0)
                {
                    Errors.Add(checker.Errors[0]);
                    return TypeSystemServices.ErrorEntity;
                }

                // If only one match passes the filter, continue construction normally
                if (matches.Count == 1)
                {
                    return ConstructEntity(constructionNode, matches[0], typeArguments);
                }
            }

            // Several matches have passed the filter -
            // construct all of them and return another Ambiguous entity
            IEntity[] constructed = Array.ConvertAll<IEntity, IEntity>(
                matches.ToArray(),
                delegate(IEntity def) { return ConstructEntity(constructionNode, def, typeArguments); });

            return new Ambiguous(constructed);
        }
开发者ID:boo,项目名称:boo-lang,代码行数:47,代码来源:GenericsServices.cs


示例18: ResolveCallableReference

        private IEntity ResolveCallableReference(MethodInvocationExpression node, Ambiguous entity)
        {
            var genericService = My<GenericsServices>.Instance;
            var methods = entity.Entities
                .OfType<IMethod>()
                .Select(m => {
                    if (m.GenericInfo == null)
                        return m;

                    var inferrer = new GenericParameterInferrer(Context, m, node.Arguments);
                    inferrer.ResolveClosure += ProcessClosureInMethodInvocation;
                    if (!inferrer.Run())
                        return null;
                    var arguments = inferrer.GetInferredTypes();
                    if (arguments == null || !genericService.CheckGenericConstruction(m, arguments))
                        return null;
                    return m.GenericInfo.ConstructMethod(arguments);
                }).Where(m => m != null).ToArray();

            var resolved = CallableResolutionService.ResolveCallableReference(node.Arguments, methods);
            if (null == resolved)
                return null;

            IMember member = (IMember)resolved;
            if (NodeType.ReferenceExpression == node.Target.NodeType)
            {
                ResolveMemberInfo((ReferenceExpression)node.Target, member);
            }
            else
            {
                Bind(node.Target, member);
                BindExpressionType(node.Target, member.Type);
            }
            return resolved;
        }
开发者ID:stuman08,项目名称:boo,代码行数:35,代码来源:ProcessMethodBodies.cs


示例19: AmbiguousReference

 private IEntity AmbiguousReference(SimpleTypeReference node, Ambiguous entity)
 {
     _context.Errors.Add(CompilerErrorFactory.AmbiguousReference(node, node.Name, entity.Entities));
     return TypeSystemServices.ErrorEntity;
 }
开发者ID:w4x,项目名称:boolangstudio,代码行数:5,代码来源:NameResolutionService.cs



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


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
C# TypeSystem.InternalMethod类代码示例发布时间:2022-05-24
下一篇:
C# Ast.UnaryExpression类代码示例发布时间: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