コード例 #1
0
        public override IExpression Rewrite(ILessThanOrEqual lessThanOrEqual)
        {
            var castIfPossible = lessThanOrEqual.LeftOperand as ICastIfPossible;

            if (castIfPossible != null)
            {
                var compileTimeConstant = lessThanOrEqual.RightOperand as ICompileTimeConstant;
                if (compileTimeConstant != null && compileTimeConstant.Value == null)
                {
                    var locations = lessThanOrEqual.Locations;
                    return(this.Rewrite(
                               new LogicalNot()
                    {
                        Locations = locations as List <ILocation> ?? new List <ILocation>(locations),
                        Operand = new CheckIfInstance()
                        {
                            Operand = castIfPossible.ValueToCast,
                            TypeToCheck = castIfPossible.TargetType,
                            Type = lessThanOrEqual.Type,
                        },
                        Type = this.host.PlatformType.SystemBoolean,
                    }));
                }
            }
            return(base.Rewrite(lessThanOrEqual));
        }
コード例 #2
0
 public override void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     if (Process(lessThanOrEqual))
     {
         visitor.Visit(lessThanOrEqual);
     }
     base.Visit(lessThanOrEqual);
 }
コード例 #3
0
ファイル: HLMethod.cs プロジェクト: Astaelan/Neutron
        private HLLocation ProcessLessThanOrEqualExpression(ILessThanOrEqual pExpression)
        {
            HLLocation locationLeftOperand  = ProcessExpression(pExpression.LeftOperand);
            HLLocation locationRightOperand = ProcessExpression(pExpression.RightOperand);
            HLLocation locationTemporary    = HLTemporaryLocation.Create(CreateTemporary(HLDomain.GetOrCreateType(pExpression.Type)));

            mCurrentBlock.EmitCompare(HLCompareType.LessThanOrEqual, locationTemporary, locationLeftOperand, locationRightOperand);
            return(pExpression.ResultIsUnmodifiedLeftOperand ? locationLeftOperand : locationTemporary);
        }
コード例 #4
0
 public override IExpression Rewrite(ILessThanOrEqual operation)
 {
     return(ReplaceOperation(operation));
 }
コード例 #5
0
ファイル: Visitors.cs プロジェクト: Refresh06/visualmutator
 public void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     throw new NotImplementedException();
 }
コード例 #6
0
ファイル: Visitors.cs プロジェクト: Refresh06/visualmutator
 /// <summary>
 /// Performs some computation with the given less-than-or-equal expression.
 /// </summary>
 /// <param name="lessThanOrEqual"></param>
 public virtual void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     this.Visit((IBinaryOperation)lessThanOrEqual);
 }
コード例 #7
0
ファイル: Visitors.cs プロジェクト: Refresh06/visualmutator
 /// <summary>
 /// Traverses the children of the less-than-or-equal expression.
 /// </summary>
 public virtual void TraverseChildren(ILessThanOrEqual lessThanOrEqual)
 {
     Contract.Requires(lessThanOrEqual != null);
       this.TraverseChildren((IBinaryOperation)lessThanOrEqual);
 }
コード例 #8
0
ファイル: Mutator.cs プロジェクト: riverar/devtools
 public void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     this.result = this.rewriter.Rewrite(lessThanOrEqual);
 }
コード例 #9
0
    public override void TraverseChildren(ILessThanOrEqual lessEqual)
    {
      base.TraverseChildren(lessEqual);
      Bpl.Expr rexp = TranslatedExpressions.Pop();
      Bpl.Expr lexp = TranslatedExpressions.Pop();

      Bpl.Expr e;
      switch (lessEqual.LeftOperand.Type.TypeCode) {
        case PrimitiveTypeCode.Float32:
        case PrimitiveTypeCode.Float64:
          e = new Bpl.NAryExpr(
            lessEqual.Token(),
            new Bpl.FunctionCall(this.sink.Heap.RealLessThanOrEqual),
            new List<Bpl.Expr>(new Bpl.Expr[] {lexp, rexp})
            );
          break;
        default:
          e = Bpl.Expr.Binary(Bpl.BinaryOperator.Opcode.Le, lexp, rexp);
          break;
      }

      TranslatedExpressions.Push(e);
    }
