mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 14:48:14 +00:00
LibJS: Implement basic support for the "delete" operator
It turns out "delete" is actually a unary op :) This patch implements deletion of object properties, it doesn't yet work for casually deleting properties from the global object. When deleting a property from an object, we switch that object to having a unique shape, no longer sharing shapes with others. Once an object has a unique shape, it no longer needs to care about shape transitions.
This commit is contained in:
parent
1617be1e6f
commit
f897c41092
9 changed files with 190 additions and 8 deletions
|
@ -187,6 +187,7 @@ Associativity Parser::operator_associativity(TokenType type) const
|
|||
case TokenType::ExclamationMarkEqualsEquals:
|
||||
case TokenType::Typeof:
|
||||
case TokenType::Void:
|
||||
case TokenType::Delete:
|
||||
case TokenType::Ampersand:
|
||||
case TokenType::Caret:
|
||||
case TokenType::Pipe:
|
||||
|
@ -425,6 +426,9 @@ NonnullRefPtr<Expression> Parser::parse_unary_prefixed_expression()
|
|||
case TokenType::Void:
|
||||
consume();
|
||||
return create_ast_node<UnaryExpression>(UnaryOp::Void, parse_expression(precedence, associativity));
|
||||
case TokenType::Delete:
|
||||
consume();
|
||||
return create_ast_node<UnaryExpression>(UnaryOp::Delete, parse_expression(precedence, associativity));
|
||||
default:
|
||||
m_parser_state.m_has_errors = true;
|
||||
expected("primary expression (missing switch case)");
|
||||
|
@ -1059,7 +1063,8 @@ bool Parser::match_unary_prefixed_expression() const
|
|||
|| type == TokenType::Plus
|
||||
|| type == TokenType::Minus
|
||||
|| type == TokenType::Typeof
|
||||
|| type == TokenType::Void;
|
||||
|| type == TokenType::Void
|
||||
|| type == TokenType::Delete;
|
||||
}
|
||||
|
||||
bool Parser::match_secondary_expression() const
|
||||
|
@ -1114,7 +1119,6 @@ bool Parser::match_statement() const
|
|||
|| type == TokenType::Return
|
||||
|| type == TokenType::Let
|
||||
|| type == TokenType::Class
|
||||
|| type == TokenType::Delete
|
||||
|| type == TokenType::Do
|
||||
|| type == TokenType::If
|
||||
|| type == TokenType::Throw
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue