コード例 #1
0
 protected virtual IReference DeclareHelper(string name, IReference variable, Expression optionalInitialValue)
 {
     FuncBuilder.Instance.BindLocalVariableToRepresentation(variable, name);
       if(!ReferenceEquals(optionalInitialValue, null)) {
     Assignment.AssignAny(variable, optionalInitialValue);
       }
       return variable;
 }
コード例 #2
0
ファイル: Assignment.cs プロジェクト: meikeric/DotCopter
 public static void AssignAny(IReference lhs, Expression rhs)
 {
     var f=FuncBuilder.Instance;
       using(f.OpenScope("assign")) {
     if(f.CanProveIsNeverRead(lhs)) {
       rhs.EvaluateForItsSideEffects();
     } else {
       SpecialAssignAny(lhs, rhs);
     }
       }
 }
コード例 #3
0
ファイル: Assignment.cs プロジェクト: meikeric/DotCopter
 public static void SpecialAssignAny(IReference lhs, Expression rhs)
 {
     var f=FuncBuilder.Instance;
       var lhsWasLivePriorToThisAssignment=f.IsLive(lhs);
       var rhsReadable=rhs.EvaluateTo(lhs);
       if(!ReferenceEquals(lhs, rhsReadable)) {
     var lhsReg=lhs.ProposeRegisterOrScratch0();
     var rhsReg=rhsReadable.ToRegister(lhsReg);
     lhs.FromRegister(rhsReg);
       }
       //Don't decide that a variable is live just because it was referenced (or it was used as temporary storage)
       //in its very-own assignment.
       if(!lhsWasLivePriorToThisAssignment) {
     f.UndoNoteRead(new[] {lhs});
       }
 }
コード例 #4
0
 public IntPointerCast(Expression inner)
 {
     this.inner=inner;
 }
コード例 #5
0
 public ArrayElement(string name, ExpressionType expressionType, Expression array, Expression index)
     : base(name, expressionType)
 {
     this.array=array;
       this.index=index;
 }
コード例 #6
0
ファイル: IntCast.cs プロジェクト: brandongrossutti/DotCopter
 public IntCast(Expression inner)
 {
     this.inner=inner;
 }
コード例 #7
0
 public FuncPointerCast(Expression inner)
 {
     this.inner=inner;
 }
コード例 #8
0
ファイル: FuncPointerCast.cs プロジェクト: meikeric/DotCopter
 public FuncPointerCast(Expression inner)
 {
     this.inner = inner;
 }
コード例 #9
0
 public IReference ForLhs(Expression rhs)
 {
     return rhs.HasConflictWith(storage) ? temp : storage;
 }