JSSpecCompiler: Parse "the *this* value" in expressions
This commit is contained in:
parent
ddf26a768c
commit
3e6a07154b
Notes:
sideshowbarker
2024-07-17 07:09:53 +09:00
Author: https://github.com/DanShaders Commit: https://github.com/SerenityOS/serenity/commit/3e6a07154b Pull-request: https://github.com/SerenityOS/serenity/pull/23123 Reviewed-by: https://github.com/ADKaster ✅
4 changed files with 39 additions and 0 deletions
Meta/Lagom/Tools/CodeGenerators/JSSpecCompiler
|
@ -194,6 +194,18 @@ TextParseErrorOr<Tree> TextParser::parse_list_initialization()
|
|||
return make_ref_counted<List>(move(elements));
|
||||
}
|
||||
|
||||
TextParseErrorOr<Tree> TextParser::parse_the_this_value()
|
||||
{
|
||||
auto rollback = rollback_point();
|
||||
|
||||
TRY(consume_word("the"sv));
|
||||
TRY(consume_token(TokenType::WellKnownValue, "this"sv));
|
||||
TRY(consume_word("value"sv));
|
||||
|
||||
rollback.disarm();
|
||||
return make_ref_counted<WellKnownNode>(WellKnownNode::Type::This);
|
||||
}
|
||||
|
||||
// <value> :== <identifier> | <well_known_value> | <enumerator> | <number> | <string> | <list_initialization> | <record_initialization>
|
||||
TextParseErrorOr<Tree> TextParser::parse_value()
|
||||
{
|
||||
|
@ -232,6 +244,9 @@ TextParseErrorOr<Tree> TextParser::parse_value()
|
|||
if (auto record_initialization = parse_record_direct_list_initialization(); !record_initialization.is_error())
|
||||
return record_initialization.release_value();
|
||||
|
||||
if (auto the_this_value = parse_the_this_value(); !the_this_value.is_error())
|
||||
return the_this_value.release_value();
|
||||
|
||||
return TextParseError {};
|
||||
}
|
||||
|
||||
|
|
|
@ -78,6 +78,7 @@ private:
|
|||
TextParseErrorOr<Tree> parse_record_direct_list_initialization();
|
||||
TextParseErrorOr<Vector<Tree>> parse_function_arguments();
|
||||
TextParseErrorOr<Tree> parse_list_initialization();
|
||||
TextParseErrorOr<Tree> parse_the_this_value();
|
||||
TextParseErrorOr<Tree> parse_value();
|
||||
TextParseErrorOr<Tree> parse_expression();
|
||||
TextParseErrorOr<Tree> parse_condition();
|
||||
|
|
|
@ -63,4 +63,14 @@
|
|||
</ol>
|
||||
</emu-alg>
|
||||
</emu-clause>
|
||||
<emu-clause id="6">
|
||||
<h1><span class="secnum">6</span> get Temporal.PlainDateTime.prototype.inLeapYear</h1>
|
||||
<emu-alg>
|
||||
<ol>
|
||||
<li>Let <var>dateTime</var> be the <emu-val>this</emu-val> value.</li>
|
||||
<li>Perform ? <emu-xref><a>RequireInternalSlot</a></emu-xref>(<var>dateTime</var>, <var class="field">[[A]]</var>).</li>
|
||||
<li>Return <emu-val>undefined</emu-val>.</li>
|
||||
</ol>
|
||||
</emu-alg>
|
||||
</emu-clause>
|
||||
</specification>
|
||||
|
|
|
@ -87,3 +87,16 @@ TreeList
|
|||
ReturnNode
|
||||
Enumerator unused
|
||||
|
||||
%get Temporal.PlainDateTime.prototype.inLeapYear%():
|
||||
TreeList
|
||||
BinaryOperation Assignment
|
||||
Var dateTime
|
||||
WellKnownNode This
|
||||
UnaryOperation ReturnIfAbrubt
|
||||
FunctionCall
|
||||
UnresolvedReference RequireInternalSlot
|
||||
Var dateTime
|
||||
Slot A
|
||||
ReturnNode
|
||||
WellKnownNode Undefined
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue