diff --git a/boa/src/exec/mod.rs b/boa/src/exec/mod.rs index fc244830e76..0f8695b4708 100644 --- a/boa/src/exec/mod.rs +++ b/boa/src/exec/mod.rs @@ -173,7 +173,7 @@ impl Interpreter { } self.throw_type_error("not a function") } - _ => Err(Value::undefined()), + _ => self.throw_type_error("not a function"), } } diff --git a/boa/src/exec/tests.rs b/boa/src/exec/tests.rs index 484f3a8aa95..efc6b8e0603 100644 --- a/boa/src/exec/tests.rs +++ b/boa/src/exec/tests.rs @@ -1128,3 +1128,38 @@ fn check_this_binding_in_object_literal() { assert_eq!(forward(&mut engine, init), "8"); } + +#[test] +fn not_a_function() { + let realm = Realm::create(); + let mut engine = Interpreter::new(realm); + let init = r#" + let a = {}; + let b = true; + "#; + forward(&mut engine, init); + let scenario = r#" + try { + a(); + } catch(e) { + e.message + } + "#; + assert_eq!(forward(&mut engine, scenario), "not a function"); + let scenario = r#" + try { + a.a(); + } catch(e) { + e.message + } + "#; + assert_eq!(forward(&mut engine, scenario), "not a function"); + let scenario = r#" + try { + b(); + } catch(e) { + e.message + } + "#; + assert_eq!(forward(&mut engine, scenario), "not a function"); +}