コード例 #1
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});
       }
 }
コード例 #2
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 });
            }
        }
コード例 #3
0
ファイル: IntPointerCast.cs プロジェクト: meikeric/DotCopter
 protected override IReadable EvaluateToHelper(IReference storage)
 {
     return(inner.EvaluateTo(storage));
 }