public override IExpression Rewrite(IEquality operation)
            {
                _log.Info("Rewriting IEquality: " + operation + " Pass: "******"Left")
                {
                    thisArgument = operation.LeftOperand;
                    argument     = operation.RightOperand;
                }
                else
                {
                    thisArgument = operation.RightOperand;
                    argument     = operation.LeftOperand;
                }
                methodCall.ThisArgument = thisArgument;
                methodCall.MethodToCall = TypeHelper.GetMethod(Host.PlatformType.SystemObject.ResolvedType.Members,
                                                               Host.NameTable.GetNameFor("Equals"),
                                                               Host.PlatformType.SystemObject);
                methodCall.Arguments = argument.InList();

                return(methodCall);
            }
 public override void Visit(IEquality equality)
 {
     if (Process(equality))
     {
         visitor.Visit(equality);
     }
     base.Visit(equality);
 }
Example #3
0
        private HLLocation ProcessEqualityExpression(IEquality pExpression)
        {
            HLLocation locationLeftOperand  = ProcessExpression(pExpression.LeftOperand);
            HLLocation locationRightOperand = ProcessExpression(pExpression.RightOperand);
            HLLocation locationTemporary    = HLTemporaryLocation.Create(CreateTemporary(HLDomain.GetOrCreateType(pExpression.Type)));

            mCurrentBlock.EmitCompare(HLCompareType.Equal, locationTemporary, locationLeftOperand, locationRightOperand);
            return(pExpression.ResultIsUnmodifiedLeftOperand ? locationLeftOperand : locationTemporary);
        }
Example #4
0
 public override Boolean Equals(object o)
 {
     if (_map is IEquality)
     {
         IEquality map = (IEquality)_map;
         return((o is PersistentMapProxy) ? map.eq(((PersistentMapProxy)o).innerMap()) : map.eq(o));
     }
     return(base.Equals(o));
 }
Example #5
0
        public override IExpression Rewrite(IEquality equality)
        {
            base.Rewrite(equality);
            var cc2 = equality.RightOperand as CompileTimeConstant;

            if (cc2 != null && ExpressionHelper.IsNumericZero(cc2) && equality.LeftOperand.Type.TypeCode == PrimitiveTypeCode.Boolean)
            {
                return(IfThenElseReplacer.InvertCondition(equality.LeftOperand));
            }
            return(equality);
        }
 public override void Visit(IEquality operation)
 {
     _log.Info("Visiting IEquality: " + operation);
     var passes = new List<string>();
     foreach (Tuple<IExpression, string> pair in
         Collections.Pairs<IExpression, string>(operation.LeftOperand, "Left", operation.RightOperand, "Right"))
     {
         ITypeDefinition operandType = pair.Item1.Type.ResolvedType;
         if (operandType != Host.PlatformType.SystemString &&
             operandType != Host.PlatformType.SystemObject &&
             !operandType.IsValueType &&
             operandType.BaseClasses.Any() && operandType.IsClass
             && TypeHelper.GetMethod(operandType.Members,
             Host.NameTable.GetNameFor("Equals"), Host.PlatformType.SystemObject) != Dummy.MethodDefinition)
         {
             passes.Add(pair.Item2);
         }
     }
     if (passes.Any())
     {
         MarkMutationTarget(operation, passes);
     }
 }
            public override void Visit(IEquality operation)
            {
                _log.Info("Visiting IEquality: " + operation);
                var passes = new List <string>();

                foreach (Tuple <IExpression, string> pair in
                         Collections.Pairs <IExpression, string>(operation.LeftOperand, "Left", operation.RightOperand, "Right"))
                {
                    ITypeDefinition operandType = pair.Item1.Type.ResolvedType;
                    if (operandType != Host.PlatformType.SystemString &&
                        operandType != Host.PlatformType.SystemObject &&
                        !operandType.IsValueType &&
                        operandType.BaseClasses.Any() && operandType.IsClass &&
                        TypeHelper.GetMethod(operandType.Members,
                                             Host.NameTable.GetNameFor("Equals"), Host.PlatformType.SystemObject) != Dummy.MethodDefinition)
                    {
                        passes.Add(pair.Item2);
                    }
                }
                if (passes.Any())
                {
                    MarkMutationTarget(operation, passes);
                }
            }
 /// <summary>
 /// Determines if the specified point is feasible
 /// for the equality, c.
 /// </summary>
 /// <param name="c">The c.</param>
 /// <param name="point">The point.</param>
 /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
 private bool feasible(IEquality c, double[] point)
 {
     return(calculate(c, point) == 0);
 }
Example #9
0
 public override void Visit(IEquality binary)
 {
     _formattedValue = Format(binary.LeftOperand) + " == " + Format(binary.RightOperand);
 }
Example #10
0
 public override void Visit(IEquality operation)
 {
     ProcessOperation(operation);
 }
Example #11
0
 public override void Visit(IEquality equal) {
   base.Visit(equal);
   Bpl.Expr rexp = TranslatedExpressions.Pop();
   Bpl.Expr lexp = TranslatedExpressions.Pop();
   TranslatedExpressions.Push(Bpl.Expr.Binary(Bpl.BinaryOperator.Opcode.Eq, lexp, rexp));
 }
