changeset 23000:f981282a3bd0

move octave_dynamic_loader into octave namespace * dynamic-ld.h, dynamic-ld.cc (dynamic_loader): Rename from octave_dynamic_loader. Declare and define inside octave namespace. Change all uses. (dynamic_loader::shlibs_list): Rename from loaded_shlibs_list.
author John W. Eaton <jwe@octave.org>
date Thu, 05 Jan 2017 09:44:42 -0500
parents f4781639f847
children b69e39c3e200
files libinterp/corefcn/dynamic-ld.cc libinterp/corefcn/dynamic-ld.h libinterp/octave-value/ov-dld-fcn.cc libinterp/octave-value/ov-mex-fcn.cc libinterp/parse-tree/oct-parse.in.yy
diffstat 5 files changed, 361 insertions(+), 356 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/corefcn/dynamic-ld.cc	Wed Jan 04 23:09:46 2017 -0500
+++ b/libinterp/corefcn/dynamic-ld.cc	Thu Jan 05 09:44:42 2017 -0500
@@ -47,316 +47,316 @@
 #define STRINGIFY(s) STRINGIFY1(s)
 #define STRINGIFY1(s) #s
 
-void
-octave_dynamic_loader::loaded_shlibs_list::append
-  (const octave::dynamic_library& shl)
-{
-  lib_list.push_back (shl);
-}
-
-void
-octave_dynamic_loader::loaded_shlibs_list::remove
-  (octave::dynamic_library& shl,
-   octave::dynamic_library::close_hook cl_hook)
-{
-  for (iterator p = lib_list.begin (); p != lib_list.end (); p++)
-    {
-      if (*p == shl)
-        {
-          // Erase first to avoid potentially invalidating the pointer by the
-          // following hooks.
-          lib_list.erase (p);
-
-          shl.close (cl_hook);
-
-          break;
-        }
-    }
-}
-
-octave::dynamic_library
-octave_dynamic_loader::loaded_shlibs_list::find_file (const std::string& file_name) const
-{
-  octave::dynamic_library retval;
-
-  for (const auto& lib : lib_list)
-    {
-      if (lib.file_name () == file_name)
-        {
-          retval = lib;
-          break;
-        }
-    }
-
-  return retval;
-}
-
-void
-octave_dynamic_loader::loaded_shlibs_list::display (void) const
-{
-  std::cerr << "current shared libraries:" << std::endl;
-  for (const auto& lib : lib_list)
-    std::cerr << "  " << lib.file_name () << std::endl;
-}
-
-octave_dynamic_loader *octave_dynamic_loader::instance = 0;
-
-bool octave_dynamic_loader::doing_load = false;
-
-bool
-octave_dynamic_loader::instance_ok (void)
-{
-  bool retval = true;
-
-  if (! instance)
-    {
-      instance = new octave_dynamic_loader ();
-
-      if (instance)
-        singleton_cleanup_list::add (cleanup_instance);
-    }
-
-  if (! instance)
-    error ("unable to create dynamic loader object!");
-
-  return retval;
-}
-
-static void
-do_clear_function (const std::string& fcn_name)
-{
-  warning_with_id ("Octave:reload-forces-clear", "  %s", fcn_name.c_str ());
-
-  symbol_table::clear_dld_function (fcn_name);
-}
-
-void
-octave_dynamic_loader::do_clear (octave::dynamic_library& oct_file)
-{
-  if (oct_file.number_of_functions_loaded () > 1)
-    {
-      warning_with_id ("Octave:reload-forces-clear",
-                       "reloading %s clears the following functions:",
-                       oct_file.file_name ().c_str ());
-
-      loaded_shlibs.remove (oct_file, do_clear_function);
-    }
-  else
-    loaded_shlibs.remove (oct_file, symbol_table::clear_dld_function);
-}
-
-octave_function *
-octave_dynamic_loader::do_load_oct (const std::string& fcn_name,
-                                    const std::string& file_name,
-                                    bool relative)
-{
-  octave_function *retval = 0;
-
-  octave::unwind_protect frame;
-
-  frame.protect_var (octave_dynamic_loader::doing_load);
-
-  doing_load = true;
-
-  octave::dynamic_library oct_file = loaded_shlibs.find_file (file_name);
-
-  if (oct_file && oct_file.is_out_of_date ())
-    do_clear (oct_file);
-
-  if (! oct_file)
-    {
-      oct_file.open (file_name);
-
-      if (oct_file)
-        loaded_shlibs.append (oct_file);
-    }
-
-  if (! oct_file)
-    error ("%s is not a valid shared library", file_name.c_str ());
-
-  void *function = oct_file.search (fcn_name, name_mangler);
-
-  if (! function)
-    {
-      // FIXME: can we determine this C mangling scheme
-      // automatically at run time or configure time?
-
-      function = oct_file.search (fcn_name, name_uscore_mangler);
-    }
-
-  if (function)
-    {
-      octave_dld_fcn_getter f
-        = reinterpret_cast<octave_dld_fcn_getter> (function);
-
-      retval = f (oct_file, relative);
-
-      if (! retval)
-        error ("failed to install .oct file function '%s'",
-               fcn_name.c_str ());
-    }
-
-  return retval;
-}
-
-octave_function *
-octave_dynamic_loader::do_load_mex (const std::string& fcn_name,
-                                    const std::string& file_name,
-                                    bool /*relative*/)
+namespace octave
 {
-  octave_function *retval = 0;
-
-  octave::unwind_protect frame;
-
-  frame.protect_var (octave_dynamic_loader::doing_load);
-
-  doing_load = true;
+  void
+  dynamic_loader::shlibs_list::append (const dynamic_library& shl)
+  {
+    lib_list.push_back (shl);
+  }
 
-  octave::dynamic_library mex_file = loaded_shlibs.find_file (file_name);
+  void
+  dynamic_loader::shlibs_list::remove (dynamic_library& shl,
+                                       dynamic_library::close_hook cl_hook)
+  {
+    for (iterator p = lib_list.begin (); p != lib_list.end (); p++)
+      {
+        if (*p == shl)
+          {
+            // Erase first to avoid potentially invalidating the pointer by the
+            // following hooks.
+            lib_list.erase (p);
 
-  if (mex_file && mex_file.is_out_of_date ())
-    do_clear (mex_file);
+            shl.close (cl_hook);
 
-  if (! mex_file)
-    {
-      mex_file.open (file_name);
+            break;
+          }
+      }
+  }
+
+  dynamic_library
+  dynamic_loader::shlibs_list::find_file (const std::string& file_name) const
+  {
+    dynamic_library retval;
 
-      if (mex_file)
-        loaded_shlibs.append (mex_file);
-    }
+    for (const auto& lib : lib_list)
+      {
+        if (lib.file_name () == file_name)
+          {
+            retval = lib;
+            break;
+          }
+      }
 
-  if (! mex_file)
-    error ("%s is not a valid shared library", file_name.c_str ());
+    return retval;
+  }
 
-  void *function = 0;
+  void
+  dynamic_loader::shlibs_list::display (void) const
+  {
+    std::cerr << "current shared libraries:" << std::endl;
+    for (const auto& lib : lib_list)
+      std::cerr << "  " << lib.file_name () << std::endl;
+  }
 
-  bool have_fmex = false;
+  dynamic_loader *dynamic_loader::instance = 0;
+
+  bool dynamic_loader::doing_load = false;
 
-  function = mex_file.search (fcn_name, mex_mangler);
+  bool
+  dynamic_loader::instance_ok (void)
+  {
+    bool retval = true;
 
-  if (! function)
-    {
-      // FIXME: can we determine this C mangling scheme
-      // automatically at run time or configure time?
+    if (! instance)
+      {
+        instance = new dynamic_loader ();
 
-      function = mex_file.search (fcn_name, mex_uscore_mangler);
+        if (instance)
+          singleton_cleanup_list::add (cleanup_instance);
+      }
+
+    if (! instance)
+      error ("unable to create dynamic loader object!");
+
+    return retval;
+  }
 
-      if (! function)
-        {
-          function = mex_file.search (fcn_name, mex_f77_mangler);
+  void
+  dynamic_loader::do_clear_function (const std::string& fcn_name)
+  {
+    warning_with_id ("Octave:reload-forces-clear", "  %s", fcn_name.c_str ());
+
+    symbol_table::clear_dld_function (fcn_name);
+  }
+
+  void
+  dynamic_loader::do_clear (dynamic_library& oct_file)
+  {
+    if (oct_file.number_of_functions_loaded () > 1)
+      {
+        warning_with_id ("Octave:reload-forces-clear",
+                         "reloading %s clears the following functions:",
+                         oct_file.file_name ().c_str ());
 
-          if (function)
-            have_fmex = true;
-        }
-    }
+        loaded_shlibs.remove (oct_file, do_clear_function);
+      }
+    else
+      loaded_shlibs.remove (oct_file, symbol_table::clear_dld_function);
+  }
 
-  if (function)
-    retval = new octave_mex_function (function, have_fmex, mex_file, fcn_name);
-  else
-    error ("failed to install .mex file function '%s'", fcn_name.c_str ());
+  octave_function *
+  dynamic_loader::do_load_oct (const std::string& fcn_name,
+                               const std::string& file_name,
+                               bool relative)
+  {
+    octave_function *retval = 0;
 
-  return retval;
-}
+    unwind_protect frame;
+
+    frame.protect_var (dynamic_loader::doing_load);
+
+    doing_load = true;
+
+    dynamic_library oct_file = loaded_shlibs.find_file (file_name);
 
-bool
-octave_dynamic_loader::do_remove_oct (const std::string& fcn_name,
-                                      octave::dynamic_library& shl)
-{
-  bool retval = false;
+    if (oct_file && oct_file.is_out_of_date ())
+      do_clear (oct_file);
+
+    if (! oct_file)
+      {
+        oct_file.open (file_name);
 
-  // We don't need to do anything if this is called because we are in
-  // the process of reloading a .oct file that has changed.
+        if (oct_file)
+          loaded_shlibs.append (oct_file);
+      }
+
+    if (! oct_file)
+      error ("%s is not a valid shared library", file_name.c_str ());
+
+    void *function = oct_file.search (fcn_name, name_mangler);
 
-  if (! doing_load)
-    {
-      retval = shl.remove (fcn_name);
+    if (! function)
+      {
+        // FIXME: can we determine this C mangling scheme
+        // automatically at run time or configure time?
+
+        function = oct_file.search (fcn_name, name_uscore_mangler);
+      }
 
-      if (shl.number_of_functions_loaded () == 0)
-        loaded_shlibs.remove (shl);
-    }
+    if (function)
+      {
+        octave_dld_fcn_getter f
+          = reinterpret_cast<octave_dld_fcn_getter> (function);
+
+        retval = f (oct_file, relative);
 
-  return retval;
-}
+        if (! retval)
+          error ("failed to install .oct file function '%s'",
+                 fcn_name.c_str ());
+      }
+
+    return retval;
+  }
 
