public override void Visit(IBitwiseOr bitwiseOr)
 {
     if (Process(bitwiseOr))
     {
         visitor.Visit(bitwiseOr);
     }
     base.Visit(bitwiseOr);
 }
示例#2
0
        private HLLocation ProcessBitwiseOrExpression(IBitwiseOr pExpression)
        {
            HLLocation locationLeftOperand  = ProcessExpression(pExpression.LeftOperand);
            HLLocation locationRightOperand = ProcessExpression(pExpression.RightOperand);
            HLLocation locationTemporary    = HLTemporaryLocation.Create(CreateTemporary(HLDomain.GetOrCreateType(pExpression.Type)));

            mCurrentBlock.EmitBitwiseOr(locationTemporary, locationLeftOperand, locationRightOperand);
            return(pExpression.ResultIsUnmodifiedLeftOperand ? locationLeftOperand : locationTemporary);
        }
示例#3
0
 /// <summary>
 /// Performs some computation with the given bitwise or expression.
 /// </summary>
 /// <param name="bitwiseOr"></param>
 public virtual void Visit(IBitwiseOr bitwiseOr)
 {
     this.Visit((IBinaryOperation)bitwiseOr);
 }
示例#4
0
 /// <summary>
 /// Traverses the children of the bitwise or expression.
 /// </summary>
 public virtual void TraverseChildren(IBitwiseOr bitwiseOr)
 {
     Contract.Requires(bitwiseOr != null);
       this.TraverseChildren((IBinaryOperation)bitwiseOr);
 }
示例#5
0
 /// <summary>
 /// Performs some computation with the given bitwise or expression.
 /// </summary>
 /// <param name="bitwiseOr"></param>
 public virtual void Visit(IBitwiseOr bitwiseOr)
 {
 }
 public override void Visit(IBitwiseOr operation)
 {
     ProcessOperation(operation);
 }
示例#7
0
 public virtual void onASTElement(IBitwiseOr bitwiseOr)
 {
 }
示例#8
0
 public void Visit(IBitwiseOr bitwiseOr)
 {
     this.result = this.copier.Copy(bitwiseOr);
 }
 public virtual void onASTElement(IBitwiseOr bitwiseOr) { }
示例#10
0
 /// <summary>
 /// Generates IL for the specified bitwise or.
 /// </summary>
 /// <param name="bitwiseOr">The bitwise or.</param>
 public override void TraverseChildren(IBitwiseOr bitwiseOr)
 {
     this.Traverse(bitwiseOr.LeftOperand);
       this.Traverse(bitwiseOr.RightOperand);
       this.generator.Emit(OperationCode.Or);
       this.StackSize--;
 }
 public override void Visit(IBitwiseOr bitwiseOr)
 {
     if(Process(bitwiseOr)){visitor.Visit(bitwiseOr);}
     base.Visit(bitwiseOr);
 }
示例#12
0
 private HLLocation ProcessBitwiseOrExpression(IBitwiseOr pExpression)
 {
     HLLocation locationLeftOperand = ProcessExpression(pExpression.LeftOperand);
     HLLocation locationRightOperand = ProcessExpression(pExpression.RightOperand);
     HLLocation locationTemporary = HLTemporaryLocation.Create(CreateTemporary(HLDomain.GetOrCreateType(pExpression.Type)));
     mCurrentBlock.EmitBitwiseOr(locationTemporary, locationLeftOperand, locationRightOperand);
     return pExpression.ResultIsUnmodifiedLeftOperand ? locationLeftOperand : locationTemporary;
 }
示例#13
0
 public void Visit(IBitwiseOr bitwiseOr)
 {
     this.result = this.rewriter.Rewrite(bitwiseOr);
 }
示例#14
0
 /// <summary>
 /// Rewrites the given bitwise or expression.
 /// </summary>
 /// <param name="bitwiseOr"></param>
 public virtual IExpression Rewrite(IBitwiseOr bitwiseOr)
 {
     var mutableBitwiseOr = bitwiseOr as BitwiseOr;
       if (mutableBitwiseOr == null) return bitwiseOr;
       this.RewriteChildren(mutableBitwiseOr);
       return mutableBitwiseOr;
 }