Example #12
0
 public override void TraverseChildren(IEquality equality)
 {
     base.TraverseChildren(equality);
     ((Equality)equality).Type = this.platformType.SystemBoolean;
 }
Example #13
0
 public virtual void onASTElement(IEquality equality)
 {
 }
    public override void TraverseChildren(IEquality equal)
    {
      if ((equal.LeftOperand.Type.TypeCode != PrimitiveTypeCode.NotPrimitive || equal.RightOperand.Type.TypeCode != PrimitiveTypeCode.NotPrimitive)
        && !TypeHelper.TypesAreEquivalent(equal.LeftOperand.Type, equal.RightOperand.Type)
        && (!(IsConstantNull(equal.LeftOperand) || IsConstantNull(equal.RightOperand))) // null is "polymorphic": it can be compared against any reference type.
        ) {
        throw new TranslationException(
          String.Format("Decompiler messed up: equality's left operand is of type '{0}' but right operand is of type '{1}'.",
          TypeHelper.GetTypeName(equal.LeftOperand.Type),
          TypeHelper.GetTypeName(equal.RightOperand.Type)
          ));
      }

      base.TraverseChildren(equal);
      Bpl.Expr rexp = TranslatedExpressions.Pop();
      Bpl.Expr lexp = TranslatedExpressions.Pop();
      TranslatedExpressions.Push(Bpl.Expr.Binary(Bpl.BinaryOperator.Opcode.Eq, lexp, rexp));
    }
Example #15
0
 //^ ensures this.path.Count == old(this.path.Count);
 /// <summary>
 /// Traverses the given equality expression.
 /// </summary>
 /// <param name="equality"></param>
 public virtual void Visit(IEquality equality)
 {
     if (this.stopTraversal) return;
       //^ int oldCount = this.path.Count;
       this.path.Push(equality);
       this.Visit(equality.LeftOperand);
       this.Visit(equality.RightOperand);
       //^ assume this.path.Count == oldCount+1; //True because all of the virtual methods of this class promise not decrease this.path.Count.
       this.path.Pop();
 }
 /// <summary>
 /// Rewrites the given equality expression.
 /// </summary>
 /// <param name="equality"></param>
 public virtual IExpression Rewrite(IEquality equality)
 {
     return equality;
 }
 public override void Visit(IEquality equality)
 {
     if(Process(equality)){visitor.Visit(equality);}
     base.Visit(equality);
 }
Example #18
0
 public override void Visit(IEquality equality)
 {
     allElements.Add(new InvokInfo(Traverser, "IEquality", equality));
 }
 public override IExpression Rewrite(IEquality operation)
 {
     _log.Info("Rewriting IEquality: " + operation + " Pass: "******"Left")
     {
         thisArgument = operation.LeftOperand;
         argument = operation.RightOperand;
     }
     else
     {
         thisArgument = operation.RightOperand;
         argument = operation.LeftOperand;
     }
     methodCall.ThisArgument = thisArgument;
     methodCall.MethodToCall = TypeHelper.GetMethod(Host.PlatformType.SystemObject.ResolvedType.Members,
                                                       Host.NameTable.GetNameFor("Equals"),
                                                       Host.PlatformType.SystemObject);
     methodCall.Arguments = argument.InList();
     
     return methodCall;
 }
 public virtual void onASTElement(IEquality equality) { }
Example #21
0
 /// <summary>
 /// Traverses the equality expression.
 /// </summary>
 public void Traverse(IEquality equality)
 {
     Contract.Requires(equality != null);
       if (this.preorderVisitor != null) this.preorderVisitor.Visit(equality);
       if (this.StopTraversal) return;
       this.TraverseChildren(equality);
       if (this.StopTraversal) return;
       if (this.postorderVisitor != null) this.postorderVisitor.Visit(equality);
 }
Example #22
0
 public void Visit(IEquality equality)
 {
     this.result = this.rewriter.Rewrite(equality);
 }
Example #23
0
 public void Visit(IEquality equality)
 {
     this.traverser.Traverse(equality);
 }
Example #24
0
 private HLLocation ProcessEqualityExpression(IEquality pExpression)
 {
     HLLocation locationLeftOperand = ProcessExpression(pExpression.LeftOperand);
     HLLocation locationRightOperand = ProcessExpression(pExpression.RightOperand);
     HLLocation locationTemporary = HLTemporaryLocation.Create(CreateTemporary(HLDomain.GetOrCreateType(pExpression.Type)));
     mCurrentBlock.EmitCompare(HLCompareType.Equal, locationTemporary, locationLeftOperand, locationRightOperand);
     return pExpression.ResultIsUnmodifiedLeftOperand ? locationLeftOperand : locationTemporary;
 }
Example #25
0
 public void Visit(IEquality equality)
 {
     Contract.Requires(equality != null);
       throw new NotImplementedException();
 }
        public override void TraverseChildren(IEquality equality)
{ MethodEnter(equality);
            base.TraverseChildren(equality);
     MethodExit();   }
