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

        inblock = ordinary;
        scope = Object.create(scope);
        nonadjacent(token, nexttoken);
        t = nexttoken;

        if (nexttoken.id === '{') {
            advance('{');
            if (nexttoken.id !== '}' || token.line !== nexttoken.line) {
                indent += option.indent;
                while (!ordinary && nexttoken.from > indent) {
                    indent += option.indent;
                }
                if (!ordinary && !use_strict() && !m && option.strict &&
                        funct['(context)']['(global)']) {
                    warning("Missing \"use strict\" statement.");
                }
                a = statements();
                strict_mode = m;
                indent -= option.indent;
                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;
            a = [statement()];
            noreach = false;
        }
        funct['(verb)'] = null;
        scope = s;
        inblock = b;
        if (ordinary && option.noempty && (!a || a.length === 0)) {
            warning("Empty block.");
        }
        return a;
    }
function block(ordinary, stmt) {
        var a,
            b = inblock,
            old_indent = indent,
            m = strict_mode,
            s = scope,
            t;

        inblock = ordinary;
        scope = Object.create(scope);
        nonadjacent(token, nexttoken);
        t = nexttoken;

        if (nexttoken.id === '{') {
            advance('{');
            if (nexttoken.id !== '}' || token.line !== nexttoken.line) {
                indent += option.indent;
                while (!ordinary && nexttoken.from > indent) {
                    indent += option.indent;
                }
                if (!ordinary && !use_strict() && !m && option.strict &&
                        funct['(context)']['(global)']) {
                    warning("Missing \"use strict\" statement.");
                }
                a = statements();
                strict_mode = m;
                indent -= option.indent;
                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;
            a = [statement()];
            noreach = false;
        }
        funct['(verb)'] = null;
        scope = s;
        inblock = b;
        if (ordinary && option.noempty && (!a || a.length === 0)) {
            warning("Empty block.");
        }
        return a;
    }
function block ( ordinary , stmt ) { var a , b = inblock , old_indent = indent , m = strict_mode , s = scope , t ; inblock = ordinary ; scope = Object . create ( scope ) ; nonadjacent ( token , nexttoken ) ; t = nexttoken ; if ( nexttoken . id === '{' ) { advance ( '{' ) ; if ( nexttoken . id !== '}' || token . line !== nexttoken . line ) { indent += option . indent ; while ( ! ordinary && nexttoken . from > indent ) { indent += option . indent ; } if ( ! ordinary && ! use_strict ( ) && ! m && option . strict && funct [ '(context)' ] [ '(global)' ] ) { warning ( "Missing \"use strict\" statement." ) ; } a = statements ( ) ; strict_mode = m ; indent -= option . indent ; 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 ; a = [ statement ( ) ] ; noreach = false ; } funct [ '(verb)' ] = null ; 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).
/ * Parses a single block . A block is a sequence of statements wrapped in braces .