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


C# BinaryExpression类代码示例

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


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

示例1: CompileBinaryExpression

        public static void CompileBinaryExpression(BinaryExpression expression, bool useInterpreter, bool expected)
        {
            Expression<Func<bool>> e = Expression.Lambda<Func<bool>>(expression, Enumerable.Empty<ParameterExpression>());
            Func<bool> f = e.Compile(useInterpreter);

            Assert.Equal(expected, f());
        }
开发者ID:geoffkizer,项目名称:corefx,代码行数:7,代码来源:GeneralBinaryTests.cs

示例2: GetResultIndexExpression

 protected Expression GetResultIndexExpression()
 {
     var resultVarIndex = ReadWord();
     Expression resultVarIndexExp = resultVarIndex.ToLiteral();
     if ((resultVarIndex & 0x2000) == 0x2000)
     {
         int a = ReadWord();
         if ((a & 0x2000) == 0x2000)
         {
             var variableExp = ReadVariable(a & ~0x2000);
             var literalExp = variableExp as IntegerLiteralExpression;
             if (literalExp != null)
             {
                 resultVarIndex += Convert.ToInt32(literalExp.Value);
                 resultVarIndex &= ~0x2000;
                 resultVarIndexExp = resultVarIndex.ToLiteral();
             }
             else
             {
                 resultVarIndexExp = new BinaryExpression(
                     new BinaryExpression(resultVarIndexExp, Operator.Add, variableExp), 
                     Operator.And,
                     new UnaryExpression(0x2000.ToLiteral(), Operator.Not));
             }
         }
         else
         {
             resultVarIndex = resultVarIndex + (a & 0xFFF);	
             resultVarIndex &= ~0x2000;
             resultVarIndexExp = resultVarIndex.ToLiteral();
         }
     }
     return resultVarIndexExp;
 }
开发者ID:scemino,项目名称:nscumm,代码行数:34,代码来源:ScriptParser3_Variable.cs

示例3: Match

		public bool Match(BinaryExpression exp)
		{
			if (exp.Operator != Operator.IAdd)
				return false;
			id = exp.Left as Identifier;
			
			bin = exp.Right as BinaryExpression;
			if ((id == null || bin == null) && exp.Operator  == Operator.IAdd)
			{
				id = exp.Right as Identifier;
				bin = exp.Left as BinaryExpression;
			}
			if (id == null || bin == null)
				return false;

			if (bin.Operator != Operator.SMul && bin.Operator != Operator.UMul && bin.Operator != Operator.IMul)
				return false;

			Identifier idInner = bin.Left as Identifier;
			cInner = bin.Right as Constant;
			if (idInner == null ||cInner == null)
				return false;

			if (idInner != id)
				return false;

			return true;
		}
开发者ID:killbug2004,项目名称:reko,代码行数:28,代码来源:Add_mul_id_c_id_Rule.cs

示例4: EmitBinaryMethod

 //CONFORMING
 private void EmitBinaryMethod(BinaryExpression b) {
     if (b.IsLifted) {
         ParameterExpression p1 = Expression.Variable(TypeUtils.GetNonNullableType(b.Left.Type), null);
         ParameterExpression p2 = Expression.Variable(TypeUtils.GetNonNullableType(b.Right.Type), null);
         MethodCallExpression mc = Expression.Call(null, b.Method, p1, p2);
         Type resultType = null;
         if (b.IsLiftedToNull) {
             resultType = TypeUtils.GetNullableType(mc.Type);
         } else {
             switch (b.NodeType) {
                 case ExpressionType.Equal:
                 case ExpressionType.NotEqual:
                 case ExpressionType.LessThan:
                 case ExpressionType.LessThanOrEqual:
                 case ExpressionType.GreaterThan:
                 case ExpressionType.GreaterThanOrEqual:
                     if (mc.Type != typeof(bool)) {
                         throw Error.ArgumentMustBeBoolean();
                     }
                     resultType = typeof(bool);
                     break;
                 default:
                     resultType = TypeUtils.GetNullableType(mc.Type);
                     break;
             }
         }
         IList<ParameterExpression> variables = new ParameterExpression[] { p1, p2 };
         IList<Expression> arguments = new Expression[] { b.Left, b.Right };
         ValidateLift(variables, arguments);
         EmitLift(b.NodeType, resultType, mc, variables, arguments);
     } else {
         EmitMethodCallExpression(Expression.Call(null, b.Method, b.Left, b.Right));
     }
 }
