Skip to content

Commit 7215171

Browse files
committed
[core][rewriter] dpsc: switch from computed wraps to dynamic property wraps
1 parent f879594 commit 7215171

File tree

6 files changed

+37
-160
lines changed

6 files changed

+37
-160
lines changed

rewriter/js/src/cfg.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,8 @@ pub struct Config {
1717
pub prefix: String,
1818

1919
pub wrapfn: String,
20-
pub wrapgetbase: String,
21-
pub wrapsetbase: String,
22-
pub wrapcomputedgetfn: String,
23-
pub wrapcomputedsetfn: String,
20+
pub wrappropertybase: String,
21+
pub wrappropertyfn: String,
2422
pub importfn: String,
2523
pub rewritefn: String,
2624
pub setrealmfn: String,

rewriter/js/src/changes.rs

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,10 @@ pub enum JsChangeType<'alloc: 'data, 'data> {
3535
enclose: bool,
3636
},
3737

38-
WrapGetLeft {
39-
ident: Atom<'data>,
40-
enclose: bool,
41-
},
42-
WrapGetComputedLeft {
43-
enclose: bool,
44-
},
45-
WrapGetRight {
46-
enclose: bool,
47-
},
48-
49-
WrapSet {
50-
ident: Atom<'data>,
51-
propspan: Span,
52-
},
53-
WrapSetComputed,
38+
WrapPropertyLeft,
39+
RewriteProperty {
40+
ident: Atom<'data>,
41+
},
5442

5543
/// insert `${cfg.setrealmfn}({}).`
5644
SetRealmFn,
@@ -117,6 +105,7 @@ impl<'alloc: 'data, 'data> Transform<'data> for JsChange<'alloc, 'data> {
117105
(cfg, flags): &Self::ToLowLevelData,
118106
offset: i32,
119107
) -> TransformLL<'data> {
108+
dbg!(&&self);
120109
use JsChangeType as Ty;
121110
use TransformLL as LL;
122111
match self.ty {
@@ -130,25 +119,9 @@ impl<'alloc: 'data, 'data> Transform<'data> for JsChange<'alloc, 'data> {
130119
} else {
131120
transforms![")"]
132121
}),
133-
Ty::WrapGetLeft { ident, enclose } => LL::insert(if enclose {
134-
transforms!["(", &cfg.wrapgetbase, ident, "("]
135-
} else {
136-
transforms![&cfg.wrapgetbase, ident, "("]
137-
}),
138-
Ty::WrapGetComputedLeft { enclose } => LL::insert(if enclose {
139-
transforms!["(", &cfg.wrapcomputedgetfn, "("]
140-
} else {
141-
transforms![&cfg.wrapcomputedgetfn, "("]
142-
}),
143-
Ty::WrapGetRight { enclose } => LL::replace(if enclose {
144-
transforms!["))"]
145-
} else {
146-
transforms![")"]
147-
}),
148-
Ty::WrapSet { ident, propspan } => {
149-
LL::insert(transforms![&cfg.wrapsetbase, ident, "("])
150-
}
151-
Ty::WrapSetComputed => LL::insert(transforms![&cfg.wrapcomputedsetfn, "("]),
122+
Ty::WrapPropertyLeft => LL::insert(transforms![&cfg.wrappropertyfn, "("]),
123+
Ty::RewriteProperty { ident } => LL::replace(transforms![&cfg.wrappropertybase,ident]),
124+
152125
Ty::SetRealmFn => LL::insert(transforms![&cfg.setrealmfn, "({})."]),
153126
Ty::ScramErrFn { ident } => LL::insert(transforms!["$scramerr(", ident, ");"]),
154127
Ty::ScramitizeFn => LL::insert(transforms![" $scramitize("]),

rewriter/js/src/rewrite.rs

Lines changed: 13 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,11 @@ pub(crate) enum RewriteType<'alloc: 'data, 'data> {
2727
/// `cfg.metafn("cfg.base")`
2828
MetaFn,
2929

