Skip to content

Commit 65a5b14

Browse files
committed
fix
1 parent 12098b3 commit 65a5b14

File tree

4 files changed

+16
-22
lines changed

4 files changed

+16
-22
lines changed

Diff for: crates/tree_shaker/src/consumable/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ pub struct Consumable<'a>(pub &'a (dyn ConsumableTrait<'a> + 'a));
1919
pub type ConsumableVec<'a> = Vec<Consumable<'a>>;
2020

2121
impl<'a> Analyzer<'a> {
22+
#[inline]
2223
pub fn consume(&mut self, dep: impl ConsumableTrait<'a> + 'a) {
2324
dep.consume(self);
2425
}

Diff for: crates/tree_shaker/src/entity/factory.rs

-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,6 @@ impl<'a> EntityFactory<'a> {
154154
consumable,
155155
consumed: Cell::new(false),
156156
consumed_as_prototype: Cell::new(false),
157-
pending_clear: Cell::new(false),
158157
cf_scope: CfScopeId::new(0),
159158
object_id,
160159
string_keyed: Default::default(),

Diff for: crates/tree_shaker/src/entity/object/mod.rs

+6-16
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ pub struct ObjectEntity<'a> {
5151
pub consumable: bool,
5252
pub consumed: Cell<bool>,
5353
pub consumed_as_prototype: Cell<bool>,
54-
pub pending_clear: Cell<bool>,
5554
// deps: RefCell<ConsumableCollector<'a>>,
5655
/// Where the object is created
5756
pub cf_scope: CfScopeId,
@@ -80,13 +79,8 @@ impl<'a> EntityTrait<'a> for ObjectEntity<'a> {
8079

8180
self.consume_as_prototype(analyzer);
8281

83-
// FIXME: Need a better way to do this
84-
if let Ok(mut string_keyed) = self.string_keyed.try_borrow_mut() {
85-
string_keyed.clear();
86-
self.unknown_keyed.take();
87-
} else {
88-
self.pending_clear.set(true);
89-
}
82+
self.string_keyed.borrow_mut().clear();
83+
self.unknown_keyed.take();
9084

9185
analyzer.mark_object_consumed(self.cf_scope, self.object_id);
9286
}
@@ -257,15 +251,12 @@ impl<'a> ObjectEntity<'a> {
257251

258252
self.prototype.get().consume(analyzer);
259253

254+
let mut suspended = vec![];
260255
for property in self.string_keyed.borrow().values() {
261-
property.consume(analyzer);
262-
}
263-
self.unknown_keyed.borrow().consume(analyzer);
264-
265-
if self.pending_clear.replace(false) {
266-
self.string_keyed.borrow_mut().clear();
267-
self.unknown_keyed.take();
256+
property.consume(analyzer, &mut suspended);
268257
}
258+
self.unknown_keyed.borrow().consume(analyzer, &mut suspended);
259+
analyzer.consume(suspended);
269260
}
270261

271262
pub fn is_mangable(&self) -> bool {
@@ -312,7 +303,6 @@ impl<'a> Analyzer<'a> {
312303
consumable: true,
313304
consumed: Cell::new(false),
314305
consumed_as_prototype: Cell::new(false),
315-
pending_clear: Cell::new(false),
316306
// deps: Default::default(),
317307
cf_scope: self.scoping.cf.current_id(),
318308
object_id: self.scoping.alloc_object_id(),

Diff for: crates/tree_shaker/src/entity/object/property.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -172,21 +172,25 @@ impl<'a> ObjectProperty<'a> {
172172
self.non_existent.push(dep);
173173
}
174174

175-
pub fn consume(&self, analyzer: &mut Analyzer<'a>) {
175+
pub fn consume(&self, analyzer: &mut Analyzer<'a>, suspended: &mut Vec<Entity<'a>>) {
176176
for &possible_value in &self.possible_values {
177177
match possible_value {
178-
ObjectPropertyValue::Field(value, _) => analyzer.consume(value),
178+
ObjectPropertyValue::Field(value, _) => suspended.push(value),
179179
ObjectPropertyValue::Property(getter, setter) => {
180-
analyzer.consume(getter);
181-
analyzer.consume(setter);
180+
if let Some(getter) = getter {
181+
suspended.push(getter);
182+
}
183+
if let Some(setter) = setter {
184+
suspended.push(setter);
185+
}
182186
}
183187
}
184188
}
185189

186190
self.non_existent.consume_all(analyzer);
187191

188192
if let Some(key) = self.key {
189-
analyzer.consume(key);
193+
suspended.push(key);
190194
}
191195
}
192196
}

0 commit comments

Comments
 (0)