-bool
-octave_dynamic_loader::do_remove_mex (const std::string& fcn_name,
-                                      octave::dynamic_library& shl)
-{
-  bool retval = false;
+  octave_function *
+  dynamic_loader::do_load_mex (const std::string& fcn_name,
+                               const std::string& file_name,
+                               bool /*relative*/)
+  {
+    octave_function *retval = 0;
+
+    unwind_protect frame;
+
+    frame.protect_var (dynamic_loader::doing_load);
+
+    doing_load = true;
+
+    dynamic_library mex_file = loaded_shlibs.find_file (file_name);
 
-  // We don't need to do anything if this is called because we are in
-  // the process of reloading a .oct file that has changed.
+    if (mex_file && mex_file.is_out_of_date ())
+      do_clear (mex_file);
+
+    if (! mex_file)
+      {
+        mex_file.open (file_name);
 
-  if (! doing_load)
-    {
-      retval = shl.remove (fcn_name);
+        if (mex_file)
+          loaded_shlibs.append (mex_file);
+      }
 
-      if (shl.number_of_functions_loaded () == 0)
-        loaded_shlibs.remove (shl);
-    }
+    if (! mex_file)
+      error ("%s is not a valid shared library", file_name.c_str ());
+
+    void *function = 0;
+
+    bool have_fmex = false;
+
+    function = mex_file.search (fcn_name, mex_mangler);
 
-  return retval;
-}
+    if (! function)
+      {
+        // FIXME: can we determine this C mangling scheme
+        // automatically at run time or configure time?
+
+        function = mex_file.search (fcn_name, mex_uscore_mangler);
+
+        if (! function)
+          {
+            function = mex_file.search (fcn_name, mex_f77_mangler);
+
+            if (function)
+              have_fmex = true;
+          }
+      }
+
+    if (function)
+      retval = new octave_mex_function (function, have_fmex, mex_file, fcn_name);
+    else
+      error ("failed to install .mex file function '%s'", fcn_name.c_str ());
 
-octave_function *
-octave_dynamic_loader::load_oct (const std::string& fcn_name,
-                                 const std::string& file_name,
-                                 bool relative)
-{
-  return (instance_ok ())
-         ? instance->do_load_oct (fcn_name, file_name, relative) : 0;
-}
+    return retval;
+  }
+
+  bool
+  dynamic_loader::do_remove_oct (const std::string& fcn_name,
+                                 dynamic_library& shl)
+  {
+    bool retval = false;
 
-octave_function *
-octave_dynamic_loader::load_mex (const std::string& fcn_name,
-                                 const std::string& file_name,
-                                 bool relative)
-{
-  return (instance_ok ())
-         ? instance->do_load_mex (fcn_name, file_name, relative) : 0;
-}
+    // We don't need to do anything if this is called because we are in
+    // the process of reloading a .oct file that has changed.
+
+    if (! doing_load)
+      {
+        retval = shl.remove (fcn_name);
+
+        if (shl.number_of_functions_loaded () == 0)
+          loaded_shlibs.remove (shl);
+      }
+
+    return retval;
+  }
 
