示例#1
0
 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);
     }
 }
示例#2
0
        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);
        }