开发者ID:joshholmes,项目名称:ironruby,代码行数:35,代码来源:LambdaCompiler.Binary.cs

示例5: AddressOf

        private void AddressOf(BinaryExpression node, Type type)
        {
            Debug.Assert(node.NodeType == ExpressionType.ArrayIndex && node.Method == null);

            if (TypeUtils.AreEquivalent(type, node.Type))
            {
                EmitExpression(node.Left);
                EmitExpression(node.Right);
                Type rightType = node.Right.Type;
                if (TypeUtils.IsNullableType(rightType))
                {
                    LocalBuilder loc = GetLocal(rightType);
                    _ilg.Emit(OpCodes.Stloc, loc);
                    _ilg.Emit(OpCodes.Ldloca, loc);
                    _ilg.EmitGetValue(rightType);
                    FreeLocal(loc);
                }
                Type indexType = TypeUtils.GetNonNullableType(rightType);
                if (indexType != typeof(int))
                {
                    _ilg.EmitConvertToType(indexType, typeof(int), isChecked: true);
                }
                _ilg.Emit(OpCodes.Ldelema, node.Type);
            }
            else
            {
                EmitExpressionAddress(node, type);
            }
        }
开发者ID:alessandromontividiu03,项目名称:corefx,代码行数:29,代码来源:LambdaCompiler.Address.cs

示例6: VisitBinaryExpression

 public override Expression VisitBinaryExpression(BinaryExpression binaryExpression){
   if (binaryExpression == null) return null;
   binaryExpression.Operand2 = this.VisitExpression(binaryExpression.Operand2);
   binaryExpression.Operand1 = this.VisitExpression(binaryExpression.Operand1);
   if (binaryExpression.Type == null) binaryExpression.Type = binaryExpression.Operand1.Type; //Hack: need proper inferencing
   return binaryExpression;
 }
开发者ID:tapicer,项目名称:resource-contracts-.net,代码行数:7,代码来源:Unstacker.cs

示例7: Exs_OrWithSelf

 public void Exs_OrWithSelf()
 {
     BuildExpressionSimplifier();
     var expr = new BinaryExpression(Operator.Or, foo.DataType, foo, foo);
     var result = expr.Accept(simplifier);
     Assert.AreSame(foo, result);
 }
开发者ID:killbug2004,项目名称:reko,代码行数:7,代码来源:ExpressionSimplifierTests.cs

示例8: TestComplexExpression

        public void TestComplexExpression()
        {
            const string VAR_X = "x";
             const string VAR_Y = "y";
             const string VAR_Z = "z";

             var ctx = new Context();
             ctx.SetValue(VAR_X, true);
             ctx.SetValue(VAR_Y, true);
             ctx.SetValue(VAR_Z, false);

             var constExp = new ConstExpression(TRUE_TOKEN);
             var unaryExp = new UnaryExpression(constExp);
             Assert.AreEqual(false, unaryExp.Interpret(ctx));

             var binaryExp =
                 new BinaryExpression(
                     new BinaryExpression(VAR_X,
                                          BinaryOp.And,
                                          unaryExp),
                     BinaryOp.Or,
                     new BinaryExpression(new UnaryExpression(VAR_Y),
                                          BinaryOp.And,
                                          VAR_Z));

             Assert.AreEqual(false, binaryExp.Interpret(ctx));
        }
开发者ID:solarplexus6,项目名称:Oop,代码行数:27,代码来源:Zad2Test.cs

示例9: MatchMul

		public bool MatchMul(BinaryExpression b)
		{
			if (b.Operator == Operator.SMul || b.Operator == Operator.UMul || b.Operator == Operator.IMul)
			{
				Constant c = b.Left as Constant;
				Expression e = b.Right;
				if (c == null)
				{
					c = b.Right as Constant;
					e = b.Left;
				}
				if (c != null)
				{
					elemSize = c;
					Index = e;
					return true;
				}
			}
			if (b.Operator == Operator.Shl)
			{
				Constant c = b.Right as Constant;
				if (c != null)
				{
					elemSize = b.Operator.ApplyConstants(Constant.Create(b.Left.DataType, 1), c);
					Index = b.Left;
					return true;
				}
			}
			return false;
		}
