mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 08:48:11 +00:00
LibJS: Replace some parser assertions by syntax errors
When parsing JavaScript, we can get pretty much any sequnce of tokens, and we shouldn't crash if it's not something that we normally expect. Instead, emit syntax errors.
This commit is contained in:
parent
2fbc37befc
commit
600fcd2d46
1 changed files with 17 additions and 8 deletions
|
@ -225,9 +225,12 @@ NonnullRefPtr<Program> Parser::parse_program()
|
|||
consume();
|
||||
}
|
||||
}
|
||||
ASSERT(m_parser_state.m_var_scopes.size() == 1);
|
||||
program->add_variables(m_parser_state.m_var_scopes.last());
|
||||
program->add_variables(m_parser_state.m_let_scopes.last());
|
||||
if (m_parser_state.m_var_scopes.size() == 1) {
|
||||
program->add_variables(m_parser_state.m_var_scopes.last());
|
||||
program->add_variables(m_parser_state.m_let_scopes.last());
|
||||
} else {
|
||||
syntax_error("Unclosed scope");
|
||||
}
|
||||
return program;
|
||||
}
|
||||
|
||||
|
@ -620,13 +623,19 @@ NonnullRefPtr<ObjectExpression> Parser::parse_object_expression()
|
|||
|
||||
properties.append(create_ast_node<ObjectProperty>(*property_name, function, property_type));
|
||||
} else if (match(TokenType::Colon)) {
|
||||
if (!property_name) {
|
||||
syntax_error("Expected a property name");
|
||||
skip_to_next_property();
|
||||
continue;
|
||||
}
|
||||
consume();
|
||||
ASSERT(property_name);
|
||||
properties.append(create_ast_node<ObjectProperty>(*property_name, parse_expression(2), property_type));
|
||||
} else {
|
||||
ASSERT(property_name);
|
||||
ASSERT(property_value);
|
||||
} else if (property_name && property_value) {
|
||||
properties.append(create_ast_node<ObjectProperty>(*property_name, *property_value, property_type));
|
||||
} else {
|
||||
syntax_error("Expected a property");
|
||||
skip_to_next_property();
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!match(TokenType::Comma))
|
||||
|
@ -1342,7 +1351,7 @@ NonnullRefPtr<Statement> Parser::parse_for_statement()
|
|||
if (match_for_in_of())
|
||||
return parse_for_in_of_statement(*init);
|
||||
} else {
|
||||
ASSERT_NOT_REACHED();
|
||||
syntax_error("Unexpected token in for loop");
|
||||
}
|
||||
}
|
||||
consume(TokenType::Semicolon);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue