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


C# SlicingExpression.IsTargetOfAssignment方法代码示例

本文整理汇总了C#中Boo.Lang.Compiler.Ast.SlicingExpression.IsTargetOfAssignment方法的典型用法代码示例。如果您正苦于以下问题:C# SlicingExpression.IsTargetOfAssignment方法的具体用法?C# SlicingExpression.IsTargetOfAssignment怎么用?C# SlicingExpression.IsTargetOfAssignment使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Boo.Lang.Compiler.Ast.SlicingExpression的用法示例。


在下文中一共展示了SlicingExpression.IsTargetOfAssignment方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: OnSlicingExpression

        public override void OnSlicingExpression(SlicingExpression node)
        {
            base.OnSlicingExpression(node);

            if (!node.IsComplexSlicing())
                return;

            if (node.IsTargetOfAssignment())
                return;

            CompleteOmittedExpressions(node);
            ExpandComplexSlicing(node);
        }
开发者ID:scottstephens,项目名称:boo,代码行数:13,代码来源:ExpandComplexSlicingExpressions.cs

示例2: SliceMember

        void SliceMember(SlicingExpression node, IEntity member)
        {
            EnsureRelatedNodeWasVisited(node, member);
            if (node.IsTargetOfAssignment())
            {
                // leave it to LeaveBinaryExpression to resolve
                Bind(node, member);
                return;
            }

            MethodInvocationExpression mie = new MethodInvocationExpression(node.LexicalInfo);
            foreach (Slice index in node.Indices)
            {
                mie.Arguments.Add(index.Begin);
            }

            IMethod getter = null;
            if (EntityType.Ambiguous == member.EntityType)
            {
                IEntity result = ResolveAmbiguousPropertyReference((ReferenceExpression)node.Target, (Ambiguous)member, mie.Arguments);
                IProperty found = result as IProperty;
                if (null != found)
                {
                    getter = found.GetGetMethod();
                }
                else if (EntityType.Ambiguous == result.EntityType)
                {
                    Error(node);
                    return;
                }
            }
            else if (EntityType.Property == member.EntityType)
            {
                getter = ((IProperty)member).GetGetMethod();
            }

            if (null != getter)
            {
                if (AssertParameters(node, getter, mie.Arguments))
                {
                    Expression target = GetIndexedPropertySlicingTarget(node);

                    mie.Target = CodeBuilder.CreateMemberReference(target, getter);
                    BindExpressionType(mie, getter.ReturnType);

                    node.ParentNode.Replace(node, mie);
                }
                else
                {
                    Error(node);
                }
            }
            else
            {
                NotImplemented(node, "slice for anything but arrays and default properties");
            }
        }
开发者ID:stuman08,项目名称:boo,代码行数:57,代码来源:ProcessMethodBodies.cs

示例3: OnSlicingExpression

		override public void OnSlicingExpression(SlicingExpression node)
		{
			if (node.IsTargetOfAssignment())
				return;

			Visit(node.Target);
			var type = (IArrayType)PopType();

			if (type.Rank == 1)
				LoadSingleDimensionalArrayElement(node, type);
			else
				LoadMultiDimensionalArrayElement(node, type);

			PushType(type.ElementType);
		}
开发者ID:hlizard,项目名称:boo,代码行数:15,代码来源:EmitAssembly.cs

示例4: LeaveSlicingExpression

		override public void LeaveSlicingExpression(SlicingExpression node)
		{
			if (!IsDuckTyped(node.Target)) return;
			if (node.IsTargetOfAssignment()) return;

			// todo
			// a[foo]
			// RuntimeServices.GetSlice(a, "", (foo,))

			MethodInvocationExpression mie = CodeBuilder.CreateMethodInvocation(
				node.LexicalInfo,
				RuntimeServices_GetSlice,
				GetSlicingTarget(node),
				CodeBuilder.CreateStringLiteral(GetSlicingMemberName(node)),
				GetArrayForIndices(node));
			
			Replace(mie);
		}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:18,代码来源:ExpandDuckTypedExpressions.cs


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