mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-20 11:36:10 +00:00
LibJS: Implement null and undefined literals
This commit is contained in:
parent
7aad10d984
commit
cfd710eb31
Notes:
sideshowbarker
2024-07-19 08:16:59 +09:00
Author: https://github.com/0xtechnobabble Commit: https://github.com/SerenityOS/serenity/commit/cfd710eb31c Pull-request: https://github.com/SerenityOS/serenity/pull/1470 Reviewed-by: https://github.com/awesomekling Reviewed-by: https://github.com/oriko1010
6 changed files with 61 additions and 0 deletions
|
@ -349,6 +349,18 @@ void BooleanLiteral::dump(int indent) const
|
|||
printf("BooleanLiteral %s\n", m_value ? "true" : "false");
|
||||
}
|
||||
|
||||
void UndefinedLiteral::dump(int indent) const
|
||||
{
|
||||
print_indent(indent);
|
||||
printf("undefined\n");
|
||||
}
|
||||
|
||||
void NullLiteral::dump(int indent) const
|
||||
{
|
||||
print_indent(indent);
|
||||
printf("null\n");
|
||||
}
|
||||
|
||||
void FunctionDeclaration::dump(int indent) const
|
||||
{
|
||||
bool first_time = true;
|
||||
|
@ -617,4 +629,14 @@ Value BooleanLiteral::execute(Interpreter&) const
|
|||
return Value(m_value);
|
||||
}
|
||||
|
||||
Value UndefinedLiteral::execute(Interpreter&) const
|
||||
{
|
||||
return js_undefined();
|
||||
}
|
||||
|
||||
Value NullLiteral::execute(Interpreter&) const
|
||||
{
|
||||
return js_null();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -380,6 +380,34 @@ private:
|
|||
String m_value;
|
||||
};
|
||||
|
||||
class NullLiteral final : public Literal {
|
||||
public:
|
||||
explicit NullLiteral()
|
||||
{
|
||||
}
|
||||
|
||||
virtual Value execute(Interpreter&) const override;
|
||||
virtual void dump(int indent) const override;
|
||||
|
||||
private:
|
||||
virtual const char* class_name() const override { return "NullLiteral"; }
|
||||
|
||||
String m_value;
|
||||
};
|
||||
|
||||
class UndefinedLiteral final : public Literal {
|
||||
public:
|
||||
explicit UndefinedLiteral()
|
||||
{
|
||||
}
|
||||
|
||||
virtual Value execute(Interpreter&) const override;
|
||||
virtual void dump(int indent) const override;
|
||||
|
||||
private:
|
||||
virtual const char* class_name() const override { return "UndefinedLiteral"; }
|
||||
};
|
||||
|
||||
class Identifier final : public Expression {
|
||||
public:
|
||||
explicit Identifier(String string)
|
||||
|
|
|
@ -60,6 +60,7 @@ Lexer::Lexer(StringView source)
|
|||
s_keywords.set("let", TokenType::Let);
|
||||
s_keywords.set("new", TokenType::New);
|
||||
s_keywords.set("null", TokenType::NullLiteral);
|
||||
s_keywords.set("undefined", TokenType::UndefinedLiteral);
|
||||
s_keywords.set("return", TokenType::Return);
|
||||
s_keywords.set("true", TokenType::BoolLiteral);
|
||||
s_keywords.set("try", TokenType::Try);
|
||||
|
|
|
@ -223,6 +223,12 @@ NonnullOwnPtr<Expression> Parser::parse_primary_expression()
|
|||
return make<BooleanLiteral>(consume().bool_value());
|
||||
case TokenType::StringLiteral:
|
||||
return make<StringLiteral>(consume().string_value());
|
||||
case TokenType::NullLiteral:
|
||||
consume();
|
||||
return make<NullLiteral>();
|
||||
case TokenType::UndefinedLiteral:
|
||||
consume();
|
||||
return make<UndefinedLiteral>();
|
||||
case TokenType::CurlyOpen:
|
||||
return parse_object_expression();
|
||||
default:
|
||||
|
@ -498,6 +504,7 @@ bool Parser::match_expression() const
|
|||
return type == TokenType::BoolLiteral
|
||||
|| type == TokenType::NumericLiteral
|
||||
|| type == TokenType::StringLiteral
|
||||
|| type == TokenType::UndefinedLiteral
|
||||
|| type == TokenType::NullLiteral
|
||||
|| type == TokenType::Identifier
|
||||
|| type == TokenType::New
|
||||
|
|
|
@ -183,6 +183,8 @@ const char* Token::name(TokenType type)
|
|||
return "Try";
|
||||
case TokenType::Typeof:
|
||||
return "Typeof";
|
||||
case TokenType::UndefinedLiteral:
|
||||
return "UndefinedLiteral";
|
||||
case TokenType::UnsignedShiftRight:
|
||||
return "UnsignedShiftRight";
|
||||
case TokenType::UnsignedShiftRightEquals:
|
||||
|
|
|
@ -107,6 +107,7 @@ enum class TokenType {
|
|||
Tilde,
|
||||
Try,
|
||||
Typeof,
|
||||
UndefinedLiteral,
|
||||
UnsignedShiftRight,
|
||||
UnsignedShiftRightEquals,
|
||||
UnterminatedStringLiteral,
|
||||
|
|
Loading…
Add table
Reference in a new issue