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

C# Ast.SlicingExpression类代码示例

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

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



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

示例1: OnSlicingExpression

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

			var arrayType = GetExpressionType(node.Target) as IArrayType;
			if (arrayType == null)
				return;

			if (arrayType.Rank != node.Indices.Count)
				Error(CompilerErrorFactory.InvalidArrayRank(node, node.Target.ToCodeString(), arrayType.Rank, node.Indices.Count));
		}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:11,代码来源:CheckSlicingExpressions.cs


示例2: LeaveSlicingExpression

 public override void LeaveSlicingExpression(SlicingExpression node)
 {
     if (IsDuckTyped(node.Target) && !HasDefaultMember(node.Target))
     {
         BindDuck(node);
     }
     else
     {
         base.LeaveSlicingExpression(node);
     }
 }
开发者ID:Bombadil77,项目名称:boo,代码行数:11,代码来源:ProcessMethodBodiesWithDuckTyping.cs


示例3: ExpandComplexSlicing

		private void ExpandComplexSlicing(SlicingExpression node)
		{
			var targetType = GetExpressionType(node.Target);
			if (IsString(targetType))
				ExpandComplexStringSlicing(node);
			else if (IsList(targetType))
				ExpandComplexListSlicing(node);
			else if (targetType.IsArray)
				ExpandComplexArraySlicing(node);
			else
				NotImplemented(node, "complex slicing for anything but lists, arrays and strings");
		}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:12,代码来源:ExpandComplexSlicingExpressions.cs


示例4: ExpandComplexArraySlicing

		void ExpandComplexArraySlicing(SlicingExpression node)
		{
			if (node.Indices.Count > 1)
			{
				MethodInvocationExpression mie = null;
				var computeEnd = new ArrayLiteralExpression();
				var collapse = new ArrayLiteralExpression();
				var ranges = new ArrayLiteralExpression();
				for (int i = 0; i < node.Indices.Count; i++)
				{
					ranges.Items.Add(node.Indices[i].Begin);
					if (node.Indices[i].End == null )
					{
						var end = new BinaryExpression(BinaryOperatorType.Addition, node.Indices[i].Begin, new IntegerLiteralExpression(1));
						ranges.Items.Add(end);
						BindExpressionType(end, GetExpressionType(node.Indices[i].Begin));
						computeEnd.Items.Add(new BoolLiteralExpression(false));
						collapse.Items.Add(new BoolLiteralExpression(true));
					}
					else if (node.Indices[i].End == OmittedExpression.Default)
					{
						var end = new IntegerLiteralExpression(0);
						ranges.Items.Add(end);
						BindExpressionType(end, GetExpressionType(node.Indices[i].Begin));
						computeEnd.Items.Add(new BoolLiteralExpression(true));
						collapse.Items.Add(new BoolLiteralExpression(false));
					}
					else
					{
						ranges.Items.Add(node.Indices[i].End);
						computeEnd.Items.Add(new BoolLiteralExpression(false));
						collapse.Items.Add(new BoolLiteralExpression(false));
					}
				}
				mie = CodeBuilder.CreateMethodInvocation(MethodCache.RuntimeServices_GetMultiDimensionalRange1, node.Target, ranges);
				mie.Arguments.Add(computeEnd);
				mie.Arguments.Add(collapse);

				BindExpressionType(ranges, TypeSystemServices.Map(typeof(int[])));
				BindExpressionType(computeEnd, TypeSystemServices.Map(typeof(bool[])));
				BindExpressionType(collapse, TypeSystemServices.Map(typeof(bool[])));
				node.ParentNode.Replace(node, mie);
			}
			else
			{
				var slice = node.Indices[0];
				var mie = IsNullOrOmitted(slice.End)
					? CodeBuilder.CreateMethodInvocation(MethodCache.RuntimeServices_GetRange1, node.Target, slice.Begin)
					: CodeBuilder.CreateMethodInvocation(MethodCache.RuntimeServices_GetRange2, node.Target, slice.Begin, slice.End);
				node.ParentNode.Replace(node, mie);
			}
		}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:52,代码来源:ExpandComplexSlicingExpressions.cs


