diff --git a/libinterp/octave-value/ov-fcn-handle.cc b/libinterp/octave-value/ov-fcn-handle.cc --- a/libinterp/octave-value/ov-fcn-handle.cc +++ b/libinterp/octave-value/ov-fcn-handle.cc @@ -2056,19 +2056,25 @@ octave_fcn_binder::maybe_binder (const o { // It's a name. std::string head_name = head_id->name (); - // Function handles can't handle legacy dispatch, so - // we make sure it's not defined. - if (symbol_table::get_dispatch (head_name).size () > 0) + + if (head_name == "eval" || head_name == "feval") bad = true; else { - // Simulate try/catch. - unwind_protect frame; - interpreter_try (frame); + // Function handles can't handle legacy dispatch, so + // we make sure it's not defined. + if (symbol_table::get_dispatch (head_name).size () > 0) + bad = true; + else + { + // Simulate try/catch. + unwind_protect frame; + interpreter_try (frame); - root_val = make_fcn_handle (head_name); - if (error_state) - bad = true; + root_val = make_fcn_handle (head_name); + if (error_state) + bad = true; + } } } }