コード例 #10
0
 public virtual void onASTElement(ILessThanOrEqual lessThanOrEqual) { }
コード例 #11
0
 public override void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     allElements.Add(new InvokInfo(Traverser, "ILessThanOrEqual", lessThanOrEqual));
 }
コード例 #12
0
ファイル: TypeInferencer.cs プロジェクト: xornand/cci
 public override void TraverseChildren(ILessThanOrEqual lessThanOrEqual)
 {
     base.TraverseChildren(lessThanOrEqual);
     ((LessThanOrEqual)lessThanOrEqual).Type = this.platformType.SystemBoolean;
 }
コード例 #13
0
ファイル: Visitor.cs プロジェクト: riverar/devtools
 /// <summary>
 /// Generates IL for the specified less than or equal.
 /// </summary>
 /// <param name="lessThanOrEqual">The less than or equal.</param>
 public override void TraverseChildren(ILessThanOrEqual lessThanOrEqual)
 {
     this.Traverse(lessThanOrEqual.LeftOperand);
       this.Traverse(lessThanOrEqual.RightOperand);
       if (lessThanOrEqual.IsUnsignedOrUnordered && !TypeHelper.IsPrimitiveInteger(lessThanOrEqual.LeftOperand.Type))
     this.generator.Emit(OperationCode.Cgt_Un);
       else
     this.generator.Emit(OperationCode.Cgt);
       this.generator.Emit(OperationCode.Ldc_I4_0);
       this.generator.Emit(OperationCode.Ceq);
       this.StackSize--;
 }
コード例 #14
0
 public override void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     if(Process(lessThanOrEqual)){visitor.Visit(lessThanOrEqual);}
     base.Visit(lessThanOrEqual);
 }
コード例 #15
0
ファイル: HLMethod.cs プロジェクト: kvanberendonck/Neutron
 private HLLocation ProcessLessThanOrEqualExpression(ILessThanOrEqual pExpression)
 {
     HLLocation locationLeftOperand = ProcessExpression(pExpression.LeftOperand);
     HLLocation locationRightOperand = ProcessExpression(pExpression.RightOperand);
     HLLocation locationTemporary = HLTemporaryLocation.Create(CreateTemporary(HLDomain.GetOrCreateType(pExpression.Type)));
     mCurrentBlock.EmitCompare(HLCompareType.LessThanOrEqual, locationTemporary, locationLeftOperand, locationRightOperand);
     return pExpression.ResultIsUnmodifiedLeftOperand ? locationLeftOperand : locationTemporary;
 }
コード例 #16
0
ファイル: Expressions.cs プロジェクト: riverar/devtools
 /// <summary>
 /// 
 /// </summary>
 /// <param name="lessThanOrEqual"></param>
 public LessThanOrEqual(ILessThanOrEqual lessThanOrEqual)
     : base(lessThanOrEqual)
 {
     this.unsignedOrUnordered = lessThanOrEqual.IsUnsignedOrUnordered;
 }
コード例 #17
0
 /// <summary>
 /// Rewrites the given less-than-or-equal expression.
 /// </summary>
 /// <param name="lessThanOrEqual"></param>
 public virtual IExpression Rewrite(ILessThanOrEqual lessThanOrEqual)
 {
     return lessThanOrEqual;
 }