示例5: 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


示例6: ExpandComplexListSlicing

		void ExpandComplexListSlicing(SlicingExpression node)
		{
			var slice = node.Indices[0];

			MethodInvocationExpression mie;
			if (IsNullOrOmitted(slice.End))
			{
				mie = CodeBuilder.CreateMethodInvocation(node.Target, MethodCache.List_GetRange1);
				mie.Arguments.Add(slice.Begin);
			}
			else
			{
				mie = CodeBuilder.CreateMethodInvocation(node.Target, MethodCache.List_GetRange2);
				mie.Arguments.Add(slice.Begin);
				mie.Arguments.Add(slice.End);
			}
			node.ParentNode.Replace(node, mie);
		}
开发者ID:0xb1dd1e,项目名称:boo,代码行数:18,代码来源:ExpandComplexSlicingExpressions.cs


示例7: Apply

 public override void Apply(Node targetNode) {
     var cls = targetNode as ClassDefinition;
     if(cls==null) {
         this.Context.Errors.Add(new CompilerError(this.LexicalInfo,
                                                   "ControllerAttribute is applyable only to classes"));
         return;
     }
     targetNode.GetEnclosingModule().Imports.Add(new Import(this.LexicalInfo,"Comdiv.Controllers"));
      cls.BaseTypes.Clear();
      cls.BaseTypes.Insert(0, new SimpleTypeReference("Comdiv.Controllers.ExtensionBaseController"));
     if(!cls.Name.EndsWith("Controller")) {
         cls.Name = cls.Name + "Controller";
     }
     var body = targetNode.GetEnclosingModule()["regmethod"] as Block;
     var registrycall = new SlicingExpression(new ReferenceExpression("registry"), new StringLiteralExpression(cls.Name.ToLower()));
     var assign = new ReferenceExpression(cls.Name);
     var aexpr = new BinaryExpression(BinaryOperatorType.Assign, registrycall, assign);
     body.Add(aexpr);
 }
开发者ID:Qorpent,项目名称:comdiv.oldcore,代码行数:19,代码来源:ControllerAttribute.cs


示例8: tryClass

		private void tryClass(Node targetNode) {
			var cls = targetNode as ClassDefinition;
			if (cls == null)
			{
				return;
			}
			if (cls.BaseTypes.Count == 0)
			{
				cls.BaseTypes.Insert(0, new SimpleTypeReference("Comdiv.Framework.Quick.QuickBase"));
			}
			var attr = new Attribute("Comdiv.Framework.Quick.actionAttribute");
			attr.Arguments.Add(new StringLiteralExpression(cls.Name.Replace("_", ".")));
			cls.Attributes.Add(attr);

			var body = targetNode.GetEnclosingModule()["regmethod"] as Block;
			var registrycall = new SlicingExpression(new ReferenceExpression("registry"), new StringLiteralExpression(cls.Name.Replace("_", ".") + ".quick"));
			var assign = new ReferenceExpression(cls.Name);
			var aexpr = new BinaryExpression(BinaryOperatorType.Assign, registrycall, assign);
			body.Add(aexpr);
		}
开发者ID:Qorpent,项目名称:comdiv.oldcore,代码行数:20,代码来源:QuickAttribute.cs


示例9: ResultingTypeForComplexSlicing

 private IType ResultingTypeForComplexSlicing(SlicingExpression node)
 {
     var targetType = GetExpressionType(node.Target);
     return targetType.IsArray ? ResultingTypeForArraySlicing(node) : targetType;
 }
开发者ID:stuman08,项目名称:boo,代码行数:5,代码来源:ProcessMethodBodies.cs