示例#15
0
 //^ ensures this.path.Count == old(this.path.Count);
 /// <summary>
 /// Traverses the given bitwise or expression.
 /// </summary>
 /// <param name="bitwiseOr"></param>
 public virtual void Visit(IBitwiseOr bitwiseOr)
 {
     if (this.stopTraversal) return;
       //^ int oldCount = this.path.Count;
       this.path.Push(bitwiseOr);
       this.Visit(bitwiseOr.LeftOperand);
       this.Visit(bitwiseOr.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();
 }
示例#16
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="bitwiseOr"></param>
 public BitwiseOr(IBitwiseOr bitwiseOr)
     : base(bitwiseOr)
 {
 }
示例#17
0
 public override void TraverseChildren(IBitwiseOr bitwiseOr)
 {
     base.TraverseChildren(bitwiseOr);
     ((BitwiseOr)bitwiseOr).Type = this.GetBitwiseOperationType(bitwiseOr);
 }
示例#18
0
 /// <summary>
 /// Visits the specified bitwise or.
 /// </summary>
 /// <param name="bitwiseOr">The bitwise or.</param>
 public override void Visit(IBitwiseOr bitwiseOr)
 {
     BitwiseOr mutableBitwiseOr = bitwiseOr as BitwiseOr;
     if (alwaysMakeACopy || mutableBitwiseOr == null) mutableBitwiseOr = new BitwiseOr(bitwiseOr);
     this.resultExpression = this.myCodeMutator.Visit(mutableBitwiseOr);
 }
示例#19
0
 public override void Visit(IBitwiseOr bitwiseOr)
 {
     allElements.Add(new InvokInfo(Traverser, "IBitwiseOr", bitwiseOr));
 }
 public override void TraverseChildren(IBitwiseOr bitwiseOr) {
   var targetExpression = bitwiseOr.LeftOperand as ITargetExpression;
   if (targetExpression != null) { // x |= e
     bool statement = this.currentExpressionIsOpAssignStatement;
     this.currentExpressionIsOpAssignStatement = false;
     this.VisitAssignment(targetExpression, bitwiseOr, (IExpression e) => this.TraverseBitwiseOrRightOperandAndDoOperation(e),
       treatAsStatement: statement, pushTargetRValue: true, resultIsInitialTargetRValue: bitwiseOr.ResultIsUnmodifiedLeftOperand);
   } else { // x | e
     this.Traverse(bitwiseOr.LeftOperand);
     this.TraverseBitwiseOrRightOperandAndDoOperation(bitwiseOr);
   }
 }
 /// <summary>
 /// Rewrites the given bitwise or expression.
 /// </summary>
 /// <param name="bitwiseOr"></param>
 public virtual IExpression Rewrite(IBitwiseOr bitwiseOr)
 {
     return bitwiseOr;
 }
        public override void TraverseChildren(IBitwiseOr bitwiseOr)
{ MethodEnter(bitwiseOr);
            base.TraverseChildren(bitwiseOr);
     MethodExit();   }
示例#23
0
 public override void TraverseChildren(IBitwiseOr bitwiseOr) {
   base.TraverseChildren(bitwiseOr);
   ((BitwiseOr)bitwiseOr).Type = this.GetBitwiseOperationType(bitwiseOr);
 }
 public override IExpression Rewrite(IBitwiseOr operation)
 {
     return(ReplaceOperation(operation));
 }
示例#25
0
    /// <summary>
    /// Returns a deep copy of the given bitwise or expression.
    /// </summary>
    /// <param name="bitwiseOr"></param>
    public BitwiseOr Copy(IBitwiseOr bitwiseOr) {
      Contract.Requires(bitwiseOr != null);
      Contract.Ensures(Contract.Result<BitwiseOr>() != null);

      var mutableCopy = this.shallowCopier.Copy(bitwiseOr);
      this.CopyChildren((BinaryOperation)mutableCopy);
      return mutableCopy;
    }
示例#26
0
 /// <summary>
 /// Traverses the bitwise or expression.
 /// </summary>
 public void Traverse(IBitwiseOr bitwiseOr)
 {
     Contract.Requires(bitwiseOr != null);
       if (this.preorderVisitor != null) this.preorderVisitor.Visit(bitwiseOr);
       if (this.StopTraversal) return;
       this.TraverseChildren(bitwiseOr);
       if (this.StopTraversal) return;
       if (this.postorderVisitor != null) this.postorderVisitor.Visit(bitwiseOr);
 }
示例#27
0
    /// <summary>
    /// Returns a shallow copy of the given bitwise or expression.
    /// </summary>
    /// <param name="bitwiseOr"></param>
    public BitwiseOr Copy(IBitwiseOr bitwiseOr) {
      Contract.Requires(bitwiseOr != null);
      Contract.Ensures(Contract.Result<BitwiseOr>() != null);

      return new BitwiseOr(bitwiseOr);
    }
示例#28
0
 public void Visit(IBitwiseOr bitwiseOr)
 {
     this.traverser.Traverse(bitwiseOr);
 }
 /// <summary>
 /// Performs some computation with the given bitwise or expression.
 /// </summary>
 /// <param name="bitwiseOr"></param>
 public virtual void Visit(IBitwiseOr bitwiseOr)
 {
 }
示例#30
0
 public void Visit(IBitwiseOr bitwiseOr)
 {
     Contract.Requires(bitwiseOr != null);
       throw new NotImplementedException();
 }
示例#31
0
 /// <summary>
 /// Visits the specified bitwise or.
 /// </summary>
 /// <param name="bitwiseOr">The bitwise or.</param>
 public override void Visit(IBitwiseOr bitwiseOr)
 {
     BitwiseOr mutableBitwiseOr = new BitwiseOr(bitwiseOr);
     this.resultExpression = this.myCodeCopier.DeepCopy(mutableBitwiseOr);
 }
示例#32
0
 public void Visit(IBitwiseOr bitwiseOr)
 {
     throw new NotImplementedException();
 }
示例#33
0
 /// <summary>
 /// Returns a deep copy of the given bitwise or expression.
 /// </summary>
 /// <param name="bitwiseOr"></param>
 public BitwiseOr Copy(IBitwiseOr bitwiseOr)
 {
     var mutableCopy = this.shallowCopier.Copy(bitwiseOr);
       this.CopyChildren((BinaryOperation)mutableCopy);
       return mutableCopy;
 }
    public override void TraverseChildren(IBitwiseOr bitwiseOr) {

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

      if (needsParen) this.sourceEmitterOutput.Write("(");
      this.Traverse(bitwiseOr.LeftOperand);
      if (bitwiseOr.LeftOperand is ITargetExpression)
        this.sourceEmitterOutput.Write(" |= ");
      else
        this.sourceEmitterOutput.Write(" | ");
      this.Traverse(bitwiseOr.RightOperand);
      if (needsParen) this.sourceEmitterOutput.Write(")");

      this.currentPrecedence = savedCurrentPrecedence;
    }
示例#35
0
 /// <summary>
 /// Returns a shallow copy of the given bitwise or expression.
 /// </summary>
 /// <param name="bitwiseOr"></param>
 public BitwiseOr Copy(IBitwiseOr bitwiseOr)
 {
     return new BitwiseOr(bitwiseOr);
 }
示例#36
0
 public override void TraverseChildren(IBitwiseOr bitwiseOr)
 {
     MethodEnter(bitwiseOr);
     base.TraverseChildren(bitwiseOr);
     MethodExit();
 }
示例#37
0
 /// <summary>
 /// Visits the specified bitwise or.
 /// </summary>
 /// <param name="bitwiseOr">The bitwise or.</param>
 public override void Visit(IBitwiseOr bitwiseOr)
 {
     BitwiseOr mutableBitwiseOr = bitwiseOr as BitwiseOr;
     if (mutableBitwiseOr == null) {
       this.resultExpression = bitwiseOr;
       return;
     }
     this.resultExpression = this.myCodeMutator.Visit(mutableBitwiseOr);
 }