コード例 #18
0
 public override IExpression Rewrite(ILessThanOrEqual lessThanOrEqual) {
   var castIfPossible = lessThanOrEqual.LeftOperand as ICastIfPossible;
   if (castIfPossible != null) {
     var compileTimeConstant = lessThanOrEqual.RightOperand as ICompileTimeConstant;
     if (compileTimeConstant != null && compileTimeConstant.Value == null) {
       var locations = lessThanOrEqual.Locations;
       return this.Rewrite(
         new LogicalNot() {
           Locations = locations as List<ILocation> ?? new List<ILocation>(locations),
           Operand = new CheckIfInstance() {
             Operand = castIfPossible.ValueToCast,
             TypeToCheck = castIfPossible.TargetType,
             Type = lessThanOrEqual.Type,
           },
           Type = this.host.PlatformType.SystemBoolean,
         });
     }
   }
   return base.Rewrite(lessThanOrEqual);
 }
コード例 #19
0
        public override void TraverseChildren(ILessThanOrEqual lessThanOrEqual)
{ MethodEnter(lessThanOrEqual);
            base.TraverseChildren(lessThanOrEqual);
     MethodExit();   }
コード例 #20
0
ファイル: Mutator.cs プロジェクト: riverar/devtools
 /// <summary>
 /// Visits the specified less than or equal.
 /// </summary>
 /// <param name="lessThanOrEqual">The less than or equal.</param>
 public override void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     LessThanOrEqual mutableLessThanOrEqual = lessThanOrEqual as LessThanOrEqual;
     if (alwaysMakeACopy || mutableLessThanOrEqual == null) mutableLessThanOrEqual = new LessThanOrEqual(lessThanOrEqual);
     this.resultExpression = this.myCodeMutator.Visit(mutableLessThanOrEqual);
 }
コード例 #21
0
ファイル: Visitors.cs プロジェクト: Refresh06/visualmutator
 /// <summary>
 /// Performs some computation with the given less-than-or-equal expression.
 /// </summary>
 /// <param name="lessThanOrEqual"></param>
 public virtual void Visit(ILessThanOrEqual lessThanOrEqual)
 {
 }
コード例 #22
0
 public virtual void onASTElement(ILessThanOrEqual lessThanOrEqual)
 {
 }
コード例 #23
0
ファイル: Mutator.cs プロジェクト: riverar/devtools
 /// <summary>
 /// Rewrites the given less-than-or-equal expression.
 /// </summary>
 /// <param name="lessThanOrEqual"></param>
 public virtual IExpression Rewrite(ILessThanOrEqual lessThanOrEqual)
 {
     var mutableLessThanOrEqual = lessThanOrEqual as LessThanOrEqual;
       if (mutableLessThanOrEqual == null) return lessThanOrEqual;
       this.RewriteChildren(mutableLessThanOrEqual);
       return mutableLessThanOrEqual;
 }
コード例 #24
0
ファイル: Visitors.cs プロジェクト: Refresh06/visualmutator
 //^ ensures this.path.Count == old(this.path.Count);
 /// <summary>
 /// Traverses the given less-than-or-equal expression.
 /// </summary>
 /// <param name="lessThanOrEqual"></param>
 public virtual void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     if (this.stopTraversal) return;
       //^ int oldCount = this.path.Count;
       this.path.Push(lessThanOrEqual);
       this.Visit(lessThanOrEqual.LeftOperand);
       this.Visit(lessThanOrEqual.RightOperand);
       //^ assume this.path.Count == oldCount+1; //True because all of the virtual methods of this class promise not to decrease this.path.Count.
       this.path.Pop();
 }
コード例 #25
0
 public override void TraverseChildren(ILessThanOrEqual lessThanOrEqual) {
   base.TraverseChildren(lessThanOrEqual);
   ((LessThanOrEqual)lessThanOrEqual).Type = this.platformType.SystemBoolean;
 }