-bool
-octave_dynamic_loader::remove_oct (const std::string& fcn_name,
-                                   octave::dynamic_library& shl)
-{
-  return (instance_ok ()) ? instance->do_remove_oct (fcn_name, shl) : false;
-}
+  bool
+  dynamic_loader::do_remove_mex (const std::string& fcn_name,
+                                 dynamic_library& shl)
+  {
+    bool retval = false;
+
+    // We don't need to do anything if this is called because we are in
+    // the process of reloading a .oct file that has changed.
+
+    if (! doing_load)
+      {
+        retval = shl.remove (fcn_name);
+
+        if (shl.number_of_functions_loaded () == 0)
+          loaded_shlibs.remove (shl);
+      }
 
-bool
-octave_dynamic_loader::remove_mex (const std::string& fcn_name,
-                                   octave::dynamic_library& shl)
-{
-  return (instance_ok ()) ? instance->do_remove_mex (fcn_name, shl) : false;
-}
+    return retval;
+  }
 
-std::string
-octave_dynamic_loader::name_mangler (const std::string& name)
-{
-  return "G" + name;
-}
+  octave_function *
+  dynamic_loader::load_oct (const std::string& fcn_name,
+                            const std::string& file_name,
+                            bool relative)
+  {
+    return (instance_ok ())
+      ? instance->do_load_oct (fcn_name, file_name, relative) : 0;
+  }
+
+  octave_function *
+  dynamic_loader::load_mex (const std::string& fcn_name,
+                            const std::string& file_name,
+                            bool relative)
+  {
+    return (instance_ok ())
+      ? instance->do_load_mex (fcn_name, file_name, relative) : 0;
+  }
 
