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; }
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); }
public HandlerRewriter() { _leaveResult = Expression.Parameter(typeof(LeaveHandlerData)); _labelScanner = new LabelScanner(); // TODO: can we jump from try into catch? _jumpTable = new List <SwitchCase>(); }
public HandlerRewriter() { _leaveResult = Expression.Parameter(typeof(LeaveHandlerData)); _labelScanner = new LabelScanner(); // TODO: can we jump from try into catch? _jumpTable = new List<SwitchCase>(); }