public Object visit(ForeachStatement node) {
            // Push a label for this foreach loop. Break statement will
            // us this label to break out of loop.
            Label breakLoc = mBuilder.createLabel();
            mBreakInfoStack.add(new BreakAndContinueLabels(breakLoc));

            if (node.getEndRange() == null) {
                if (node.getRange().getType().getObjectClass().isArray()) {
                    generateForeachArray(node);
                }
                else {
                    generateForeachIterator(node);
                }
            }
            else {
                generateForeachRange(node);
            }

            mBreakInfoStack.remove(mBreakInfoStack.size() - 1);
            breakLoc.setLocation();

            return null;
        }