コード例 #1
0
        public static Expression Rewrite(Expression expression, out LabelTarget exitLabel, out ParameterExpression pendingBranch, out IDictionary<LabelTarget, LeaveLabelData> leaveLabels)
        {
            pendingBranch = Expression.Parameter(typeof(int), "__pendingBranch");
            exitLabel = Expression.Label("__leave");

            var labelScanner = new LabelScanner();
            labelScanner.Visit(expression);

            var gotoScanner = new GotoScanner(labelScanner.Labels, exitLabel, pendingBranch);

            var res = gotoScanner.Visit(expression);

            leaveLabels = gotoScanner.LeaveLabels;
            return res;
        }
コード例 #2
0
        public static Expression Rewrite(Expression expression, out LabelTarget exitLabel, out ParameterExpression pendingBranch, out IDictionary <LabelTarget, LeaveLabelData> leaveLabels)
        {
            pendingBranch = Expression.Parameter(typeof(int), "__pendingBranch");
            exitLabel     = Expression.Label("__leave");

            var labelScanner = new LabelScanner();

            labelScanner.Visit(expression);

            var gotoScanner = new GotoScanner(labelScanner.Labels, exitLabel, pendingBranch);

            var res = gotoScanner.Visit(expression);

            leaveLabels = gotoScanner.LeaveLabels;
            return(res);
        }
コード例 #3
0
 public HandlerRewriter()
 {
     _leaveResult  = Expression.Parameter(typeof(LeaveHandlerData));
     _labelScanner = new LabelScanner(); // TODO: can we jump from try into catch?
     _jumpTable    = new List <SwitchCase>();
 }
コード例 #4
0
 public HandlerRewriter()
 {
     _leaveResult = Expression.Parameter(typeof(LeaveHandlerData));
     _labelScanner = new LabelScanner(); // TODO: can we jump from try into catch?
     _jumpTable = new List<SwitchCase>();
 }