开发者ID:killbug2004,项目名称:reko,代码行数:30,代码来源:ArrayExpressionMatcher.cs

示例10: VisitBinaryExpression

 public override Expression VisitBinaryExpression(BinaryExpression be) {
   be.Operand1 = this.VisitExpression(be.Operand1);
   bool hcr = this.hasContextReference;
   this.hasContextReference = false;
   be.Operand2 = this.VisitExpression(be.Operand2);
   this.hasContextReference |= hcr;
   return (Expression) this.Compose(be, this.GetComposer(be.Operand1), this.GetComposer(be.Operand2));
 }
开发者ID:hesam,项目名称:SketchSharp,代码行数:8,代码来源:Partitioner.cs

示例11: EvcBinaryExpression

 public void EvcBinaryExpression()
 {
     Identifier a = new Identifier("a", PrimitiveType.Word32, new TemporaryStorage("a", 1, PrimitiveType.Word32));
     BinaryExpression a1 = new BinaryExpression(Operator.IAdd, PrimitiveType.Word32, a, a);
     BinaryExpression a2 = new BinaryExpression(Operator.IAdd, PrimitiveType.Word32, a, a);
     Assert.IsTrue(eq.Equals(a1, a2));
     Assert.AreEqual(eq.GetHashCode(a1), eq.GetHashCode(a2));
 }
开发者ID:nemerle,项目名称:reko,代码行数:8,代码来源:ExpressionValueComparerTests.cs

示例12: ExsConstants

		public void ExsConstants()
		{
			BuildExpressionSimplifier();
			Expression expr = new BinaryExpression(Operator.IAdd, PrimitiveType.Word32, 
				Constant.Word32(1), Constant.Word32(2));
			Constant c = (Constant) expr.Accept(simplifier);

			Assert.AreEqual(3, c.ToInt32());
		}
开发者ID:killbug2004,项目名称:reko,代码行数:9,代码来源:ExpressionSimplifierTests.cs

示例13: EmitBinaryExpression

        void EmitBinaryExpression(BinaryExpression expr, MethodInfo method)
        {
            // Compute the operands
            VisitExpression(expr.Left);
            VisitExpression(expr.Right);

            // Call the operator method
            IL.Emit(OpCodes.Call, method);
        }
开发者ID:MilesBoulanger,项目名称:game-creator,代码行数:9,代码来源:NaiveDotNetTraverser.cs

示例14: AddZeroToEffectiveAddress

 /// <summary>
 /// Extends an effective address ''id'' to ''id'' + 0. 
 /// </summary>
 /// <remarks>
 /// The purpose here is to extend the effective address to avoid premature typing of id.
 /// If later in the type inference process [[id]] is discovered to be a signed integer, the
 /// decompiler can accomodate that by having the added 0 be [[pointer]] or [[member pointer]].
 /// This is not possible if all we have is the id.
 /// </remarks>
 /// <param name="ea"></param>
 /// <returns></returns>
 private Expression AddZeroToEffectiveAddress(Expression ea)
 {
     BinaryExpression bin = new BinaryExpression(
         Operator.IAdd,
         PrimitiveType.CreateWord(ea.DataType.Size),
         ea,
         Constant.Create(PrimitiveType.CreateWord(ea.DataType.Size), 0));
     return bin;
 }
开发者ID:killbug2004,项目名称:reko,代码行数:20,代码来源:ExpressionNormalizer.cs

示例15: VpAddZero

        public void VpAddZero()
        {
            Identifier r = Reg32("r");
            Identifier s = Reg32("s");

            var sub = new BinaryExpression(Operator.ISub, PrimitiveType.Word32, new MemoryAccess(MemoryIdentifier.GlobalMemory, r, PrimitiveType.Word32), Constant.Word32(0));
            var vp = new ExpressionSimplifier(new SsaEvaluationContext(arch, ssaIds));
            var exp = sub.Accept(vp);
            Assert.AreEqual("Mem0[r:word32]", exp.ToString());
        }
开发者ID:nemerle,项目名称:reko,代码行数:10,代码来源:ValuePropagationTests.cs


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