-std::string
-octave_dynamic_loader::name_uscore_mangler (const std::string& name)
-{
-  return "_G" + name;
-}
+  bool
+  dynamic_loader::remove_oct (const std::string& fcn_name,
+                              dynamic_library& shl)
+  {
+    return (instance_ok ()) ? instance->do_remove_oct (fcn_name, shl) : false;
+  }
 
-std::string
-octave_dynamic_loader::mex_mangler (const std::string&)
-{
-  return "mexFunction";
-}
+  bool
+  dynamic_loader::remove_mex (const std::string& fcn_name,
+                              dynamic_library& shl)
+  {
+    return (instance_ok ()) ? instance->do_remove_mex (fcn_name, shl) : false;
+  }
+
+  std::string
+  dynamic_loader::name_mangler (const std::string& name)
+  {
+    return "G" + name;
+  }
 
-std::string
-octave_dynamic_loader::mex_uscore_mangler (const std::string&)
-{
-  return "_mexFunction";
-}
+  std::string
+  dynamic_loader::name_uscore_mangler (const std::string& name)
+  {
+    return "_G" + name;
+  }
+
+  std::string
+  dynamic_loader::mex_mangler (const std::string&)
+  {
+    return "mexFunction";
+  }
 
-std::string
-octave_dynamic_loader::mex_f77_mangler (const std::string&)
-{
-  return STRINGIFY (F77_FUNC (mexfunction, MEXFUNCTION));
+  std::string
+  dynamic_loader::mex_uscore_mangler (const std::string&)
+  {
+    return "_mexFunction";
+  }
+
+  std::string
+  dynamic_loader::mex_f77_mangler (const std::string&)
+  {
+    return STRINGIFY (F77_FUNC (mexfunction, MEXFUNCTION));
+  }
 }
