private void ComputeTryBlockStartAndEndInfo(Method method) { foreach (Handler handler in CodeProvider.GetTryBlocks(method)) { if (CodeProvider.IsFilterHandler(handler)) { AddTargetLabel(CodeProvider.FilterExpressionStart(handler)); } AddTargetLabel(CodeProvider.HandlerStart(handler)); AddTargetLabel(CodeProvider.HandlerEnd(handler)); AddTryStart(handler); AddTryEnd(handler); AddHandlerEnd(handler); this.handler_starting_at.Add(CodeProvider.HandlerStart(handler), handler); } }
private void AddHandlerEnd(Handler handler) { if (!IsFaultOrFinally(handler)) { return; } Label handlerEnd = CodeProvider.HandlerEnd(handler); Queue <Handler> queue; this.subroutine_handler_end_list.TryGetValue(handlerEnd, out queue); if (queue == null) { queue = new Queue <Handler> (); this.subroutine_handler_end_list [handlerEnd] = queue; } queue.Enqueue(handler); AddTargetLabel(handlerEnd); }