internal Dictionary<int, ILabeledStatement> GetStateEntries(BlockStatement body) {
BlockStatement blockStatement = body;
stateEntries = new Dictionary<int, ILabeledStatement>();
LabeledStatement initialLabel = new LabeledStatement() {
Label = this.host.NameTable.GetNameFor("Label"+ this.stateNumber++), Statement = new EmptyStatement()
};
// O(n), but happen only once.
blockStatement.Statements.Insert(0, initialLabel);
stateEntries.Add(0, initialLabel);
this.stateNumber = 1;
this.RewriteChildren(blockStatement);
this.stateNumber = 0;
Dictionary<int, ILabeledStatement> result = stateEntries;
stateEntries = null;
return result;
}