/// <summary> /// Performs some computation with the given push statement. /// </summary> /// <param name="pushStatement"></param> public override void Visit(IPushStatement pushStatement) { PushStatement mutablePushStatement = pushStatement as PushStatement; if (alwaysMakeACopy || mutablePushStatement == null) mutablePushStatement = new PushStatement(pushStatement); this.resultStatement = this.myCodeMutator.Visit(mutablePushStatement); }
public void Visit(IPushStatement pushStatement) { this.result = this.copier.Copy(pushStatement); }
public void Visit(IPushStatement pushStatement) { Contract.Requires(pushStatement != null); throw new NotImplementedException(); }
/// <summary> /// Allocates a shallow copy of a statement that pushes a value onto an implicit operand stack. /// </summary> public PushStatement(IPushStatement pushStatement) : base(pushStatement) { this.valueToPush = pushStatement.ValueToPush; }
/// <summary> /// Traverses the push statement. /// </summary> public void Traverse(IPushStatement pushStatement) { Contract.Requires(pushStatement != null); if (this.preorderVisitor != null) this.preorderVisitor.Visit(pushStatement); if (this.StopTraversal) return; this.TraverseChildren(pushStatement); if (this.StopTraversal) return; if (this.postorderVisitor != null) this.postorderVisitor.Visit(pushStatement); }
public void Visit(IPushStatement pushStatement) { this.traverser.Traverse(pushStatement); }
/// <summary> /// Rewrites the given push statement. /// </summary> /// <param name="pushStatement"></param> public virtual IStatement Rewrite(IPushStatement pushStatement) { return pushStatement; }
//^ ensures this.path.Count == old(this.path.Count); /// <summary> /// Traverses the given push statement. /// </summary> /// <param name="pushStatement"></param> public virtual void Visit(IPushStatement pushStatement) { if (this.stopTraversal) return; //^ int oldCount = this.path.Count; this.path.Push(pushStatement); this.Visit(pushStatement.ValueToPush); //^ 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(); }
public override void Visit(IPushStatement pushStatement) { if(Process(pushStatement)){visitor.Visit(pushStatement);} base.Visit(pushStatement); }
/// <summary> /// Performs some computation with the given push statement. /// </summary> /// <param name="pushStatement"></param> public override void TraverseChildren(IPushStatement pushStatement) { this.Traverse(pushStatement.ValueToPush); this.lastStatementWasUnconditionalTransfer = false; }
public override void TraverseChildren(IPushStatement pushStatement) { var tok = pushStatement.Token(); var val = pushStatement.ValueToPush; var e = ExpressionFor(val); this.sink.operandStack.Push(e); return; }
public void Visit(IPushStatement pushStatement) { this.result = this.rewriter.Rewrite(pushStatement); }
/// <summary> /// Rewrites the given push statement. /// </summary> /// <param name="pushStatement"></param> public virtual IStatement Rewrite(IPushStatement pushStatement) { var mutablePushStatement = pushStatement as PushStatement; if (mutablePushStatement == null) return pushStatement; this.RewriteChildren(mutablePushStatement); return mutablePushStatement; }
public override IStatement Rewrite(IPushStatement pushStatement) { var depth = this.locals.Count; var t = pushStatement.ValueToPush.Type; var local = this.GetOrCreateLocal(depth, t); this.locals.Push(local); var assignment = new Assignment() { Source = pushStatement.ValueToPush, Target = new TargetExpression(){ Definition = local, Instance = null, Type = t, }, Type = t, }; if (this.inThenBranch) { if (this.thenBranchPushes != null && (t.TypeCode == PrimitiveTypeCode.Int32 || t.TypeCode == PrimitiveTypeCode.Boolean)) { this.thenBranchPushes.Add(depth, assignment); } } else if (this.inElseBranch) { if (this.thenBranchPushes != null) { if (t.TypeCode == PrimitiveTypeCode.Int32) { Contract.Assume(this.thenBranchPushes.ContainsKey(depth)); var a = this.thenBranchPushes[depth]; if (a.Type.TypeCode == PrimitiveTypeCode.Boolean) { // then this should be a push of a boolean, not an int Contract.Assume(pushStatement.ValueToPush is ICompileTimeConstant); var ctc = (ICompileTimeConstant) pushStatement.ValueToPush; var boolLocal = a.Target.Definition as ILocalDefinition; assignment.Target = new TargetExpression() { Definition = boolLocal, Instance = null, Type = this.systemBool, }; assignment.Source = new CompileTimeConstant() { Type = this.systemBool, Value = ((int)ctc.Value) == 0 ? false : true, }; this.locals.Pop(); this.locals.Push(boolLocal); } } else if (t.TypeCode == PrimitiveTypeCode.Boolean) { Contract.Assume(this.thenBranchPushes.ContainsKey(depth)); var a = this.thenBranchPushes[depth]; if (a.Type.TypeCode == PrimitiveTypeCode.Int32) { // then this should have been a push of a boolean, not an int Contract.Assume(a.Source is ICompileTimeConstant); var ctc = (ICompileTimeConstant)a.Source; var boolLocal = a.Target.Definition as ILocalDefinition; Contract.Assume(boolLocal != null); a.Target = new TargetExpression() { Definition = boolLocal, Instance = null, Type = this.systemBool, }; a.Source = new CompileTimeConstant() { Type = this.systemBool, Value = ((int)ctc.Value) == 0 ? false : true, }; } } } } var expressionStatment = new ExpressionStatement() { Expression = assignment, }; return expressionStatment; }
/// <summary> /// Returns a shallow copy of the given push statement. /// </summary> /// <param name="pushStatement"></param> public PushStatement Copy(IPushStatement pushStatement) { Contract.Requires(pushStatement != null); Contract.Ensures(Contract.Result<PushStatement>() != null); return new PushStatement(pushStatement); }
public override void TraverseChildren(IPushStatement pushStatement) { MethodEnter(pushStatement); base.TraverseChildren(pushStatement); MethodExit(); }
/// <summary> /// Returns a deep copy of the given push statement. /// </summary> /// <param name="pushStatement"></param> public PushStatement Copy(IPushStatement pushStatement) { Contract.Requires(pushStatement != null); Contract.Ensures(Contract.Result<PushStatement>() != null); var mutableCopy = this.shallowCopier.Copy(pushStatement); mutableCopy.ValueToPush = this.Copy(mutableCopy.ValueToPush); return mutableCopy; }
/// <summary> /// Performs some computation with the given push statement. /// </summary> /// <param name="pushStatement"></param> public virtual void Visit(IPushStatement pushStatement) { }
public override void TraverseChildren(IPushStatement pushStatement) { this.sourceEmitterOutput.Write("push ", true); this.Traverse(pushStatement.ValueToPush); this.sourceEmitterOutput.WriteLine(";"); }
/// <summary> /// Traverses the children of the push statement. /// </summary> public virtual void TraverseChildren(IPushStatement pushStatement) { Contract.Requires(pushStatement != null); this.TraverseChildren((IStatement)pushStatement); if (this.StopTraversal) return; this.Traverse(pushStatement.ValueToPush); }
/// <summary> /// Performs some computation with the given push statement. /// </summary> public override void Visit(IPushStatement pushStatement) { PushStatement mutablePushStatement = new PushStatement(pushStatement); this.resultStatement = this.myCodeCopier.DeepCopy(mutablePushStatement); }
/// <summary> /// Performs some computation with the given push statement. /// </summary> /// <param name="pushStatement"></param> public virtual void Visit(IPushStatement pushStatement) { this.Visit((IStatement)pushStatement); }
/// <summary> /// Returns a deep copy of the given push statement. /// </summary> /// <param name="pushStatement"></param> public PushStatement Copy(IPushStatement pushStatement) { var mutableCopy = this.shallowCopier.Copy(pushStatement); mutableCopy.ValueToPush = this.Copy(mutableCopy.ValueToPush); return mutableCopy; }
public void Visit(IPushStatement pushStatement) { throw new NotImplementedException(); }
/// <summary> /// Returns a shallow copy of the given push statement. /// </summary> /// <param name="pushStatement"></param> public PushStatement Copy(IPushStatement pushStatement) { return new PushStatement(pushStatement); }
public virtual void onASTElement(IPushStatement pushStatement) { }
/// <summary> /// Visits the specified push statement. /// </summary> /// <param name="pushStatement">The push statement.</param> public override void Visit(IPushStatement pushStatement) { PushStatement mutablePushStatement = pushStatement as PushStatement; if (mutablePushStatement == null) { this.resultStatement = pushStatement; return; } this.resultStatement = this.myCodeMutator.Visit(mutablePushStatement); }