diff options
author | Linus Groh <mail@linusgroh.de> | 2022-01-05 19:11:16 +0100 |
---|---|---|
committer | Linus Groh <mail@linusgroh.de> | 2022-01-06 12:36:23 +0100 |
commit | 9d0d3affd4feaab62c37e284a17432815c071c24 (patch) | |
tree | 205b9f342ad4c53e5865ff80906873992ccc759f /Userland/Utilities/js.cpp | |
parent | eed764e1dd3288f203108229c7e1ca9d09aef4d5 (diff) | |
download | serenity-9d0d3affd4feaab62c37e284a17432815c071c24.zip |
LibJS: Replace the custom unwind mechanism with completions :^)
This includes:
- Parsing proper LabelledStatements with try_parse_labelled_statement()
- Removing LabelableStatement
- Implementing the LoopEvaluation semantics via loop_evaluation() in
each IterationStatement subclass; and IterationStatement evaluation
via {For,ForIn,ForOf,ForAwaitOf,While,DoWhile}Statement::execute()
- Updating ReturnStatement, BreakStatement and ContinueStatement to
return the appropriate completion types
- Basically reimplementing TryStatement and SwitchStatement according to
the spec, using completions
- Honoring result completion types in AsyncBlockStart and
OrdinaryCallEvaluateBody
- Removing any uses of the VM unwind mechanism - most importantly,
VM::throw_exception() now exclusively sets an exception and no longer
triggers any unwinding mechanism.
However, we already did a good job updating all of LibWeb and userland
applications to not use it, and the few remaining uses elsewhere don't
rely on unwinding AFAICT.
Diffstat (limited to 'Userland/Utilities/js.cpp')
-rw-r--r-- | Userland/Utilities/js.cpp | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/Userland/Utilities/js.cpp b/Userland/Utilities/js.cpp index 7c91bb09d0..30e20390e9 100644 --- a/Userland/Utilities/js.cpp +++ b/Userland/Utilities/js.cpp @@ -795,7 +795,6 @@ static void print_value(JS::Value value, HashTable<JS::Object*>& seen_objects) if (prototype_or_error.has_value() && prototype_or_error.value() == object.global_object().error_prototype()) return print_error(object, seen_objects); vm->clear_exception(); - vm->stop_unwind(); if (is<JS::RegExpObject>(object)) return print_regexp_object(object, seen_objects); |