diff --git a/ecmascript/parser/tests/test262-error-references/fail/06272e1e03d6ced7.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/06272e1e03d6ced7.js.stderr index 80a97dfe82e..8cf79b8584b 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/06272e1e03d6ced7.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/06272e1e03d6ced7.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/06272e1e03d6ced7.js:1:5 + --> $DIR/tests/test262-parser/fail/06272e1e03d6ced7.js:1:2 | 1 | [...x,,] = 0 - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/14d6adc74d396c58.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/14d6adc74d396c58.js.stderr index 4a2e8b6bb63..fbeb27b11e0 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/14d6adc74d396c58.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/14d6adc74d396c58.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/14d6adc74d396c58.js:1:5 + --> $DIR/tests/test262-parser/fail/14d6adc74d396c58.js:1:2 | 1 | [...x, y] = 0 - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/346316bef54d805a.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/346316bef54d805a.js.stderr index 9e6a7479aa1..95e1977123e 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/346316bef54d805a.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/346316bef54d805a.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/346316bef54d805a.js:1:8 + --> $DIR/tests/test262-parser/fail/346316bef54d805a.js:1:5 | 1 | ([a,...b,])=>0; - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/4485930b35bf8cb6.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/4485930b35bf8cb6.js.stderr index fc523666b90..c2c4ad322c2 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/4485930b35bf8cb6.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/4485930b35bf8cb6.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/4485930b35bf8cb6.js:1:5 + --> $DIR/tests/test262-parser/fail/4485930b35bf8cb6.js:1:2 | 1 | [...a, b] = c - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/531ee852cc8ed0a7.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/531ee852cc8ed0a7.js.stderr index e1532450acb..7eb989333f1 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/531ee852cc8ed0a7.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/531ee852cc8ed0a7.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/531ee852cc8ed0a7.js:1:5 + --> $DIR/tests/test262-parser/fail/531ee852cc8ed0a7.js:1:2 | 1 | [...0,a]=0 - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/88f3d521fae776b9.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/88f3d521fae776b9.js.stderr index 24d23e77ea4..a5e589afbe8 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/88f3d521fae776b9.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/88f3d521fae776b9.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/88f3d521fae776b9.js:1:5 + --> $DIR/tests/test262-parser/fail/88f3d521fae776b9.js:1:2 | 1 | [...0,...{a=0}]=0 - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/976b6247ca78ab51.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/976b6247ca78ab51.js.stderr index d03d542d761..f5ee85135c9 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/976b6247ca78ab51.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/976b6247ca78ab51.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/976b6247ca78ab51.js:1:5 + --> $DIR/tests/test262-parser/fail/976b6247ca78ab51.js:1:2 | 1 | [...{a=0},]=0 - | ^^^^^ + | ^^^^^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/9fa56398be8a1769.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/9fa56398be8a1769.js.stderr index e77c73f0e0b..daa6b71b883 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/9fa56398be8a1769.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/9fa56398be8a1769.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/9fa56398be8a1769.js:1:5 + --> $DIR/tests/test262-parser/fail/9fa56398be8a1769.js:1:2 | 1 | [...x, ...y] = 0 - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/ae0a7ac275bc9f5c.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/ae0a7ac275bc9f5c.js.stderr index 406bf040878..66553269df7 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/ae0a7ac275bc9f5c.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/ae0a7ac275bc9f5c.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/ae0a7ac275bc9f5c.js:1:5 + --> $DIR/tests/test262-parser/fail/ae0a7ac275bc9f5c.js:1:2 | 1 | [...a, ] = b - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/b02cbe75ce1ceb06.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/b02cbe75ce1ceb06.js.stderr index 1eea25a8386..212a4b60d30 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/b02cbe75ce1ceb06.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/b02cbe75ce1ceb06.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/b02cbe75ce1ceb06.js:1:5 + --> $DIR/tests/test262-parser/fail/b02cbe75ce1ceb06.js:1:2 | 1 | [...0,{a=0}]=0 - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/bb210b308413d99c.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/bb210b308413d99c.js.stderr index 14995f7a64f..00d4025dfaa 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/bb210b308413d99c.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/bb210b308413d99c.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/bb210b308413d99c.js:1:5 + --> $DIR/tests/test262-parser/fail/bb210b308413d99c.js:1:2 | 1 | (...a, ...b) => 0 - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/d28e80d99f819136.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/d28e80d99f819136.js.stderr index ee82eeb63db..8e98adf77ea 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/d28e80d99f819136.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/d28e80d99f819136.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/d28e80d99f819136.js:1:10 + --> $DIR/tests/test262-parser/fail/d28e80d99f819136.js:1:7 | 1 | [, x, ...y,] = 0 - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262-error-references/fail/e52f002f70dc01b2.js.stderr b/ecmascript/parser/tests/test262-error-references/fail/e52f002f70dc01b2.js.stderr index 11bbc8911b6..a15f2434754 100644 --- a/ecmascript/parser/tests/test262-error-references/fail/e52f002f70dc01b2.js.stderr +++ b/ecmascript/parser/tests/test262-error-references/fail/e52f002f70dc01b2.js.stderr @@ -1,6 +1,6 @@ error: Rest element must be final element - --> $DIR/tests/test262-parser/fail/e52f002f70dc01b2.js:1:5 + --> $DIR/tests/test262-parser/fail/e52f002f70dc01b2.js:1:2 | 1 | (...a, b) => {} - | ^ + | ^^^^ diff --git a/ecmascript/parser/tests/test262.rs b/ecmascript/parser/tests/test262.rs index 47621994449..f4257597c06 100644 --- a/ecmascript/parser/tests/test262.rs +++ b/ecmascript/parser/tests/test262.rs @@ -13,7 +13,7 @@ use std::fs::File; use std::fs::read_dir; use std::io::{self, Read}; use std::path::Path; -use swc_common::{FoldWith, Folder}; +use swc_common::{Fold, FoldWith}; use swc_common::FileName; use swc_common::Span; use swc_ecma_parser::{FileMapInput, PResult, Parser, Session}; @@ -293,7 +293,7 @@ where fn normalize(mut t: T) -> T where - Normalizer: Folder, + Normalizer: Fold, { loop { let mut n = Normalizer { @@ -309,67 +309,81 @@ where struct Normalizer { did_something: bool, } -impl Folder for Normalizer { +impl Fold for Normalizer { fn fold(&mut self, _: Span) -> Span { Span::default() } } -impl Folder for Normalizer { - fn fold(&mut self, lit: Lit) -> Lit { - match lit { - Lit::Str { value, .. } => Lit::Str { - value, - has_escape: false, - }, - _ => lit, +impl Fold for Normalizer { + fn fold(&mut self, s: Str) -> Str { + Str { + span: Default::default(), + has_escape: false, + ..s } } } -impl Folder for Normalizer { - fn fold(&mut self, e: ExprKind) -> ExprKind { +impl Fold for Normalizer { + fn fold(&mut self, e: Expr) -> Expr { + let e = e.fold_with(self); + match e { - ExprKind::Paren(e) => self.fold(e.node), - ExprKind::New(NewExpr { callee, args: None }) => { + Expr::Paren(ParenExpr { expr, .. }) => *expr, + Expr::New(NewExpr { + callee, + args: None, + span, + }) => { self.did_something = true; - ExprKind::New(NewExpr { + Expr::New(NewExpr { + span, callee: self.fold(callee), args: Some(vec![]), }) } - ExprKind::Seq(SeqExpr { exprs }) => { + // Flatten comma expressions. + Expr::Seq(SeqExpr { exprs, span }) => { let mut exprs = self.fold(exprs); - let need_work = exprs.iter().map(|e| &e.node).any(|n| match *n { - ExprKind::Seq { .. } => true, + let need_work = exprs.iter().any(|n| match **n { + Expr::Seq(..) => true, _ => false, }); if need_work { self.did_something = true; exprs = exprs.into_iter().fold(vec![], |mut v, e| { - match e.node { - ExprKind::Seq(SeqExpr { exprs }) => v.extend(exprs), + match *e { + Expr::Seq(SeqExpr { exprs, .. }) => v.extend(exprs), _ => v.push(e), } v }); } - ExprKind::Seq(SeqExpr { exprs }) + Expr::Seq(SeqExpr { exprs, span }) } - _ => e.fold_children(self), + _ => e, } } } -impl Folder for Normalizer { +impl Fold for Normalizer { fn fold(&mut self, n: PropName) -> PropName { match n { PropName::Ident(Ident { sym, .. }) => { self.did_something = true; - PropName::Str(String::from(&*sym)) + PropName::Str(Str { + span: Default::default(), + value: sym, + has_escape: false, + }) } PropName::Num(num) => { self.did_something = true; - PropName::Str(num.to_string()) + PropName::Str(Str { + span: Default::default(), + value: num.to_string().into(), + has_escape: false, + }) } _ => n.fold_children(self), }