コード例 #26
0
ファイル: Visitors.cs プロジェクト: Refresh06/visualmutator
 /// <summary>
 /// Traverses the less-than-or-equal expression.
 /// </summary>
 public void Traverse(ILessThanOrEqual lessThanOrEqual)
 {
     Contract.Requires(lessThanOrEqual != null);
       if (this.preorderVisitor != null) this.preorderVisitor.Visit(lessThanOrEqual);
       if (this.StopTraversal) return;
       this.TraverseChildren(lessThanOrEqual);
       if (this.StopTraversal) return;
       if (this.postorderVisitor != null) this.postorderVisitor.Visit(lessThanOrEqual);
 }
コード例 #27
0
ファイル: Copier.cs プロジェクト: Refresh06/visualmutator
    /// <summary>
    /// Returns a deep copy of the given less-than-or-equal expression.
    /// </summary>
    /// <param name="lessThanOrEqual"></param>
    public LessThanOrEqual Copy(ILessThanOrEqual lessThanOrEqual) {
      Contract.Requires(lessThanOrEqual != null);
      Contract.Ensures(Contract.Result<LessThanOrEqual>() != null);

      var mutableCopy = this.shallowCopier.Copy(lessThanOrEqual);
      this.CopyChildren((BinaryOperation)mutableCopy);
      return mutableCopy;
    }
コード例 #28
0
ファイル: Visitors.cs プロジェクト: Refresh06/visualmutator
 public void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     this.traverser.Traverse(lessThanOrEqual);
 }
コード例 #29
0
ファイル: Copier.cs プロジェクト: Refresh06/visualmutator
    /// <summary>
    /// Returns a shallow copy of the given less-than-or-equal expression.
    /// </summary>
    /// <param name="lessThanOrEqual"></param>
    public LessThanOrEqual Copy(ILessThanOrEqual lessThanOrEqual) {
      Contract.Requires(lessThanOrEqual != null);
      Contract.Ensures(Contract.Result<LessThanOrEqual>() != null);

      return new LessThanOrEqual(lessThanOrEqual);
    }
コード例 #30
0
ファイル: Visitors.cs プロジェクト: Refresh06/visualmutator
 public void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     Contract.Requires(lessThanOrEqual != null);
       throw new NotImplementedException();
 }
コード例 #31
0
 /// <summary>
 /// Performs some computation with the given less-than-or-equal expression.
 /// </summary>
 /// <param name="lessThanOrEqual"></param>
 public virtual void Visit(ILessThanOrEqual lessThanOrEqual)
 {
 }
コード例 #32
0
 public override void Visit(ILessThanOrEqual lessEqual) {
   base.Visit(lessEqual);
   Bpl.Expr rexp = TranslatedExpressions.Pop();
   Bpl.Expr lexp = TranslatedExpressions.Pop();
   TranslatedExpressions.Push(Bpl.Expr.Binary(Bpl.BinaryOperator.Opcode.Le, lexp, rexp));
 }
コード例 #33
0
ファイル: Copier.cs プロジェクト: riverar/devtools
 /// <summary>
 /// Visits the specified less than or equal.
 /// </summary>
 /// <param name="lessThanOrEqual">The less than or equal.</param>
 public override void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     LessThanOrEqual mutableLessThanOrEqual = new LessThanOrEqual(lessThanOrEqual);
     this.resultExpression = this.myCodeCopier.DeepCopy(mutableLessThanOrEqual);
 }
コード例 #34
0
 public override void Visit(ILessThanOrEqual operation)
 {
     ProcessOperation(operation);
 }
コード例 #35
0
ファイル: Copier.cs プロジェクト: riverar/devtools
 /// <summary>
 /// Returns a deep copy of the given less-than-or-equal expression.
 /// </summary>
 /// <param name="lessThanOrEqual"></param>
 public LessThanOrEqual Copy(ILessThanOrEqual lessThanOrEqual)
 {
     var mutableCopy = this.shallowCopier.Copy(lessThanOrEqual);
       this.CopyChildren((BinaryOperation)mutableCopy);
       return mutableCopy;
 }
