@@ -99,7 +99,14 @@ impl Visitors<JsObject> {
9999 fn named ( & self , stage : VisitStage , name : & str ) -> Option < JsFunction > {
100100 self
101101 . 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+ } )
103110 }
104111
105112 fn custom ( & self , stage : VisitStage , obj : & str , name : & str ) -> Option < JsFunction > {
@@ -177,7 +184,14 @@ impl JsVisitor {
177184 let mut types = VisitTypes :: empty ( ) ;
178185 macro_rules! get {
179186 ( $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+
181195 if res. is_some( ) {
182196 types |= $( VisitTypes :: $t ) |+;
183197 }
@@ -190,12 +204,19 @@ impl JsVisitor {
190204
191205 macro_rules! map {
192206 ( $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( ) {
194216 types |= $( VisitTypes :: $t ) |+;
195- env. create_reference( obj) . ok( )
196- } else {
197- None
198217 }
218+
219+ obj. and_then( |obj| env. create_reference( obj) . ok( ) )
199220 } } ;
200221 }
201222
0 commit comments