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; }
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)); } }
internal FieldSymbol GetField(BoundSpillTemp spill) { return(realizedSpills[spill]); }
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); } }
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 FieldSymbol GetField(BoundSpillTemp spill) { return realizedSpills[spill]; }