-
--- a/libinterp/corefcn/dynamic-ld.h	Wed Jan 04 23:09:46 2017 -0500
+++ b/libinterp/corefcn/dynamic-ld.h	Thu Jan 05 09:44:42 2017 -0500
@@ -32,114 +32,119 @@
 
 class octave_function;
 
-class
-octave_dynamic_loader
+namespace octave
 {
-private:
-
   class
-  loaded_shlibs_list
+  dynamic_loader
   {
-  public:
+  private:
+
+    class
+    shlibs_list
+    {
+    public:
 
-    typedef std::list<octave::dynamic_library>::iterator iterator;
-    typedef std::list<octave::dynamic_library>::const_iterator const_iterator;
+      typedef std::list<octave::dynamic_library>::iterator iterator;
+      typedef std::list<octave::dynamic_library>::const_iterator const_iterator;
+
+      shlibs_list (void) : lib_list () { }
+
+      ~shlibs_list (void) = default;
+
+      void append (const octave::dynamic_library& shl);
 
-    loaded_shlibs_list (void) : lib_list () { }
+      void remove (octave::dynamic_library& shl,
+                   octave::dynamic_library::close_hook cl_hook = 0);
+
+      octave::dynamic_library find_file (const std::string& file_name) const;
 
-    ~loaded_shlibs_list (void) = default;
+      void display (void) const;
 
-    void append (const octave::dynamic_library& shl);
+    private:
+
+      // No copying!
 
-    void remove (octave::dynamic_library& shl,
-                 octave::dynamic_library::close_hook cl_hook = 0);
+      shlibs_list (const shlibs_list&) = delete;
+
+      shlibs_list& operator = (const shlibs_list&) = delete;
 
-    octave::dynamic_library find_file (const std::string& file_name) const;
+      // List of libraries we have loaded.
+      std::list<octave::dynamic_library> lib_list;
+    };
 
-    void display (void) const;
+  protected:
 
-  private:
+    dynamic_loader (void) : loaded_shlibs () { }
+
+  public:
 
     // No copying!
 
-    loaded_shlibs_list (const loaded_shlibs_list&) = delete;
-
-    loaded_shlibs_list& operator = (const loaded_shlibs_list&) = delete;
+    dynamic_loader (const dynamic_loader&) = delete;
 
-    // List of libraries we have loaded.
-    std::list<octave::dynamic_library> lib_list;
-  };
+    dynamic_loader& operator = (const dynamic_loader&) = delete;
+
+    virtual ~dynamic_loader (void) = default;
 
-protected:
-
-  octave_dynamic_loader (void) : loaded_shlibs () { }
+    static octave_function *
+    load_oct (const std::string& fcn_name,
+              const std::string& file_name = "",
+              bool relative = false);
 
-public:
-
-  // No copying!
-
-  octave_dynamic_loader (const octave_dynamic_loader&) = delete;
+    static octave_function *
+    load_mex (const std::string& fcn_name,
+              const std::string& file_name = "",
+              bool relative = false);
 
-  octave_dynamic_loader& operator = (const octave_dynamic_loader&) = delete;
-
-  virtual ~octave_dynamic_loader (void) = default;
+    static bool remove_oct (const std::string& fcn_name,
+                            octave::dynamic_library& shl);
 
-  static octave_function *
-  load_oct (const std::string& fcn_name,
-            const std::string& file_name = "",
-            bool relative = false);
+    static bool remove_mex (const std::string& fcn_name,
+                            octave::dynamic_library& shl);
+
+  private:
 
-  static octave_function *
-  load_mex (const std::string& fcn_name,
-            const std::string& file_name = "",
-            bool relative = false);
+    static dynamic_loader *instance;
+
+    static void cleanup_instance (void) { delete instance; instance = 0; }
 
-  static bool remove_oct (const std::string& fcn_name,
-                          octave::dynamic_library& shl);
+    static bool instance_ok (void);
 
-  static bool remove_mex (const std::string& fcn_name,
-                          octave::dynamic_library& shl);
+    static void do_clear_function (const std::string& fcn_name);
 
-private:
-
-  static octave_dynamic_loader *instance;
+    void do_clear (octave::dynamic_library& oct_file);
 
-  static void cleanup_instance (void) { delete instance; instance = 0; }
-
-  static bool instance_ok (void);
-
-  void do_clear (octave::dynamic_library& oct_file);
+    octave_function *
+    do_load_oct (const std::string& fcn_name,
+                 const std::string& file_name = "",
+                 bool relative = false);
 
-  octave_function *
-  do_load_oct (const std::string& fcn_name,
-               const std::string& file_name = "",
-               bool relative = false);
+    octave_function *
+    do_load_mex (const std::string& fcn_name,
+                 const std::string& file_name = "",
+                 bool relative = false);
 
-  octave_function *
-  do_load_mex (const std::string& fcn_name,
-               const std::string& file_name = "",
-               bool relative = false);
+    bool do_remove_oct (const std::string& fcn_name, octave::dynamic_library& shl);
+
+    bool do_remove_mex (const std::string& fcn_name, octave::dynamic_library& shl);
 
-  bool do_remove_oct (const std::string& fcn_name, octave::dynamic_library& shl);
+    static bool doing_load;
 
-  bool do_remove_mex (const std::string& fcn_name, octave::dynamic_library& shl);
+  protected:
 
-  static bool doing_load;
+    shlibs_list loaded_shlibs;
 
-protected:
-
-  loaded_shlibs_list loaded_shlibs;
+    static std::string name_mangler (const std::string& name);
 
-  static std::string name_mangler (const std::string& name);
+    static std::string name_uscore_mangler (const std::string& name);
 
-  static std::string name_uscore_mangler (const std::string& name);
+    static std::string mex_mangler (const std::string& name);
 
-  static std::string mex_mangler (const std::string& name);
+    static std::string mex_uscore_mangler (const std::string& name);
 
-  static std::string mex_uscore_mangler (const std::string& name);
-
-  static std::string mex_f77_mangler (const std::string& name);
-};
+    static std::string mex_f77_mangler (const std::string& name);
+  };
+}
 
 #endif
 
