1
- use super :: ObjectEntity ;
1
+ use super :: { get :: GetPropertyContext , ObjectEntity } ;
2
2
use crate :: {
3
3
analyzer:: Analyzer ,
4
4
consumable:: Consumable ,
@@ -21,25 +21,31 @@ impl<'a> ObjectEntity<'a> {
21
21
analyzer. push_cf_scope_with_deps ( CfScopeKind :: Dependent , vec ! [ dep] , None ) ;
22
22
23
23
let mut result = vec ! [ ] ;
24
- let mut non_existent = vec ! [ ] ;
24
+ let mut context = GetPropertyContext {
25
+ key : analyzer. factory . never ,
26
+ values : vec ! [ ] ,
27
+ getters : vec ! [ ] ,
28
+ extra_deps : vec ! [ ] ,
29
+ } ;
25
30
26
31
{
27
- let mut values = vec ! [ ] ;
28
- let mut getters = vec ! [ ] ;
29
-
30
32
{
31
33
let mut unknown_keyed = self . unknown_keyed . borrow_mut ( ) ;
32
- unknown_keyed. get ( analyzer, & mut values , & mut getters , & mut non_existent ) ;
34
+ unknown_keyed. get ( analyzer, & mut context , None ) ;
33
35
if let Some ( rest) = & mut * self . rest . borrow_mut ( ) {
34
- rest. get ( analyzer, & mut values , & mut getters , & mut non_existent ) ;
36
+ rest. get ( analyzer, & mut context , None ) ;
35
37
}
36
38
}
37
39
38
- for getter in getters {
39
- values. push ( getter. call_as_getter ( analyzer, analyzer. factory . empty_consumable , self ) ) ;
40
+ for getter in context. getters . drain ( ..) {
41
+ context. values . push ( getter. call_as_getter (
42
+ analyzer,
43
+ analyzer. factory . empty_consumable ,
44
+ self ,
45
+ ) ) ;
40
46
}
41
47
42
- if let Some ( value) = analyzer. factory . try_union ( values) {
48
+ if let Some ( value) = analyzer. factory . try_union ( mem :: take ( & mut context . values ) ) {
43
49
result. push ( ( false , analyzer. factory . unknown_primitive , value) ) ;
44
50
}
45
51
}
@@ -64,22 +70,24 @@ impl<'a> ObjectEntity<'a> {
64
70
analyzer. factory . string ( key)
65
71
} ;
66
72
67
- let mut values = vec ! [ ] ;
68
- let mut getters = vec ! [ ] ;
69
- property. get ( analyzer, & mut values, & mut getters, & mut non_existent) ;
73
+ property. get ( analyzer, & mut context, None ) ;
70
74
mem:: drop ( string_keyed) ;
71
- for getter in getters {
72
- values. push ( getter. call_as_getter ( analyzer, analyzer. factory . empty_consumable , self ) ) ;
75
+ for getter in context. getters . drain ( ..) {
76
+ context. values . push ( getter. call_as_getter (
77
+ analyzer,
78
+ analyzer. factory . empty_consumable ,
79
+ self ,
80
+ ) ) ;
73
81
}
74
82
75
- if let Some ( value) = analyzer. factory . try_union ( values) {
83
+ if let Some ( value) = analyzer. factory . try_union ( mem :: take ( & mut context . values ) ) {
76
84
result. push ( ( definite, key_entity, value) ) ;
77
85
}
78
86
}
79
87
}
80
88
81
89
analyzer. pop_cf_scope ( ) ;
82
90
83
- ( result, analyzer. consumable ( ( dep, non_existent ) ) )
91
+ ( result, analyzer. consumable ( ( dep, context . extra_deps ) ) )
84
92
}
85
93
}
0 commit comments