function block(ordinary, stmt, isfunc) {
        var a,
            b = inblock,
            old_indent = indent,
            m,
            s = scope,
            t,
            line,
            d;

        inblock = ordinary;
        if (!ordinary || !option.funcscope) scope = Object.create(scope);
        nonadjacent(token, nexttoken);
        t = nexttoken;

        if (nexttoken.id === '{') {
            advance('{');
            line = token.line;
            if (nexttoken.id !== '}') {
                indent += option.indent;
                while (!ordinary && nexttoken.from > indent) {
                    indent += option.indent;
                }

                if (isfunc) {
                    m = {};
                    for (d in directive) {
                        if (is_own(directive, d)) {
                            m[d] = directive[d];
                        }
                    }
                    directives();

                    if (option.strict && funct['(context)']['(global)']) {
                        if (!m["use strict"] && !directive["use strict"]) {
                            warning("Missing \"use strict\" statement.");
                        }
                    }
                }

                a = statements(line);

                if (isfunc) {
                    directive = m;
                }

                indent -= option.indent;
                if (line !== nexttoken.line) {
                    indentation();
                }
            } else if (line !== nexttoken.line) {
                indentation();
            }
            advance('}', t);
            indent = old_indent;
        } else if (!ordinary) {
            error("Expected '{a}' and instead saw '{b}'.",
                  nexttoken, '{', nexttoken.value);
        } else {
            if (!stmt || option.curly)
                warning("Expected '{a}' and instead saw '{b}'.",
                        nexttoken, '{', nexttoken.value);

            noreach = true;
            indent += option.indent;
            // test indentation only if statement is in new line
            a = [statement(nexttoken.line === token.line)];
            indent -= option.indent;
            noreach = false;
        }
        funct['(verb)'] = null;
        if (!ordinary || !option.funcscope) scope = s;
        inblock = b;
        if (ordinary && option.noempty && (!a || a.length === 0)) {
            warning("Empty block.");
        }
        return a;
    }
function block(ordinary, stmt, isfunc) {
        var a,
            b = inblock,
            old_indent = indent,
            m,
            s = scope,
            t,
            line,
            d;

        inblock = ordinary;
        if (!ordinary || !option.funcscope) scope = Object.create(scope);
        nonadjacent(token, nexttoken);
        t = nexttoken;

        if (nexttoken.id === '{') {
            advance('{');
            line = token.line;
            if (nexttoken.id !== '}') {
                indent += option.indent;
                while (!ordinary && nexttoken.from > indent) {
                    indent += option.indent;
                }

                if (isfunc) {
                    m = {};
                    for (d in directive) {
                        if (is_own(directive, d)) {
                            m[d] = directive[d];
                        }
                    }
                    directives();

                    if (option.strict && funct['(context)']['(global)']) {
                        if (!m["use strict"] && !directive["use strict"]) {
                            warning("Missing \"use strict\" statement.");
                        }
                    }
                }

                a = statements(line);

                if (isfunc) {
                    directive = m;
                }

                indent -= option.indent;
                if (line !== nexttoken.line) {
                    indentation();
                }
            } else if (line !== nexttoken.line) {
                indentation();
            }
            advance('}', t);
            indent = old_indent;
        } else if (!ordinary) {
            error("Expected '{a}' and instead saw '{b}'.",
                  nexttoken, '{', nexttoken.value);
        } else {
            if (!stmt || option.curly)
                warning("Expected '{a}' and instead saw '{b}'.",
                        nexttoken, '{', nexttoken.value);

            noreach = true;
            indent += option.indent;
            
            a = [statement(nexttoken.line === token.line)];
            indent -= option.indent;
            noreach = false;
        }
        funct['(verb)'] = null;
        if (!ordinary || !option.funcscope) scope = s;
        inblock = b;
        if (ordinary && option.noempty && (!a || a.length === 0)) {
            warning("Empty block.");
        }
        return a;
    }
function block ( ordinary , stmt , isfunc ) { var a , b = inblock , old_indent = indent , m , s = scope , t , line , d ; inblock = ordinary ; if ( ! ordinary || ! option . funcscope ) scope = Object . create ( scope ) ; nonadjacent ( token , nexttoken ) ; t = nexttoken ; if ( nexttoken . id === '{' ) { advance ( '{' ) ; line = token . line ; if ( nexttoken . id !== '}' ) { indent += option . indent ; while ( ! ordinary && nexttoken . from > indent ) { indent += option . indent ; } if ( isfunc ) { m = { } ; for ( d in directive ) { if ( is_own ( directive , d ) ) { m [ d ] = directive [ d ] ; } } directives ( ) ; if ( option . strict && funct [ '(context)' ] [ '(global)' ] ) { if ( ! m [ "use strict" ] && ! directive [ "use strict" ] ) { warning ( "Missing \"use strict\" statement." ) ; } } } a = statements ( line ) ; if ( isfunc ) { directive = m ; } indent -= option . indent ; if ( line !== nexttoken . line ) { indentation ( ) ; } } else if ( line !== nexttoken . line ) { indentation ( ) ; } advance ( '}' , t ) ; indent = old_indent ; } else if ( ! ordinary ) { error ( "Expected '{a}' and instead saw '{b}'." , nexttoken , '{' , nexttoken . value ) ; } else { if ( ! stmt || option . curly ) warning ( "Expected '{a}' and instead saw '{b}'." , nexttoken , '{' , nexttoken . value ) ; noreach = true ; indent += option . indent ; // test indentation only if statement is in new line a = [ statement ( nexttoken . line === token . line ) ] ; indent -= option . indent ; noreach = false ; } funct [ '(verb)' ] = null ; if ( ! ordinary || ! option . funcscope ) scope = s ; inblock = b ; if ( ordinary && option . noempty && ( ! a || a . length === 0 ) ) { warning ( "Empty block." ) ; } return a ; }
/*
Parses a single block. A block is a sequence of statements wrapped in
braces.

ordinary - true for everything but function bodies and try blocks.
stmt     - true if block can be a single statement (e.g. in if/for/while).
isfunc   - true if block is a function body
/ * Parses a single block . A block is a sequence of statements wrapped in braces .