コード例 #1
0
            internal void Free(BoundSpillTemp spill)
            {
                FieldSymbol freeField = realizedSpills[spill];

                allocatedFields.Push(freeField.Type, freeField);
                realizedSpills.Remove(spill);
            }
            internal void AllocateField(BoundSpillTemp spill)
            {
                Debug.Assert(!realizedSpills.ContainsKey(spill));

                FieldSymbol field;
                if (!allocatedFields.TryPop(spill.Type, out field))
                {
                    field = F.SynthesizeField(spill.Type, GeneratedNames.SpillTempName(CompilationState.GenerateTempNumber()));
                }

                realizedSpills[spill] = field;
            }
コード例 #3
0
            internal void AllocateField(BoundSpillTemp spill)
            {
                Debug.Assert(!realizedSpills.ContainsKey(spill));

                FieldSymbol field;

                if (!allocatedFields.TryPop(spill.Type, out field))
                {
                    field = F.SynthesizeField(spill.Type, GeneratedNames.SpillTempName(CompilationState.GenerateTempNumber()));
                }

                realizedSpills[spill] = field;
            }
コード例 #4
0
 private BoundStatement GenerateSpillInit(BoundSpillTemp spillTemp)
 {
     if (spillTemp.Expr.Kind == BoundKind.SpillSequence)
     {
         var spill = (BoundSpillSequence)spillTemp.Expr;
         return(F.SpillBlock(
                    spill.Locals,
                    spill.SpillTemps,
                    spill.Statements.Append(
                        F.Assignment(spillTemp, spill.Value))));
     }
     else
     {
         return(F.Assignment(spillTemp, spillTemp.Expr));
     }
 }
コード例 #5
0
 internal FieldSymbol GetField(BoundSpillTemp spill)
 {
     return(realizedSpills[spill]);
 }
コード例 #6
0
 public override BoundNode VisitSpillTemp(BoundSpillTemp node)
 {
     throw Contract.Unreachable;
 }
 private BoundStatement GenerateSpillInit(BoundSpillTemp spillTemp)
 {
     if (spillTemp.Expr.Kind == BoundKind.SpillSequence)
     {
         var spill = (BoundSpillSequence)spillTemp.Expr;
         return F.SpillBlock(
             spill.Locals,
             spill.SpillTemps,
             spill.Statements.Append(
                 F.Assignment(spillTemp, spill.Value)));
     }
     else
     {
         return F.Assignment(spillTemp, spillTemp.Expr);
     }
 }
コード例 #8
0
 public override BoundNode VisitSpillTemp(BoundSpillTemp node)
 {
     return(F.Field(F.This(), spillFieldAllocator.GetField(node)));
 }
 public override BoundNode VisitSpillTemp(BoundSpillTemp node)
 {
     return F.Field(F.This(), spillFieldAllocator.GetField(node));
 }
 internal void Free(BoundSpillTemp spill)
 {
     FieldSymbol freeField = realizedSpills[spill];
     allocatedFields.Push(freeField.Type, freeField);
     realizedSpills.Remove(spill);
 }
 internal FieldSymbol GetField(BoundSpillTemp spill)
 {
     return realizedSpills[spill];
 }