nl_tokens: 12 Statements
pl_tokens: 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 ) && <mask> ( ':' ) ) { 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 ) ) ; }