30-
/// `window.attr` -> cfg.wrapattr(window)
31-
WrapGet {
32-
ident: Atom<'data>,
33-
propspan: Span,
34-
enclose: bool,
35-
},
36-
/// `window["attr"]` -> cfg.wrapgetcomputed(window, "attr")
37-
WrapGetComputed {
38-
leftspan: Span,
39-
propspan: Span,
40-
enclose: bool,
41-
},
42-
/// `window.attr` -> cfg.wrapattr(window)
43-
WrapSet {
44-
ident: Atom<'data>,
45-
propspan: Span,
46-
leftspan: Span,
47-
rightspan: Span,
48-
},
49-
/// `cfg.wrapcomputedsetfn(window, "attr", t)`
50-
WrapSetComputed {
51-
propspan: Span,
52-
leftspan: Span,
53-
rightspan: Span,
30+
RewriteProperty {
31+
ident: Atom<'data>,
5432
},
33+
WrapProperty,
34+
5535
// dead code only if debug is disabled
5636
#[allow(dead_code)]
5737
/// `$scramerr(name)`
@@ -102,6 +82,8 @@ impl<'alloc: 'data, 'data> Rewrite<'alloc, 'data> {
10282

10383
impl<'alloc: 'data, 'data> RewriteType<'alloc, 'data> {
10484
fn into_inner(self, span: Span) -> SmallVec<[JsChange<'alloc, 'data>; 2]> {
85+
86+
dbg!(&self);
10587
macro_rules! span {
10688
(start) => {
10789
Span::new(span.start, span.start)
@@ -125,66 +107,13 @@ impl<'alloc: 'data, 'data> RewriteType<'alloc, 'data> {
125107
change!(span!(start), WrapFnLeft { enclose }),
126108
change!(span!(end), WrapFnRight { enclose }),
127109
],
128-
Self::WrapGet {
129-
ident,
130-
propspan,
131-
enclose,
132-
} => smallvec![
133-
change!(span!(start), WrapGetLeft { ident, enclose }),
134-
change!(propspan.expand_left(1), WrapGetRight { enclose }),
135-
],
136-
Self::WrapGetComputed {
137-
leftspan,
138-
propspan,
139-
enclose,
140-
} => smallvec![
141-
change!(span!(start), WrapGetComputedLeft { enclose }),
142-
// replace the bracket with ,
143-
change!(span!(leftspan propspan between), Replace { text: "," }),
144-
// replace the other bracket with )
145-
change!(
146-
Span::new(propspan.end, propspan.end + 1),
147-
ClosingParen {
148-
semi: false,
149-
replace: true
150-
}
151-
),
152-
],
153-
Self::WrapSet {
154-
ident,
155-
propspan,
156-
leftspan,
157-
rightspan,
158-
} => smallvec![
159-
change!(span!(start), WrapSet { ident, propspan }),
160-
change!(propspan, Delete),
161-
change!(span!(leftspan rightspan between), Replace { text: "," }),
162-
change!(
163-
span!(end),
164-
ClosingParen {
165-
semi: false,
166-
replace: true
167-
}
168-
)
169-
],
170-
RewriteType::WrapSetComputed {
171-
leftspan,
172-
rightspan,
173-
propspan,
174-
} => smallvec![
175-
change!(span!(start), WrapSetComputed),
176-
// replace the bracket with ,
177-
change!(span!(leftspan propspan between), Replace { text: "," }),
178-
// replace the other bracket with another ,
179-
change!(span!(propspan rightspan between), Replace { text: "," }),
180-
change!(
181-
span!(end),
182-
ClosingParen {
183-
semi: false,
184-
replace: true
185-
}
186-
)
187-
],
110+
Self::RewriteProperty { ident } => smallvec![
111+
change!(span, RewriteProperty { ident }),
112+
],
113+
Self::WrapProperty => smallvec![
114+
change!(span!(start), WrapPropertyLeft),
115+
change!(span!(end), ClosingParen { semi: false, replace: false }),
116+
],
188117
Self::SetRealmFn => smallvec![change!(span, SetRealmFn)],
189118
Self::ImportFn => smallvec![change!(span, ImportFn)],
190119
Self::MetaFn => smallvec![change!(span, MetaFn)],

rewriter/js/src/visitor.rs

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -130,23 +130,15 @@ where
130130

131131
if UNSAFE_GLOBALS.contains(&s.property.name.as_str()) {
132132
self.jschanges.add(rewrite!(
133-
it.span(),
134-
WrapGet {
135-
ident: s.property.name,
136-
propspan: s.property.span,
137-
enclose: false,
138-
}
133+
s.property.span(),
134+
RewriteProperty { ident: s.property.name }
139135
));
140136
}
141137
}
142138
MemberExpression::ComputedMemberExpression(s) => {
143139
self.jschanges.add(rewrite!(
144-
it.span(),
145-
WrapGetComputed {
146-
leftspan: s.object.span(),
147-
propspan: s.expression.span(),
148-
enclose: false,
149-
}
140+
s.expression.span(),
141+
WrapProperty,
150142
));
151143
}
152144
_ => {} // if !self.flags.strict_rewrites
@@ -314,13 +306,8 @@ where
314306
AssignmentTarget::StaticMemberExpression(s) => {
315307
if UNSAFE_GLOBALS.contains(&s.property.name.as_str()) {
316308
self.jschanges.add(rewrite!(
317-
it.span,
318-
WrapSet {
319-
ident: s.property.name,
320-
propspan: Span::new(s.property.span.start - 1, s.property.span.end),
321-
leftspan: s.span(),
322-
rightspan: it.right.span(),
323-
}
309+
s.property.span(),
310+
RewriteProperty { ident: s.property.name }
324311
));
325312
}
326313

@@ -329,12 +316,8 @@ where
329316
}
330317
AssignmentTarget::ComputedMemberExpression(s) => {
331318
self.jschanges.add(rewrite!(
332-
it.span,
333-
WrapSetComputed {
334-
propspan: s.expression.span(),
335-
leftspan: s.object.span(),
336-
rightspan: it.right.span(),
337-
}
319+
s.expression.span(),
320+
WrapProperty,
338321
));
339322
walk::walk_expression(self, &s.object);
340323
walk::walk_expression(self, &s.expression);

rewriter/native/src/main.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,10 @@ pub struct RewriterOptions {
2525
prefix: String,
2626
#[clap(long, default_value = "$wrap")]
2727
wrapfn: String,
28-
#[clap(long, default_value = "$get_")]
29-
wrapgetbase: String,
30-
#[clap(long, default_value = "$set_")]
31-
wrapsetbase: String,
32-
#[clap(long, default_value = "$computedget")]
33-
wrapcomputedgetfn: String,
34-
#[clap(long, default_value = "$computedset")]
35-
wrapcomputedsetfn: String,
28+
#[clap(long, default_value = "$sj_")]
29+
wrappropertybase: String,
30+
#[clap(long, default_value = "$prop")]
31+
wrappropertyfn: String,
3632
#[clap(long, default_value = "$import")]
3733
importfn: String,
3834
#[clap(long, default_value = "$rewrite")]

rewriter/native/src/rewriter.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,8 @@ impl NativeRewriter {
5252
Config {
5353
prefix: cfg.prefix.clone(),
5454
wrapfn: cfg.wrapfn.clone(),
55-
wrapgetbase: cfg.wrapgetbase.clone(),
56-
wrapsetbase: cfg.wrapsetbase.clone(),
57-
wrapcomputedgetfn: cfg.wrapcomputedgetfn.clone(),
58-
wrapcomputedsetfn: cfg.wrapcomputedsetfn.clone(),
55+
wrappropertybase: cfg.wrappropertybase.clone(),
56+
wrappropertyfn: cfg.wrappropertyfn.clone(),
5957
importfn: cfg.importfn.clone(),
6058
rewritefn: cfg.rewritefn.clone(),
6159
metafn: cfg.metafn.clone(),

0 commit comments

Comments
 (0)