示例10: LeaveSlicingExpression

        public override void LeaveSlicingExpression(SlicingExpression node)
        {
            if (node.Target.Entity.IsAmbiguous())
            {
                BindIndexedPropertySlicing(node);
                return;
            }

            // target[indices]
            var targetType = GetExpressionType(node.Target);
            if (IsError(targetType))
            {
                Error(node);
                return;
            }

            if (node.IsComplexSlicing())
            {
                BindExpressionType(node, ResultingTypeForComplexSlicing(node));
                return;
            }

            if (IsIndexedProperty(node.Target))
            {
                BindIndexedPropertySlicing(node);
                return;
            }

            if (targetType.IsArray)
            {
                BindExpressionType(node, targetType.ElementType);
                return;
            }

            var member = TypeSystemServices.GetDefaultMember(targetType);
            if (member == null)
            {
                Error(node, CompilerErrorFactory.TypeDoesNotSupportSlicing(node.Target, targetType));
                return;
            }

            node.Target = new MemberReferenceExpression(node.LexicalInfo, node.Target, member.Name)
                            {
                                Entity = member,
                                ExpressionType = Null.Default // to be resolved later
                            };
            SliceMember(node, member);
        }
开发者ID:stuman08,项目名称:boo,代码行数:48,代码来源:ProcessMethodBodies.cs


示例11: CreateSideEffectAwareSlicingOperation

        private Expression CreateSideEffectAwareSlicingOperation(LexicalInfo lexicalInfo, BinaryOperatorType binaryOperator, SlicingExpression lvalue, Expression rvalue, InternalLocal returnValue)
        {
            MethodInvocationExpression eval = CodeBuilder.CreateEvalInvocation(lexicalInfo);
            if (HasSideEffect(lvalue.Target))
            {
                InternalLocal temp = AddInitializedTempLocal(eval, lvalue.Target);
                lvalue.Target = CodeBuilder.CreateReference(temp);
            }

            foreach (Slice slice in lvalue.Indices)
            {
                Expression index = slice.Begin;
                if (HasSideEffect(index))
                {
                    InternalLocal temp = AddInitializedTempLocal(eval, index);
                    slice.Begin = CodeBuilder.CreateReference(temp);
                }
            }

            BinaryExpression addition = CodeBuilder.CreateBoundBinaryExpression(
                GetExpressionType(lvalue),
                binaryOperator,
                CloneOrAssignToTemp(returnValue, lvalue),
                rvalue);
            Expression expansion = CodeBuilder.CreateAssignment(
                lvalue.CloneNode(),
                addition);
            // Resolve operator overloads if any
            BindArithmeticOperator(addition);
            if (eval.Arguments.Count > 0 || null != returnValue)
            {
                eval.Arguments.Add(expansion);
                if (null != returnValue)
                {
                    eval.Arguments.Add(CodeBuilder.CreateReference(returnValue));
                }
                BindExpressionType(eval, GetExpressionType(lvalue));
                expansion = eval;
            }
            return expansion;
        }
开发者ID:stuman08,项目名称:boo,代码行数:41,代码来源:ProcessMethodBodies.cs


示例12: AssertIsNotComplexSlicing

 void AssertIsNotComplexSlicing(SlicingExpression node)
 {
     if (node.IsComplexSlicing())
         NotImplemented(node, "complex slicing");
 }
开发者ID:stuman08,项目名称:boo,代码行数:5,代码来源:ProcessMethodBodies.cs