Example #27
0
 /// <summary>
 /// Generates IL for the specified equality.
 /// </summary>
 /// <param name="equality">The equality.</param>
 public override void TraverseChildren(IEquality equality)
 {
     this.Traverse(equality.LeftOperand);
       this.Traverse(equality.RightOperand);
       this.generator.Emit(OperationCode.Ceq);
       this.StackSize--;
 }
Example #28
0
 /// <summary>
 /// Performs some computation with the given equality expression.
 /// </summary>
 /// <param name="equality"></param>
 public virtual void Visit(IEquality equality)
 {
 }
Example #29
0
 public override void TraverseChildren(IEquality equality) {
   base.TraverseChildren(equality);
   ((Equality)equality).Type = this.platformType.SystemBoolean;
 }
Example #30
0
 /// <summary>
 /// Traverses the children of the equality expression.
 /// </summary>
 public virtual void TraverseChildren(IEquality equality)
 {
     Contract.Requires(equality != null);
       this.TraverseChildren((IBinaryOperation)equality);
 }
Example #31
0
    /// <summary>
    /// Returns a deep copy of the given equality expression.
    /// </summary>
    /// <param name="equality"></param>
    public Equality Copy(IEquality equality) {
      Contract.Requires(equality != null);
      Contract.Ensures(Contract.Result<Equality>() != null);

      var mutableCopy = this.shallowCopier.Copy(equality);
      this.CopyChildren((BinaryOperation)mutableCopy);
      return mutableCopy;
    }
Example #32
0
 /// <summary>
 /// Performs some computation with the given equality expression.
 /// </summary>
 /// <param name="equality"></param>
 public virtual void Visit(IEquality equality)
 {
     this.Visit((IBinaryOperation)equality);
 }
Example #33
0
    /// <summary>
    /// Returns a shallow copy of the given equality expression.
    /// </summary>
    /// <param name="equality"></param>
    public Equality Copy(IEquality equality) {
      Contract.Requires(equality != null);
      Contract.Ensures(Contract.Result<Equality>() != null);

      return new Equality(equality);
    }
Example #34
0
 public void Visit(IEquality equality)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 /// Performs some computation with the given equality expression.
 /// </summary>
 /// <param name="equality"></param>
 public virtual void Visit(IEquality equality)
 {
 }
Example #36
0
 public override IExpression Rewrite(IEquality operation)
 {
     return(ReplaceOperation(operation));
 }
Example #37
0
 /// <summary>
 /// Visits the specified equality.
 /// </summary>
 /// <param name="equality">The equality.</param>
 public override void Visit(IEquality equality)
 {
     Equality mutableEquality = new Equality(equality);
     this.resultExpression = this.myCodeCopier.DeepCopy(mutableEquality);
 }
Example #38
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="equality"></param>
 public Equality(IEquality equality)
     : base(equality)
 {
 }
Example #39
0
 /// <summary>
 /// Returns a deep copy of the given equality expression.
 /// </summary>
 /// <param name="equality"></param>
 public Equality Copy(IEquality equality)
 {
     var mutableCopy = this.shallowCopier.Copy(equality);
       this.CopyChildren((BinaryOperation)mutableCopy);
       return mutableCopy;
 }
 public override IExpression Rewrite(IEquality equality) {
   base.Rewrite(equality);
   var cc2 = equality.RightOperand as CompileTimeConstant;
   if (cc2 != null && ExpressionHelper.IsNumericZero(cc2) && equality.LeftOperand.Type.TypeCode == PrimitiveTypeCode.Boolean) {
     return IfThenElseReplacer.InvertCondition(equality.LeftOperand);
   }
   return equality;
 }
Example #41
0
 /// <summary>
 /// Returns a shallow copy of the given equality expression.
 /// </summary>
 /// <param name="equality"></param>
 public Equality Copy(IEquality equality)
 {
     return new Equality(equality);
 }
    public override void TraverseChildren(IEquality equality) {

      var needsParen = LowerPrecedenceThanParentExpression(equality);
      var savedCurrentPrecedence = this.currentPrecedence;
      this.currentPrecedence = this.Precedence(equality);

      if (needsParen) this.sourceEmitterOutput.Write("(");
      this.Traverse(equality.LeftOperand);
      this.sourceEmitterOutput.Write(" == ");
      this.Traverse(equality.RightOperand);
      if (needsParen) this.sourceEmitterOutput.Write(")");

      this.currentPrecedence = savedCurrentPrecedence;
    }
Example #43
0
 public void Visit(IEquality equality)
 {
     this.result = this.copier.Copy(equality);
 }
Example #44
0
 public override void TraverseChildren(IEquality equality)
 {
     MethodEnter(equality);
     base.TraverseChildren(equality);
     MethodExit();
 }
Example #45
0
 /// <summary>
 /// Rewrites the given equality expression.
 /// </summary>
 /// <param name="equality"></param>
 public virtual IExpression Rewrite(IEquality equality)
 {
     var mutableEquality = equality as Equality;
       if (mutableEquality == null) return equality;
       this.RewriteChildren(mutableEquality);
       return mutableEquality;
 }