JsModule {
bom_token: missing (optional),
interpreter_token: missing (optional),
directives: JsDirectiveList [],
items: JsModuleItemList [
JsFunctionDeclaration {
async_token: missing (optional),
function_token: FUNCTION_KW@0..9 "function" [] [Whitespace(" ")],
star_token: missing (optional),
id: JsIdentifierBinding {
name_token: IDENT@9..12 "foo" [] [],
},
type_parameters: missing (optional),
parameters: JsParameters {
l_paren_token: L_PAREN@12..13 "(" [] [],
items: JsParameterList [],
r_paren_token: R_PAREN@13..15 ")" [] [Whitespace(" ")],
},
return_type_annotation: missing (optional),
body: JsFunctionBody {
l_curly_token: L_CURLY@15..17 "{" [] [Whitespace(" ")],
directives: JsDirectiveList [],
statements: JsStatementList [
JsBogusStatement {
items: [
BREAK_KW@17..22 "break" [] [],
SEMICOLON@22..24 ";" [] [Whitespace(" ")],
],
},
],
r_curly_token: R_CURLY@24..25 "}" [] [],
},
},
JsWhileStatement {
while_token: WHILE_KW@25..32 "while" [Newline("\n")] [Whitespace(" ")],
l_paren_token: L_PAREN@32..33 "(" [] [],
test: JsBooleanLiteralExpression {
value_token: TRUE_KW@33..37 "true" [] [],
},
r_paren_token: R_PAREN@37..39 ")" [] [Whitespace(" ")],
body: JsBlockStatement {
l_curly_token: L_CURLY@39..40 "{" [] [],
statements: JsStatementList [
JsBogusStatement {
items: [
BREAK_KW@40..49 "break" [Newline("\n"), Whitespace(" ")] [Whitespace(" ")],
JsLabel {
value_token: IDENT@49..52 "foo" [] [],
},
SEMICOLON@52..53 ";" [] [],
],
},
],
r_curly_token: R_CURLY@53..55 "}" [Newline("\n")] [],
},
},
],
eof_token: EOF@55..56 "" [Newline("\n")] [],
}
0: JS_MODULE@0..56
0: (empty)
1: (empty)
2: JS_DIRECTIVE_LIST@0..0
3: JS_MODULE_ITEM_LIST@0..55
0: JS_FUNCTION_DECLARATION@0..25
0: (empty)
1: FUNCTION_KW@0..9 "function" [] [Whitespace(" ")]
2: (empty)
3: JS_IDENTIFIER_BINDING@9..12
0: IDENT@9..12 "foo" [] []
4: (empty)
5: JS_PARAMETERS@12..15
0: L_PAREN@12..13 "(" [] []
1: JS_PARAMETER_LIST@13..13
2: R_PAREN@13..15 ")" [] [Whitespace(" ")]
6: (empty)
7: JS_FUNCTION_BODY@15..25
0: L_CURLY@15..17 "{" [] [Whitespace(" ")]
1: JS_DIRECTIVE_LIST@17..17
2: JS_STATEMENT_LIST@17..24
0: JS_BOGUS_STATEMENT@17..24
0: BREAK_KW@17..22 "break" [] []
1: SEMICOLON@22..24 ";" [] [Whitespace(" ")]
3: R_CURLY@24..25 "}" [] []
1: JS_WHILE_STATEMENT@25..55
0: WHILE_KW@25..32 "while" [Newline("\n")] [Whitespace(" ")]
1: L_PAREN@32..33 "(" [] []
2: JS_BOOLEAN_LITERAL_EXPRESSION@33..37
0: TRUE_KW@33..37 "true" [] []
3: R_PAREN@37..39 ")" [] [Whitespace(" ")]
4: JS_BLOCK_STATEMENT@39..55
0: L_CURLY@39..40 "{" [] []
1: JS_STATEMENT_LIST@40..53
0: JS_BOGUS_STATEMENT@40..53
0: BREAK_KW@40..49 "break" [Newline("\n"), Whitespace(" ")] [Whitespace(" ")]
1: JS_LABEL@49..52
0: IDENT@49..52 "foo" [] []
2: SEMICOLON@52..53 ";" [] []
2: R_CURLY@53..55 "}" [Newline("\n")] []
4: EOF@55..56 "" [Newline("\n")] []
--
break_stmt.js:1:18 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× A `break` statement can only be used within an enclosing iteration or switch statement.
> 1 │ function foo() { break; }
│ ^^^^^
2 │ while (true) {
3 │ break foo;
--
break_stmt.js:3:9 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Use of undefined statement label `foo`
1 │ function foo() { break; }
2 │ while (true) {
> 3 │ break foo;
│ ^^^
4 │ }
5 │
i This label is used, but it is never defined
--
function foo() { break; }
while (true) {
break foo;
}