@@ -99,7 +99,14 @@ impl Visitors<JsObject> {
99
99
fn named ( & self , stage : VisitStage , name : & str ) -> Option < JsFunction > {
100
100
self
101
101
. for_stage ( stage)
102
- . and_then ( |m| m. get_named_property :: < JsFunction > ( name) . ok ( ) )
102
+ . and_then ( |m| m. get_named_property :: < JsUnknown > ( name) . ok ( ) )
103
+ . and_then ( |v| {
104
+ if let Ok ( ValueType :: Function ) = v. get_type ( ) {
105
+ v. try_into ( ) . ok ( )
106
+ } else {
107
+ None
108
+ }
109
+ } )
103
110
}
104
111
105
112
fn custom ( & self , stage : VisitStage , obj : & str , name : & str ) -> Option < JsFunction > {
@@ -177,7 +184,14 @@ impl JsVisitor {
177
184
let mut types = VisitTypes :: empty ( ) ;
178
185
macro_rules! get {
179
186
( $name: literal, $( $t: ident ) |+) => { {
180
- let res: Option <JsFunction > = visitor. get_named_property( $name) . ok( ) ;
187
+ let res: Option <JsFunction > = visitor. get_named_property:: <JsUnknown >( $name) . ok( ) . and_then( |v| {
188
+ if let Ok ( ValueType :: Function ) = v. get_type( ) {
189
+ v. try_into( ) . ok( )
190
+ } else {
191
+ None
192
+ }
193
+ } ) ;
194
+
181
195
if res. is_some( ) {
182
196
types |= $( VisitTypes :: $t ) |+;
183
197
}
@@ -190,12 +204,19 @@ impl JsVisitor {
190
204
191
205
macro_rules! map {
192
206
( $name: literal, $( $t: ident ) |+) => { {
193
- if let Ok ( obj) = visitor. get_named_property:: <JsObject >( $name) {
207
+ let obj: Option <JsObject > = visitor. get_named_property:: <JsUnknown >( $name) . ok( ) . and_then( |v| {
208
+ if let Ok ( ValueType :: Object ) = v. get_type( ) {
209
+ v. try_into( ) . ok( )
210
+ } else {
211
+ None
212
+ }
213
+ } ) ;
214
+
215
+ if obj. is_some( ) {
194
216
types |= $( VisitTypes :: $t ) |+;
195
- env. create_reference( obj) . ok( )
196
- } else {
197
- None
198
217
}
218
+
219
+ obj. and_then( |obj| env. create_reference( obj) . ok( ) )
199
220
} } ;
200
221
}
201
222
0 commit comments