public Object visit(ExceptionGuardStatement node) {
            Statement guarded = node.getGuarded();
            if (guarded == null) {
                return null;
            }
            Statement replacement = node.getReplacement();

            if (guarded.isReturn()) {
                if (replacement == null || !replacement.isReturn()) {
                    // No replacement return statement, so exception shouldn't
                    // be caught.
                    generate(guarded);
                    return null;
                }
            }

            Label tryStart = mBuilder.createLabel().setLocation();
            generate(guarded);
            Label tryEnd = mBuilder.createLabel().setLocation();

            if (mExceptionGuardHandlers == null) {
                mExceptionGuardHandlers = new ArrayList<GuardHandler>();
            }

            mExceptionGuardHandlers.add
                (new GuardHandler(tryStart, tryEnd, replacement));

            return null;
        }