예제 #1
0
		private ICodeNode VisitAssignExpression(BinaryExpression node)
		{
			V_0 = CodePattern.Match(SelfAssignment.IncrementPattern, node);
			if (V_0.get_Success())
			{
				V_1 = (Expression)V_0.get_Item("Target");
				V_2 = (BinaryOperator)V_0.get_Item("Operator");
				if (V_2 == 1 || V_2 == 3)
				{
					return new UnaryExpression(SelfAssignment.GetCorrespondingOperator(V_2), V_1.CloneExpressionOnly(), node.get_UnderlyingSameMethodInstructions());
				}
			}
			V_0 = CodePattern.Match(SelfAssignment.AssignmentOperatorPattern, node);
			if (V_0.get_Success())
			{
				V_1 = (Expression)V_0.get_Item("Target");
				V_3 = (BinaryExpression)V_0.get_Item("RightSide");
				V_4 = (Expression)V_0.get_Item("Value");
				if (this.normalToAssignOperatorMap.ContainsKey(V_3.get_Operator()))
				{
					V_5 = new List<Instruction>();
					V_5.AddRange(V_3.get_MappedInstructions());
					V_5.AddRange(V_1.get_MappedInstructions());
					stackVariable41 = this.normalToAssignOperatorMap.get_Item(V_3.get_Operator());
					V_6 = V_1.CloneExpressionOnlyAndAttachInstructions(V_3.get_Left().get_MappedInstructions());
					return new BinaryExpression(stackVariable41, V_6, V_4, this.typeSystem, V_5, false);
				}
			}
			return this.VisitBinaryExpression(node);
		}
예제 #2
0
        private bool TryMatchCanCastPattern(BinaryExpression node, IEnumerable <ICodePattern> patterns, out CanCastExpression result)
        {
            V_0 = patterns.GetEnumerator();
            try
            {
                while (V_0.MoveNext())
                {
                    V_1 = CodePattern.Match(V_0.get_Current(), node);
                    if (!V_1.get_Success())
                    {
                        continue;
                    }
                    result = this.CreateCanCastExpression(V_1, node);
                    V_2    = true;
                    goto Label1;
                }
                goto Label0;
            }
            finally
            {
                if (V_0 != null)
                {
                    V_0.Dispose();
                }
            }
Label1:
            return(V_2);

Label0:
            result = null;
            return(false);
        }