コード例 #36
0
ファイル: AstFormatter.cs プロジェクト: pkunze/visualmutator
 public override void Visit(ILessThanOrEqual binary)
 {
     _formattedValue = Format(binary.LeftOperand) + " <= " + Format(binary.RightOperand);
 }
コード例 #37
0
ファイル: Copier.cs プロジェクト: riverar/devtools
 /// <summary>
 /// Returns a shallow copy of the given less-than-or-equal expression.
 /// </summary>
 /// <param name="lessThanOrEqual"></param>
 public LessThanOrEqual Copy(ILessThanOrEqual lessThanOrEqual)
 {
     return new LessThanOrEqual(lessThanOrEqual);
 }
コード例 #38
0
    public override void TraverseChildren(ILessThanOrEqual lessThanOrEqual) {
      if (lessThanOrEqual.IsUnsignedOrUnordered && !TypeHelper.IsPrimitiveInteger(lessThanOrEqual.LeftOperand.Type)) {
        this.sourceEmitterOutput.Write("!(");
        this.Traverse(lessThanOrEqual.LeftOperand);
        this.sourceEmitterOutput.Write(" > ");
        this.Traverse(lessThanOrEqual.RightOperand);
        this.sourceEmitterOutput.Write(")");
        return;
      }

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

      if (needsParen) this.sourceEmitterOutput.Write("(");
      if (lessThanOrEqual.IsUnsignedOrUnordered && TypeHelper.IsPrimitiveInteger(lessThanOrEqual.LeftOperand.Type) && 
        lessThanOrEqual.LeftOperand.Type != TypeHelper.UnsignedEquivalent(lessThanOrEqual.LeftOperand.Type)) {
        if (needsParen) this.sourceEmitterOutput.Write("(");
        this.PrintTypeReferenceName(TypeHelper.UnsignedEquivalent(lessThanOrEqual.LeftOperand.Type));
        if (needsParen) this.sourceEmitterOutput.Write(")");
      }
      this.Traverse(lessThanOrEqual.LeftOperand);
      this.sourceEmitterOutput.Write(" <= ");
      if (lessThanOrEqual.IsUnsignedOrUnordered && TypeHelper.IsPrimitiveInteger(lessThanOrEqual.RightOperand.Type) && 
        lessThanOrEqual.RightOperand.Type != TypeHelper.UnsignedEquivalent(lessThanOrEqual.RightOperand.Type)) {
        if (needsParen) this.sourceEmitterOutput.Write("(");
        this.PrintTypeReferenceName(TypeHelper.UnsignedEquivalent(lessThanOrEqual.RightOperand.Type));
        if (needsParen) this.sourceEmitterOutput.Write(")");
      }
      this.Traverse(lessThanOrEqual.RightOperand);
      if (needsParen) this.sourceEmitterOutput.Write(")");

      this.currentPrecedence = savedCurrentPrecedence;
    }
コード例 #39
0
ファイル: Copier.cs プロジェクト: riverar/devtools
 public void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     this.result = this.copier.Copy(lessThanOrEqual);
 }
コード例 #40
0
 public override void TraverseChildren(ILessThanOrEqual lessThanOrEqual)
 {
     MethodEnter(lessThanOrEqual);
     base.TraverseChildren(lessThanOrEqual);
     MethodExit();
 }
コード例 #41
0
ファイル: Mutator.cs プロジェクト: riverar/devtools
 /// <summary>
 /// Visits the specified less than or equal.
 /// </summary>
 /// <param name="lessThanOrEqual">The less than or equal.</param>
 public override void Visit(ILessThanOrEqual lessThanOrEqual)
 {
     LessThanOrEqual mutableLessThanOrEqual = lessThanOrEqual as LessThanOrEqual;
     if (mutableLessThanOrEqual == null) {
       this.resultExpression = lessThanOrEqual;
       return;
     }
     this.resultExpression = this.myCodeMutator.Visit(mutableLessThanOrEqual);
 }