private Node parseFunctionBody(String name) throws IOException
    {
        ++nestingOfFunction;
        Node pn = nf.createBlock(ts.getLineno());
        if (name != null && name.trim().length() > 0) {
            decompiler.addName("document.pushFunctionInfo('" + name + "', '" + sourceURI + "', " + ts.getLineno() + ");");
        }
        else {
            decompiler.addName("document.pushFunctionInfo('{anonymous}', '" + sourceURI + "', " + ts.getLineno() + ");");
        }
        try {
            bodyLoop: for (;;) {
                Node n;
                int tt = peekToken();
                switch (tt) {
                case Token.ERROR:
                case Token.EOF:
                case Token.RC:
                    break bodyLoop;

                case Token.FUNCTION:
                    consumeToken();
                    n = function(FunctionNode.FUNCTION_STATEMENT);
                    break;
                default:

                    n = statement();
                    break;
                }
                nf.addChildToBack(pn, n);
            }
        }
        catch (ParserException e) {
            // Ignore it
        }
        finally {
            --nestingOfFunction;
        }

        return pn;
    }