--- a/libinterp/octave-value/ov-dld-fcn.cc	Wed Jan 04 23:09:46 2017 -0500
+++ b/libinterp/octave-value/ov-dld-fcn.cc	Thu Jan 05 09:44:42 2017 -0500
@@ -54,7 +54,7 @@
 
 octave_dld_function::~octave_dld_function (void)
 {
-  octave_dynamic_loader::remove_oct (my_name, sh_lib);
+  octave::dynamic_loader::remove_oct (my_name, sh_lib);
 }
 
 std::string
--- a/libinterp/octave-value/ov-mex-fcn.cc	Wed Jan 04 23:09:46 2017 -0500
+++ b/libinterp/octave-value/ov-mex-fcn.cc	Thu Jan 05 09:44:42 2017 -0500
@@ -62,7 +62,7 @@
   if (exit_fcn_ptr)
     (*exit_fcn_ptr) ();
 
-  octave_dynamic_loader::remove_mex (my_name, sh_lib);
+  octave::dynamic_loader::remove_mex (my_name, sh_lib);
 }
 
 std::string
--- a/libinterp/parse-tree/oct-parse.in.yy	Wed Jan 04 23:09:46 2017 -0500
+++ b/libinterp/parse-tree/oct-parse.in.yy	Thu Jan 05 09:44:42 2017 -0500
@@ -4367,7 +4367,7 @@
       if (autoload && ! fcn_name.empty ())
         nm = fcn_name;
 
-      retval = octave_dynamic_loader::load_oct (nm, file, relative_lookup);
+      retval = octave::dynamic_loader::load_oct (nm, file, relative_lookup);
     }
   else if (len > 4 && file.substr (len-4, len-1) == ".mex")
     {
@@ -4380,7 +4380,7 @@
                                                 autoload, autoload,
                                                 relative_lookup, "");
 
-      retval = octave_dynamic_loader::load_mex (nm, file, relative_lookup);
+      retval = octave::dynamic_loader::load_mex (nm, file, relative_lookup);
 
       if (tmpfcn)
         retval->document (tmpfcn->doc_string ());