Skip to content

Commit

Permalink
LibJS: Split big VERIFY conditions into smaller ones in CyclicModule
Browse files Browse the repository at this point in the history
This makes assertion failures here more informative.
  • Loading branch information
awesomekling committed Dec 2, 2023
1 parent 9bc74ec commit 4fe2579
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
6 changes: 4 additions & 2 deletions Userland/Libraries/LibJS/CyclicModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,8 @@ ThrowCompletionOr<void> CyclicModule::link(VM& vm)
{
dbgln_if(JS_MODULE_DEBUG, "[JS MODULE] link[{}]()", this);
// 1. Assert: module.[[Status]] is not linking or evaluating.
VERIFY(m_status != ModuleStatus::Linking && m_status != ModuleStatus::Evaluating);
VERIFY(m_status != ModuleStatus::Linking)
VERIFY(m_status != ModuleStatus::Evaluating);
// 2. Let stack be a new empty List.
Vector<Module*> stack;

Expand Down Expand Up @@ -387,7 +388,8 @@ ThrowCompletionOr<Promise*> CyclicModule::evaluate(VM& vm)
VERIFY(m_status == ModuleStatus::Evaluated);

// c. Assert: module.[[EvaluationError]] is result.
VERIFY(m_evaluation_error.is_error() && same_value(*m_evaluation_error.throw_completion().value(), *result.throw_completion().value()));
VERIFY(m_evaluation_error.is_error());
VERIFY(same_value(*m_evaluation_error.throw_completion().value(), *result.throw_completion().value()));

// d. Perform ! Call(capability.[[Reject]], undefined, « result.[[Value]] »).
MUST(call(vm, *m_top_level_capability->reject(), js_undefined(), *result.throw_completion().value()));
Expand Down
5 changes: 4 additions & 1 deletion Userland/Libraries/LibJS/SourceTextModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,10 @@ ThrowCompletionOr<void> SourceTextModule::execute_module(VM& vm, GCPtr<PromiseCa
module_context->script_or_module = NonnullGCPtr<Module>(*this);

// 5. Assert: module has been linked and declarations in its module environment have been instantiated.
VERIFY(m_status != ModuleStatus::Unlinked && m_status != ModuleStatus::Linking && environment());
VERIFY(m_status != ModuleStatus::New);
VERIFY(m_status != ModuleStatus::Unlinked);
VERIFY(m_status != ModuleStatus::Linking);
VERIFY(environment());

// 6. Set the VariableEnvironment of moduleContext to module.[[Environment]].
module_context->variable_environment = environment();
Expand Down

0 comments on commit 4fe2579

Please sign in to comment.