示例13: slice

	protected void slice(
		SlicingExpression se
	) //throws RecognitionException, TokenStreamException
{
		
		
				Expression begin = null;
				Expression end = null;
				Expression step = null;
			
		
		try {      // for error handling
			{
				switch ( LA(1) )
				{
				case COLON:
				{
					{
						match(COLON);
						if (0==inputState.guessing)
						{
							begin = OmittedExpression.Default;
						}
						{
							switch ( LA(1) )
							{
							case ESEPARATOR:
							case CAST:
							case CHAR:
							case FALSE:
							case NOT:
							case NULL:
							case SELF:
							case SUPER:
							case THEN:
							case TRUE:
							case TYPEOF:
							case TRIPLE_QUOTED_STRING:
							case LPAREN:
							case DOUBLE_QUOTED_STRING:
							case SINGLE_QUOTED_STRING:
							case ID:
							case MULTIPLY:
							case LBRACK:
							case SPLICE_BEGIN:
							case DOT:
							case LBRACE:
							case QQ_BEGIN:
							case SUBTRACT:
							case LONG:
							case INCREMENT:
							case DECREMENT:
							case ONES_COMPLEMENT:
							case INT:
							case BACKTICK_QUOTED_STRING:
							case RE_LITERAL:
							case DOUBLE:
							case FLOAT:
							case TIMESPAN:
							{
								end=expression();
								break;
							}
							case COLON:
							{
								{
									match(COLON);
									if (0==inputState.guessing)
									{
										end = OmittedExpression.Default;
									}
									step=expression();
								}
								break;
							}
							case RBRACK:
							case COMMA:
							{
								break;
							}
							default:
							{
								throw new NoViableAltException(LT(1), getFilename());
							}
							 }
						}
					}
					break;
				}
				case ESEPARATOR:
				case CAST:
				case CHAR:
				case FALSE:
				case NOT:
				case NULL:
				case SELF:
				case SUPER:
				case THEN:
				case TRUE:
				case TYPEOF:
//.........这里部分代码省略.........
开发者ID:hlizard,项目名称:boo,代码行数:101,代码来源:BooParserBase.cs


示例14: EmitNormalizedArrayIndex

 void EmitNormalizedArrayIndex(SlicingExpression sourceNode, Expression index)
 {
     bool isNegative = false;
     if (CanBeNegative(index, ref isNegative)
         && !_rawArrayIndexing
         && !AstAnnotations.IsRawIndexing(sourceNode))
     {
         if (isNegative)
         {
             _il.Emit(OpCodes.Dup);
             _il.Emit(OpCodes.Ldlen);
             EmitLoadInt(index);
             _il.Emit(OpCodes.Add);
         }
         else
         {
             _il.Emit(OpCodes.Dup);
             EmitLoadInt(index);
             _il.EmitCall(OpCodes.Call, RuntimeServices_NormalizeArrayIndex, null);
         }
     }
     else
     {
         EmitLoadInt(index);
     }
 }
开发者ID:Bombadil77,项目名称:boo,代码行数:26,代码来源:EmitAssembly.cs


示例15: BindMultiDimensionalArraySlicing

        void BindMultiDimensionalArraySlicing(SlicingExpression node)
        {
            if (AstUtil.IsLhsOfAssignment(node))
            {
                // leave it to LeaveBinaryExpression to resolve
                return;
            }

            MethodInvocationExpression mie = CodeBuilder.CreateMethodInvocation(
                node.Target,
                CachedMethod("Array_GetValue", () => Methods.InstanceFunctionOf<Array, int[], object>(a => a.GetValue)));
            for (int i = 0; i < node.Indices.Count; i++)
            {
                mie.Arguments.Add(node.Indices[i].Begin);
            }

            IType elementType = node.Target.ExpressionType.ElementType;
            node.ParentNode.Replace(node, CodeBuilder.CreateCast(elementType, mie));
        }
开发者ID:Bombadil77,项目名称:boo,代码行数:19,代码来源:ProcessMethodBodies.cs


示例16: OnSlicingExpression

		override public void OnSlicingExpression(SlicingExpression node)
		{
			var tern = ProcessTargets(node);
			if (tern != null) 
			{
				Visit(node.Indices);
				ReplaceCurrentNode(tern);
			} 
			base.OnSlicingExpression(node);
		}
开发者ID:Rfvgyhn,项目名称:boo,代码行数:10,代码来源:SafeAccessOperator.cs


示例17: slicing_expression

        //throws RecognitionException, TokenStreamException
        protected Expression slicing_expression()
        {
            Expression e;

            IToken  lbrack = null;
            IToken  oft = null;
            IToken  lparen = null;

                e = null;
                SlicingExpression se = null;
                MethodInvocationExpression mce = null;
                TypeReference genericArgument = null;
                TypeReferenceCollection genericArguments = null;
                Expression initializer = null;

            try {      // for error handling
            e=atom();
            {    // ( ... )*
                for (;;)
                {
                    switch ( LA(1) )
                    {
                    case LBRACK:
                    {
                        {
                            lbrack = LT(1);
                            match(LBRACK);
                            {
                                switch ( LA(1) )
                                {
                                case OF:
                                {
                                    {
                                        match(OF);
                                        if (0==inputState.guessing)
                                        {

                                                                    GenericReferenceExpression gre = new GenericReferenceExpression(SourceLocationFactory.ToLexicalInfo(lbrack));
                                                                    gre.Target = e;
                                                                    e = gre;
                                                                    genericArguments = gre.GenericArguments;

                                        }
                                        type_reference_list(genericArguments);
                                    }
                                    break;
                                }
                                case ESEPARATOR:
                                case CAST:
                                case CHAR:
                                case FALSE:
                                case NOT:
                                case NULL:
                                case SELF:
                                case SUPER:
                                case TRUE:
                                case TYPEOF:
                                case ID:
                                case TRIPLE_QUOTED_STRING:
                                case LPAREN:
                                case DOUBLE_QUOTED_STRING:
                                case SINGLE_QUOTED_STRING:
                                case LBRACK:
                                case SUBTRACT:
                                case SPLICE_BEGIN:
                                case DOT:
                                case COLON:
                                case MULTIPLY:
                                case LBRACE:
                                case QQ_BEGIN:
                                case LONG:
                                case INCREMENT:
                                case DECREMENT:
                                case ONES_COMPLEMENT:
                                case INT:
                                case RE_LITERAL:
                                case DOUBLE:
                                case FLOAT:
                                case TIMESPAN:
                                {
                                    if (0==inputState.guessing)
                                    {

                                                            se = new SlicingExpression(SourceLocationFactory.ToLexicalInfo(lbrack));
                                                            se.Target = e;
                                                            e = se;

                                    }
                                    slice(se);
                                    {    // ( ... )*
                                        for (;;)
                                        {
                                            if ((LA(1)==COMMA))
                                            {
                                                match(COMMA);
                                                slice(se);
                                            }
                                            else
                                            {
//.........这里部分代码省略.........
开发者ID:0xb1dd1e,项目名称:boo,代码行数:101,代码来源:WSABooParserBase.cs


示例18: CheckComplexSlicingParameters

 bool CheckComplexSlicingParameters(SlicingExpression node)
 {
     foreach (Slice slice in node.Indices)
     {
         if (!CheckComplexSlicingParameters(slice))
         {
             return false;
         }
     }
     return true;
 }
开发者ID:Bombadil77,项目名称:boo,代码行数:11,代码来源:ProcessMethodBodies.cs


示例19: OnSlicingExpression

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

            Visit(node.Target);

            IArrayType type = (IArrayType)PopType();
            EmitNormalizedArrayIndex(node, node.Indices[0].Begin);

            IType elementType = type.ElementType;
            OpCode opcode = GetLoadEntityOpCode(elementType);
            if (OpCodes.Ldelema.Value == opcode.Value)
            {
                Type systemType = GetSystemType(elementType);
                _il.Emit(opcode, systemType);
                if (!IsByAddress(elementType))
                    _il.Emit(OpCodes.Ldobj, systemType);
            }
            else if (OpCodes.Ldelem.Value == opcode.Value)
            {
                _il.Emit(opcode, GetSystemType(elementType));
            }
            else
            {
                _il.Emit(opcode);
            }
            PushType(elementType);
        }
开发者ID:Bombadil77,项目名称:boo,代码行数:29,代码来源:EmitAssembly.cs


示例20: CheckNoComplexSlicing

 void CheckNoComplexSlicing(SlicingExpression node)
 {
     if (AstUtil.IsComplexSlicing(node))
     {
         NotImplemented(node, "complex slicing");
     }
 }
开发者ID:Bombadil77,项目名称:boo,代码行数:7,代码来源:ProcessMethodBodies.cs



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


鲜花

握手

雷人

路过

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

请发表评论

全部评论

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