Skip to content

Commit

Permalink
refactor: cf scope
Browse files Browse the repository at this point in the history
  • Loading branch information
kermanx committed Jan 16, 2025
1 parent 59468c8 commit de7dba5
Show file tree
Hide file tree
Showing 24 changed files with 133 additions and 241 deletions.
15 changes: 2 additions & 13 deletions crates/tree_shaker/src/analyzer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ use crate::{
use line_index::LineIndex;
use oxc::{
allocator::Allocator,
ast::ast::{LabeledStatement, Program},
ast::ast::Program,
semantic::{Semantic, SymbolId},
span::{GetSpan, Span},
};
use rustc_hash::FxHashSet;
use std::{mem, rc::Rc};
use std::mem;

pub struct Analyzer<'a> {
pub tree_shaker: TreeShaker<'a>,
Expand All @@ -38,7 +38,6 @@ pub struct Analyzer<'a> {
pub named_exports: Vec<SymbolId>,
pub default_export: Option<Entity<'a>>,
pub scope_context: ScopeContext<'a>,
pub pending_labels: Vec<&'a LabeledStatement<'a>>,
pub pending_deps: FxHashSet<ExhaustiveCallback<'a>>,
pub builtins: Builtins<'a>,
pub entity_op: EntityOpHost<'a>,
Expand Down Expand Up @@ -68,7 +67,6 @@ impl<'a> Analyzer<'a> {
named_exports: Vec::new(),
default_export: None,
scope_context: ScopeContext::new(factory),
pending_labels: Vec::new(),
pending_deps: Default::default(),
builtins: Builtins::new(config, factory),
entity_op: EntityOpHost::new(allocator),
Expand Down Expand Up @@ -152,15 +150,6 @@ impl<'a> Analyzer<'a> {
self.get_data_or_insert_with(key, Default::default)
}

#[allow(clippy::rc_buffer)]
pub fn take_labels(&mut self) -> Option<Rc<Vec<&'a LabeledStatement<'a>>>> {
if self.pending_labels.is_empty() {
None
} else {
Some(Rc::new(mem::take(&mut self.pending_labels)))
}
}

pub fn current_span(&self) -> Span {
*self.span_stack.last().unwrap()
}
Expand Down
7 changes: 4 additions & 3 deletions crates/tree_shaker/src/builtins/react/dependencies.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use crate::{
analyzer::Analyzer,
consumable::{Consumable, ConsumableCollector},
entity::Entity,
scope::CfScopeKind,
};
use oxc::span::Span;
use rustc_hash::FxHashMap;
Expand Down Expand Up @@ -114,10 +115,10 @@ pub fn check_dependencies<'a>(

if require_rerun {
for depth in 0..analyzer.scope_context.cf.stack.len() {
if let Some(exhaustive_data) =
&mut analyzer.scope_context.cf.get_mut_from_depth(depth).exhaustive_data
if let CfScopeKind::Exhaustive(exhaustive_data) =
&mut analyzer.scope_context.cf.get_mut_from_depth(depth).kind
{
exhaustive_data.dirty = true;
exhaustive_data.clean = false;
break;
}
}
Expand Down
2 changes: 1 addition & 1 deletion crates/tree_shaker/src/entity/object/enumerate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ impl<'a> ObjectEntity<'a> {
}

analyzer.mark_object_property_exhaustive_read(self.cf_scope, self.object_id);
analyzer.push_cf_scope_with_deps(CfScopeKind::Dependent, None, vec![dep], None);
analyzer.push_cf_scope_with_deps(CfScopeKind::Dependent, vec![dep], None);

let mut result = vec![];
let mut non_existent = vec![];
Expand Down
1 change: 0 additions & 1 deletion crates/tree_shaker/src/entity/object/get.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ impl<'a> ObjectEntity<'a> {
if !getters.is_empty() {
analyzer.push_cf_scope_with_deps(
CfScopeKind::Dependent,
None,
vec![if mangable { dep } else { analyzer.consumable((dep, key)) }],
if indeterminate_getter { None } else { Some(false) },
);
Expand Down
1 change: 0 additions & 1 deletion crates/tree_shaker/src/entity/object/set.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,6 @@ impl<'a> ObjectEntity<'a> {
let indeterminate = indeterminate || setters.len() > 1 || setters[0].0;
analyzer.push_cf_scope_with_deps(
CfScopeKind::Dependent,
None,
vec![analyzer.consumable((dep, key))],
if indeterminate { None } else { Some(false) },
);
Expand Down
7 changes: 1 addition & 6 deletions crates/tree_shaker/src/entity/union.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,7 @@ impl<'a, V: UnionLike<'a, Entity<'a>> + Debug + 'a> EntityTrait<'a> for UnionEnt
this: Entity<'a>,
args: Entity<'a>,
) -> Entity<'a> {
analyzer.push_cf_scope_with_deps(
CfScopeKind::Dependent,
None,
vec![analyzer.consumable(self)],
None,
);
analyzer.push_cf_scope_with_deps(CfScopeKind::Dependent, vec![analyzer.consumable(self)], None);
let values = self.values.map(|v| v.call(analyzer, dep, this, args));
analyzer.pop_cf_scope();
analyzer.factory.union(values)
Expand Down
4 changes: 2 additions & 2 deletions crates/tree_shaker/src/nodes/expr/conditional_expression.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ impl<'a> Analyzer<'a> {
let exec_consequent = move |analyzer: &mut Analyzer<'a>| {
let conditional_dep = analyzer.push_if_like_branch_cf_scope(
AstKind2::ConditionalExpression(node),
CfScopeKind::ConditionalExprBranch,
CfScopeKind::Indeterminate,
test,
maybe_true,
maybe_false,
Expand All @@ -32,7 +32,7 @@ impl<'a> Analyzer<'a> {
let exec_alternate = move |analyzer: &mut Analyzer<'a>| {
let conditional_dep = analyzer.push_if_like_branch_cf_scope(
AstKind2::ConditionalExpression(node),
CfScopeKind::ConditionalExprBranch,
CfScopeKind::Indeterminate,
test,
maybe_true,
maybe_false,
Expand Down
8 changes: 1 addition & 7 deletions crates/tree_shaker/src/nodes/stmt/block_statement.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
use crate::{
analyzer::Analyzer, ast::AstKind2, scope::CfScopeKind, transformer::Transformer,
utils::StatementVecData,
};
use crate::{analyzer::Analyzer, ast::AstKind2, transformer::Transformer, utils::StatementVecData};
use oxc::{allocator, ast::ast::BlockStatement};

impl<'a> Analyzer<'a> {
pub fn exec_block_statement(&mut self, node: &'a BlockStatement) {
let labels = self.take_labels();
let data = self.load_data::<StatementVecData>(AstKind2::BlockStatement(node));

self.push_cf_scope(CfScopeKind::Block, labels, Some(false));
self.exec_statement_vec(data, &node.body);
self.pop_cf_scope();
}
}

Expand Down
2 changes: 1 addition & 1 deletion crates/tree_shaker/src/nodes/stmt/break_statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use oxc::ast::ast::{BreakStatement, Statement};

impl<'a> Analyzer<'a> {
pub fn exec_break_statement(&mut self, node: &'a BreakStatement<'a>) {
let label = node.label.as_ref().map(|label| label.name.as_str());
let label = node.label.as_ref().map(|label| &label.name);
if self.break_to_label(label) {
self.consume(AstKind2::BreakStatement(node));
}
Expand Down
2 changes: 1 addition & 1 deletion crates/tree_shaker/src/nodes/stmt/continue_statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use oxc::ast::ast::{ContinueStatement, Statement};

impl<'a> Analyzer<'a> {
pub fn exec_continue_statement(&mut self, node: &'a ContinueStatement<'a>) {
let label = node.label.as_ref().map(|label| label.name.as_str());
let label = node.label.as_ref().map(|label| &label.name);
if self.continue_to_label(label) {
self.consume(AstKind2::ContinueStatement(node));
}
Expand Down
7 changes: 2 additions & 5 deletions crates/tree_shaker/src/nodes/stmt/do_while_statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,10 @@ pub struct Data {

impl<'a> Analyzer<'a> {
pub fn exec_do_while_statement(&mut self, node: &'a DoWhileStatement<'a>) {
let labels = self.take_labels();
self.push_cf_scope(CfScopeKind::BreakableWithoutLabel, labels.clone(), Some(false));
self.push_cf_scope(CfScopeKind::Loop, Some(false));

// Execute the first round.
self.push_cf_scope(CfScopeKind::Continuable, labels.clone(), Some(false));
self.exec_statement(&node.body);
self.pop_cf_scope();

if self.cf_scope().must_exited() {
self.pop_cf_scope();
Expand All @@ -41,7 +38,7 @@ impl<'a> Analyzer<'a> {
data.need_loop = true;

self.exec_loop(move |analyzer| {
analyzer.push_cf_scope(CfScopeKind::Continuable, labels.clone(), None);
analyzer.push_cf_scope(CfScopeKind::Loop, None);

analyzer.exec_statement(&node.body);
analyzer.exec_expression(&node.test).consume(analyzer);
Expand Down
10 changes: 2 additions & 8 deletions crates/tree_shaker/src/nodes/stmt/for_in_statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ use oxc::{

impl<'a> Analyzer<'a> {
pub fn exec_for_in_statement(&mut self, node: &'a ForInStatement<'a>) {
let labels = self.take_labels();
let right = self.exec_expression(&node.right);

// FIXME: enumerate keys!
Expand All @@ -32,17 +31,12 @@ impl<'a> Analyzer<'a> {

let dep = self.consumable((AstKind2::ForInStatement(node), right));

self.push_cf_scope_with_deps(
CfScopeKind::BreakableWithoutLabel,
labels.clone(),
vec![dep],
Some(false),
);
self.push_cf_scope_with_deps(CfScopeKind::Loop, vec![dep], Some(false));
self.exec_loop(move |analyzer| {
analyzer.declare_for_statement_left(&node.left);
analyzer.init_for_statement_left(&node.left, analyzer.factory.unknown_string);

analyzer.push_cf_scope(CfScopeKind::Continuable, labels.clone(), None);
analyzer.push_cf_scope(CfScopeKind::Loop, None);
analyzer.exec_statement(&node.body);
analyzer.pop_cf_scope();
});
Expand Down
11 changes: 2 additions & 9 deletions crates/tree_shaker/src/nodes/stmt/for_of_statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ use oxc::{

impl<'a> Analyzer<'a> {
pub fn exec_for_of_statement(&mut self, node: &'a ForOfStatement<'a>) {
let labels = self.take_labels();

let right = self.exec_expression(&node.right);
let right = if node.r#await {
right.consume(self);
Expand All @@ -27,17 +25,12 @@ impl<'a> Analyzer<'a> {

let dep = self.consumable((AstKind2::ForOfStatement(node), right));

self.push_cf_scope_with_deps(
CfScopeKind::BreakableWithoutLabel,
labels.clone(),
vec![dep],
Some(false),
);
self.push_cf_scope_with_deps(CfScopeKind::Loop, vec![dep], Some(false));
self.exec_loop(move |analyzer| {
analyzer.declare_for_statement_left(&node.left);
analyzer.init_for_statement_left(&node.left, iterated);

analyzer.push_cf_scope(CfScopeKind::Continuable, labels.clone(), None);
analyzer.push_cf_scope(CfScopeKind::Loop, None);
analyzer.exec_statement(&node.body);
analyzer.pop_cf_scope();
});
Expand Down
11 changes: 2 additions & 9 deletions crates/tree_shaker/src/nodes/stmt/for_statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ use oxc::{

impl<'a> Analyzer<'a> {
pub fn exec_for_statement(&mut self, node: &'a ForStatement<'a>) {
let labels = self.take_labels();

if let Some(init) = &node.init {
match init {
ForStatementInit::VariableDeclaration(node) => {
Expand All @@ -30,18 +28,13 @@ impl<'a> Analyzer<'a> {
self.consumable(AstKind2::ForStatement(node))
};

self.push_cf_scope_with_deps(
CfScopeKind::BreakableWithoutLabel,
labels.clone(),
vec![dep],
Some(false),
);
self.push_cf_scope_with_deps(CfScopeKind::Loop, vec![dep], Some(false));
self.exec_loop(move |analyzer| {
if analyzer.cf_scope().must_exited() {
return;
}

analyzer.push_cf_scope(CfScopeKind::Continuable, labels.clone(), None);
analyzer.push_cf_scope(CfScopeKind::Loop, None);
analyzer.exec_statement(&node.body);
if let Some(update) = &node.update {
analyzer.exec_expression(update);
Expand Down
22 changes: 8 additions & 14 deletions crates/tree_shaker/src/nodes/stmt/if_statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ impl<'a> Analyzer<'a> {
pub fn exec_if_statement(&mut self, node: &'a IfStatement) {
let factory = self.factory;

let labels = self.take_labels();

let test = self.exec_expression(&node.test).get_to_boolean(self);

let (maybe_consequent, maybe_alternate) = match test.test_truthy() {
Expand All @@ -27,20 +25,18 @@ impl<'a> Analyzer<'a> {
if maybe_consequent {
self.push_if_like_branch_cf_scope(
AstKind2::IfStatement(node),
CfScopeKind::IfBranch,
CfScopeKind::ExitBlocker(None),
test,
maybe_consequent,
maybe_alternate,
true,
node.alternate.is_some(),
);
self.push_cf_scope(CfScopeKind::Labeled, labels.clone(), Some(false));
self.exec_statement(&node.consequent);
self.pop_cf_scope();
let conditional_scope = self.pop_cf_scope_and_get_mut();
if let Some(stopped_exit) = conditional_scope.blocked_exit {
exit_target_inner = exit_target_inner.max(stopped_exit);
exit_target_outer = exit_target_outer.min(stopped_exit);
if let CfScopeKind::ExitBlocker(Some(stopped_exit)) = &conditional_scope.kind {
exit_target_inner = exit_target_inner.max(*stopped_exit);
exit_target_outer = exit_target_outer.min(*stopped_exit);
} else {
both_exit = false;
}
Expand All @@ -49,21 +45,19 @@ impl<'a> Analyzer<'a> {
if maybe_alternate {
self.push_if_like_branch_cf_scope(
AstKind2::IfStatement(node),
CfScopeKind::IfBranch,
CfScopeKind::ExitBlocker(None),
test,
maybe_consequent,
maybe_alternate,
false,
true,
);
if let Some(alternate) = &node.alternate {
self.push_cf_scope(CfScopeKind::Labeled, labels.clone(), Some(false));
self.exec_statement(alternate);
self.pop_cf_scope();
let conditional_scope = self.pop_cf_scope_and_get_mut();
if let Some(stopped_exit) = conditional_scope.blocked_exit {
exit_target_inner = exit_target_inner.max(stopped_exit);
exit_target_outer = exit_target_outer.min(stopped_exit);
if let CfScopeKind::ExitBlocker(Some(stopped_exit)) = &conditional_scope.kind {
exit_target_inner = exit_target_inner.max(*stopped_exit);
exit_target_outer = exit_target_outer.min(*stopped_exit);
} else {
both_exit = false;
}
Expand Down
5 changes: 3 additions & 2 deletions crates/tree_shaker/src/nodes/stmt/labeled_statements.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::{analyzer::Analyzer, ast::AstKind2, transformer::Transformer};
use crate::{analyzer::Analyzer, ast::AstKind2, scope::CfScopeKind, transformer::Transformer};
use oxc::ast::ast::{LabeledStatement, Statement};

impl<'a> Analyzer<'a> {
Expand All @@ -7,8 +7,9 @@ impl<'a> Analyzer<'a> {
}

pub fn exec_labeled_statement(&mut self, node: &'a LabeledStatement<'a>) {
self.pending_labels.push(node);
self.push_cf_scope(CfScopeKind::Labeled(node), Some(false));
self.exec_statement(&node.body);
self.pop_cf_scope();
}
}

Expand Down
15 changes: 0 additions & 15 deletions crates/tree_shaker/src/nodes/stmt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,6 @@ impl<'a> Analyzer<'a> {

pub fn init_statement(&mut self, node: &'a Statement) {
self.push_span(node);
if !matches!(
node,
Statement::BlockStatement(_)
| Statement::IfStatement(_)
| Statement::WhileStatement(_)
| Statement::DoWhileStatement(_)
| Statement::ForStatement(_)
| Statement::ForInStatement(_)
| Statement::ForOfStatement(_)
| Statement::SwitchStatement(_)
| Statement::LabeledStatement(_)
| Statement::TryStatement(_),
) {
self.pending_labels.clear();
}
match node {
match_declaration!(Statement) => {
let node = node.to_declaration();
Expand Down
3 changes: 1 addition & 2 deletions crates/tree_shaker/src/nodes/stmt/switch_statement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ pub struct Data {

impl<'a> Analyzer<'a> {
pub fn exec_switch_statement(&mut self, node: &'a SwitchStatement<'a>) {
let labels = self.take_labels();
let data = self.load_data::<Data>(AstKind2::SwitchStatement(node));

// 1. discriminant
Expand Down Expand Up @@ -77,7 +76,7 @@ impl<'a> Analyzer<'a> {
}

// 3. consequent
self.push_cf_scope(CfScopeKind::BreakableWithoutLabel, labels, Some(false));
self.push_cf_scope(CfScopeKind::Switch, Some(false));
let mut entered = Some(false);
for (index, case) in node.cases.iter().enumerate() {
if self.cf_scope().must_exited() {
Expand Down
Loading

1 comment on commit de7dba5

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test262 Result

  • Failed: 287
  • Total: 43706
  • Passed: 39453
  • Ignored: 1929
  • Treeshaked: 28605, Skipped: 15101
  • Treeshaked sized/Minified size = 85.88%

Failed Tests

language/line-terminators/7.3-15.js: prop.length Expected SameValue(«5», «3») to be true
language/line-terminators/7.3-6.js: { message: 'prop[2] Expected SameValue(«undefined», «\"
language/line-terminators/7.3-5.js: { message: 'prop[2] Expected SameValue(«undefined», «\"
language/module-code/instn-local-bndng-const.js: { message: 'Binding is created but not initialized. Expected a ReferenceError to be thrown but no exception was thrown at all' }
language/module-code/instn-local-bndng-cls.js: Binding is created but not initialized. Expected a ReferenceError to be thrown but no exception was thrown at all
language/module-code/instn-local-bndng-export-cls.js: { message: 'Binding is created but not initialized. Expected a ReferenceError to be thrown but no exception was thrown at all' }
language/module-code/instn-local-bndng-export-const.js: Binding is created but not initialized. Expected a ReferenceError to be thrown but no exception was thrown at all
language/module-code/instn-local-bndng-export-let.js: { message: 'Binding is created but not initialized. Expected a ReferenceError to be thrown but no exception was thrown at all' }
language/module-code/instn-local-bndng-let.js: Binding is created but not initialized. Expected a ReferenceError to be thrown but no exception was thrown at all
language/source-text/6.1.js: { message: 'A character outside the BMP (Unicode CodePoint > 0xFFFF) should consume two code units' }
language/expressions/assignment/fn-name-cover.js: Expected true but got false
language/expressions/async-arrow-function/arrow-returns-promise.js: Test did not run to completion
language/expressions/async-generator/default-proto.js: fn.prototype is undefined Expected SameValue(«[object AsyncGenerator]», «[object AsyncGenerator]») to be true
language/expressions/delete/super-property-topropertykey.js: Expected a ReferenceError but got a Test262Error
language/expressions/instanceof/symbol-hasinstance-to-boolean.js: Expected SameValue(«false», «true») to be true
language/expressions/object/fn-name-cover.js: Expected true but got false
language/expressions/super/prop-expr-getsuperbase-before-topropertykey-putvalue-compound-assign.js: Expected SameValue(«0», «2») to be true
language/expressions/yield/star-iterable.js: { message: 'Third result 'value' Expected SameValue(«1», «8») to be true' }
language/module-code/top-level-await/while-dynamic-evaluation.js: Test timed out
language/statements/class/scope-name-lex-open-heritage.js: { message: 'inner binding is independent Expected SameValue(«null», «class C extends (probeHeritage=function(){return C},setHeritage=function(){C=null}){method(){return C}}») to be true' }
language/statements/class/static-method-non-configurable-err.js: { message: 'Expected a TypeError to be thrown but no exception was thrown at all' }
language/statements/class/static-init-super-property.js: Expected SameValue(«undefined», «\"test262\"») to be true
language/statements/class/static-method-gen-non-configurable-err.js: Expected a TypeError to be thrown but no exception was thrown at all
language/statements/const/fn-name-cover.js: Expected true but got false
language/statements/for/scope-body-lex-open.js: { message: 'Expected SameValue(«undefined», «\"outside\"») to be true' }
language/statements/for/scope-head-lex-close.js: Test timed out
language/statements/for-await-of/async-func-dstr-const-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-const-async-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-const-async-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-const-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-let-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-let-async-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-let-async-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-let-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-var-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-var-async-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-var-async-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-func-dstr-var-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-const-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-const-async-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-const-async-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-const-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-let-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-let-async-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-let-async-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-let-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-var-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-var-async-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-var-async-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-await-of/async-gen-dstr-var-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/statements/for-in/head-const-bound-names-fordecl-tdz.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/statements/for-in/head-let-bound-names-fordecl-tdz.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/statements/for-in/order-simple-object.js: Actual [0, 1, 2, p2, p4] and expected [0, 1, 2, p2, p4, p1] should have the same contents.
language/statements/for-in/scope-body-lex-open.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/statements/for-in/scope-head-lex-close.js: { message: 'Expected a ReferenceError to be thrown but no exception was thrown at all' }
language/statements/for-in/scope-head-lex-open.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/statements/for-of/head-const-bound-names-fordecl-tdz.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/statements/for-of/head-expr-obj-iterator-method.js: Expected a TypeError to be thrown but no exception was thrown at all
language/statements/for-of/head-expr-to-obj.js: Expected a TypeError to be thrown but no exception was thrown at all
language/statements/for-of/head-expr-primitive-iterator-method.js: Expected a TypeError to be thrown but no exception was thrown at all
language/statements/for-of/head-let-bound-names-fordecl-tdz.js: { message: 'Expected a ReferenceError to be thrown but no exception was thrown at all' }
language/statements/function/13.2-2-s.js: Expected a TypeError to be thrown but no exception was thrown at all
language/statements/function/13.2-4-s.js: Expected a TypeError to be thrown but no exception was thrown at all
language/statements/let/block-local-closure-set-before-initialization.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/statements/let/fn-name-cover.js: Expected true but got false
language/statements/let/function-local-closure-set-before-initialization.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/statements/let/global-closure-set-before-initialization.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/statements/try/S12.14_A9_T2.js: { message: '#6.2: \"try finally{continue}\" must work correctly' }
language/statements/try/S12.14_A9_T4.js: #1.2: \"try{break} catch finally{continue}\" must work correctly
language/statements/variable/fn-name-cover.js: Expected true but got false
language/statements/while/S12.6.2_A11.js: Test timed out
language/types/number/S8.5_A14_T1.js: { message: '#1: 1e+308*2 === Infinity. Actual: Infinity' }
language/expressions/arrow-function/dstr/ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/arrow-function/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/arrow-function/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/arrow-function/dstr/obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/assignment/dstr/array-elem-init-fn-name-cover.js: Expected true but got false
language/expressions/assignment/dstr/array-elem-put-let.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/expressions/assignment/dstr/array-rest-put-let.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/expressions/assignment/dstr/obj-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/assignment/dstr/obj-id-put-let.js: Expected a ReferenceError to be thrown but no exception was thrown at all
language/expressions/assignment/dstr/obj-prop-elem-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/assignment/dstr/obj-prop-put-let.js: { message: 'Expected a ReferenceError to be thrown but no exception was thrown at all' }
language/expressions/async-generator/dstr/ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/async-generator/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/async-generator/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/async-generator/dstr/named-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/async-generator/dstr/named-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/async-generator/dstr/named-dflt-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/async-generator/dstr/named-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/async-generator/dstr/obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-gen-meth-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-gen-meth-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-gen-meth-static-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-gen-meth-static-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-private-gen-meth-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-private-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-private-gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-private-gen-meth-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-private-gen-meth-static-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-private-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-private-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/async-private-gen-meth-static-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/class/dstr/gen-meth-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/gen-meth-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/gen-meth-static-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/gen-meth-static-dflt-obj-ptrn-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/class/dstr/gen-meth-static-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/meth-ary-ptrn-elem-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/class/dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/class/dstr/meth-dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/meth-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/meth-static-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/meth-static-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/meth-static-dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/meth-static-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-gen-meth-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-gen-meth-obj-ptrn-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/class/dstr/private-gen-meth-static-ary-ptrn-elem-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/class/dstr/private-gen-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-gen-meth-static-dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-gen-meth-static-obj-ptrn-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/class/dstr/private-meth-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-meth-dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-meth-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-meth-static-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-meth-static-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-meth-static-dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/dstr/private-meth-static-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/class/elements/fields-computed-name-static-propname-prototype.js: Expected a TypeError to be thrown but no exception was thrown at all
language/expressions/class/elements/static-private-getter-access-on-inner-arrow-function.js: Accessed static private getter from an object which did not contain it Expected a TypeError to be thrown but no exception was thrown at all
language/expressions/class/elements/static-private-getter-access-on-inner-function.js: Accessed static private getter from an arbitrary object Expected a TypeError to be thrown but no exception was thrown at all
language/expressions/class/elements/static-private-getter-access-on-inner-class.js: { message: 'Accessed static private getter from an object which did not contain it Expected a TypeError to be thrown but no exception was thrown at all' }
language/expressions/class/elements/static-private-getter.js: Accessed static private getter from an arbitrary object Expected a TypeError to be thrown but no exception was thrown at all
language/expressions/class/elements/static-private-setter-access-on-inner-arrow-function.js: Accessed static private setter from an object which did not contain it Expected a TypeError to be thrown but no exception was thrown at all
language/expressions/class/elements/static-private-setter.js: { message: 'Accessed static private setter from an arbitrary object Expected a TypeError to be thrown but no exception was thrown at all' }
language/expressions/class/elements/static-private-setter-access-on-inner-function.js: { message: 'Accessed static private setter from an arbitrary object Expected a TypeError to be thrown but no exception was thrown at all' }
language/expressions/function/dstr/ary-ptrn-elem-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/function/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/function/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/function/dstr/obj-ptrn-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/generators/dstr/ary-ptrn-elem-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/generators/dstr/dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/generators/dstr/dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/generators/dstr/obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/object/dstr/async-gen-meth-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/object/dstr/async-gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/object/dstr/async-gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/object/dstr/async-gen-meth-obj-ptrn-id-init-fn-name-cover.js: Test262Error: Expected SameValue(«"xCover"», «"xCover"») to be false
language/expressions/object/dstr/gen-meth-ary-ptrn-elem-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/object/dstr/gen-meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/object/dstr/gen-meth-dflt-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/object/dstr/gen-meth-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/object/dstr/meth-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/object/dstr/meth-dflt-ary-ptrn-elem-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/expressions/object/dstr/meth-dflt-obj-ptrn-id-init-fn-name-cover.js: { message: 'Expected SameValue(«\"xCover\"», «\"xCover\"») to be false' }
language/expressions/object/dstr/meth-obj-ptrn-id-init-fn-name-cover.js: Expected SameValue(«\"xCover\"», «\"xCover\"») to be false
language/import/import-defer/deferred-namespace-object/identity.js: Expected no error, got import: *as nsEager from"./dep_FIXTURE.js";import defer*as nsDeferred1 from"./dep_FIXTURE.js";import defer*as nsDeferred2 from"./dep_FIXTURE.js";import{depDeferredNamespace as nsDeferred3}from"./dep-defer-ns_FIXTURE.js";const nsDeferred4=await importdefer("./dep_FIXTURE.js");assert.sameValue(nsDeferred1,nsDeferred2,"Deferred import of the same module twice gives the same object"),assert.sameValue(nsDeferred1,nsDeferred3,"Deferred import of the same module twice from different files gives the same object"),assert.sameValue(nsDeferred1,nsDeferred4,"Static and dynamic deferred import of the same module gives the same object"),assert.notSameValue(nsDeferred1,nsEager,"Deferred namespaces are distinct from eager namespaces");
language/import/import-defer/deferred-namespace-object/exotic-object-behavior.js: Expected no error, got import: defer*as ns from"./dep_FIXTURE.js";assert.sameValue(typeof ns,"object","Deferred namespaces are objects"),assert(!Reflect.isExtensible(ns),"Deferred namespaces are not extensible"),assert.sameValue(Reflect.preventExtensions(ns),!0,"Deferred namespaces can made non-extensible"),assert.sameValue(Reflect.getPrototypeOf(ns),null,"Deferred namespaces have a null prototype"),assert.sameValue(Reflect.setPrototypeOf(ns,{}),!1,"Deferred namespaces' prototype cannot be changed"),assert.sameValue(Reflect.setPrototypeOf(ns,null),!0,"Deferred namespaces' prototype can be 'set' to null"),assert.throws(TypeError,()=>Reflect.apply(ns,null,[]),"Deferred namespaces are not callable"),assert.throws(TypeError,()=>Reflect.construct(ns,[],ns),"Deferred namespaces are not constructable"),assert.compareArray(Reflect.ownKeys(ns),["bar","foo",Symbol.toStringTag],"Deferred namespaces' keys are the exports sorted alphabetically, followed by @@toStringTag"),verifyProperty(ns,"foo",{value:1,writable:!0,enumerable:!0,configurable:!1}),assert.sameValue(Reflect.getOwnPropertyDescriptor(ns,"non-existent"),void 0,"No descriptors for non-exports");
language/import/import-defer/errors/get-self-while-evaluating.js: Expected no error, got import: defer*as self from"./get-self-while-evaluating.js";assert.throws(TypeError,()=>self.foo);
language/import/import-defer/deferred-namespace-object/to-string-tag.js: Expected no error, got import: defer*as ns from"./dep_FIXTURE.js";verifyProperty(ns,Symbol.toStringTag,{value:"Deferred Module",writable:!1,enumerable:!1,configurable:!1});
language/import/import-defer/evaluation-sync/evaluation-ignore-getPrototypeOf.js: Expected no error, got import: "./setup_FIXTURE.js";import defer*as ns1 from"./dep-1_FIXTURE.js";assert.sameValue(globalThis.evaluations.length,0,"import defer does not trigger evaluation"),Object.getPrototypeOf(ns1),assert.sameValue(globalThis.evaluations.length,0,"[[GetPrototypeOf]] does not trigger evaluation");
language/import/import-defer/evaluation-sync/evaluation-ignore-get-symbol.js: `Expected no error, got import: "./setup_FIXTURE.js";import defer*as ns1 from"./dep-1_FIXTURE.js";assert.sameValue(globalThis.evaluations.length,0,"import defer does not trigger evaluation"),ns1[Symbo

Please sign in to comment.