pakmanaged.js
function parseStatement() {
            var type = lookahead.type,
                marker,
                expr,
                labeledBody;
    
            if (type === Token.EOF) {
                throwUnexpected(lookahead);
            }
    
            if (type === Token.Punctuator) {
                switch (lookahead.value) {
                case ';':
                    return parseEmptyStatement();
                case '{':
                    return parseBlock();
                case '(':
                    return parseExpressionStatement();
                default:
                    break;
                }
            }
    
            if (type === Token.Keyword) {
                switch (lookahead.value) {
                case 'break':
                    return parseBreakStatement();
                case 'continue':
                    return parseContinueStatement();
                case 'debugger':
                    return parseDebuggerStatement();
                case 'do':
                    return parseDoWhileStatement();
                case 'for':
                    return parseForStatement();
                case 'function':
                    return parseFunctionDeclaration();
                case 'class':
                    return parseClassDeclaration();
                case 'if':
                    return parseIfStatement();
                case 'return':
                    return parseReturnStatement();
                case 'switch':
                    return parseSwitchStatement();
                case 'throw':
                    return parseThrowStatement();
                case 'try':
                    return parseTryStatement();
                case 'var':
                    return parseVariableStatement();
                case 'while':
                    return parseWhileStatement();
                case 'with':
                    return parseWithStatement();
                default:
                    break;
                }
            }
    
            if (matchAsyncFuncExprOrDecl()) {
                return parseFunctionDeclaration();
            }
    
            marker = markerCreate();
            expr = parseExpression();
    
            // 12.12 Labelled Statements
            if ((expr.type === Syntax.Identifier) && match(':')) {
                lex();
    
                if (state.labelSet.has(expr.name)) {
                    throwError({}, Messages.Redeclaration, 'Label', expr.name);
                }
    
                state.labelSet.set(expr.name, true);
                labeledBody = parseStatement();
                state.labelSet.delete(expr.name);
                return markerApply(marker, delegate.createLabeledStatement(expr, labeledBody));
            }
    
            consumeSemicolon();
    
            return markerApply(marker, delegate.createExpressionStatement(expr));
        }
function parseStatement() {
            var type = lookahead.type,
                marker,
                expr,
                labeledBody;
    
            if (type === Token.EOF) {
                throwUnexpected(lookahead);
            }
    
            if (type === Token.Punctuator) {
                switch (lookahead.value) {
                case ';':
                    return parseEmptyStatement();
                case '{':
                    return parseBlock();
                case '(':
                    return parseExpressionStatement();
                default:
                    break;
                }
            }
    
            if (type === Token.Keyword) {
                switch (lookahead.value) {
                case 'break':
                    return parseBreakStatement();
                case 'continue':
                    return parseContinueStatement();
                case 'debugger':
                    return parseDebuggerStatement();
                case 'do':
                    return parseDoWhileStatement();
                case 'for':
                    return parseForStatement();
                case 'function':
                    return parseFunctionDeclaration();
                case 'class':
                    return parseClassDeclaration();
                case 'if':
                    return parseIfStatement();
                case 'return':
                    return parseReturnStatement();
                case 'switch':
                    return parseSwitchStatement();
                case 'throw':
                    return parseThrowStatement();
                case 'try':
                    return parseTryStatement();
                case 'var':
                    return parseVariableStatement();
                case 'while':
                    return parseWhileStatement();
                case 'with':
                    return parseWithStatement();
                default:
                    break;
                }
            }
    
            if (matchAsyncFuncExprOrDecl()) {
                return parseFunctionDeclaration();
            }
    
            marker = markerCreate();
            expr = parseExpression();
    
            // 12.12 Labelled Statements
            if ((expr.type === Syntax.Identifier) && match(':')) {
                lex();
    
                if (state.labelSet.has(expr.name)) {
                    throwError({}, Messages.Redeclaration, 'Label', expr.name);
                }
    
                state.labelSet.set(expr.name, true);
                labeledBody = parseStatement();
                state.labelSet.delete(expr.name);
                return markerApply(marker, delegate.createLabeledStatement(expr, labeledBody));
            }
    
            consumeSemicolon();
    
            return markerApply(marker, delegate.createExpressionStatement(expr));
        }
12 Statements