diff --git a/libinterp/corefcn/fcn-info.cc b/libinterp/corefcn/fcn-info.cc --- a/libinterp/corefcn/fcn-info.cc +++ b/libinterp/corefcn/fcn-info.cc @@ -43,6 +43,8 @@ #include "symtab.h" #include "utils.h" +extern size_t mk_abs_fcn_info; + // Should Octave always check to see if function files have changed // since they were last compiled? static int Vignore_function_time_stamp = 1; @@ -86,7 +88,8 @@ namespace octave tmpfcn->mark_as_private_function (class_name); - private_functions[octave::sys::canonicalize_file_name (dir_name)] = ov_fcn; + ++mk_abs_fcn_info; + private_functions[octave::sys::env::make_absolute (dir_name)] = ov_fcn; return ov_fcn; } diff --git a/libinterp/corefcn/load-path.cc b/libinterp/corefcn/load-path.cc --- a/libinterp/corefcn/load-path.cc +++ b/libinterp/corefcn/load-path.cc @@ -27,6 +27,8 @@ # include "config.h" #endif +#include + #include #include "dir-ops.h" @@ -48,6 +50,29 @@ #include "unwind-prot.h" #include "utils.h" +size_t mk_abs_fcn_info = 0; +size_t mk_abs_load_path_pi_remove = 0; +size_t mk_abs_load_path_pi_find_private_fcn = 0; +size_t mk_abs_load_path_pi_find_private_fcn_already_absolute = 0; +size_t mk_abs_load_path_pi_add_to_private_fcn_map = 0; +size_t mk_abs_load_path_pi_add_to_method_map = 0; +size_t mk_abs_load_path_pi_remoave_private_fcn_map = 0; +size_t mk_abs_symscope = 0; + +DEFUN (show_stats, , , "") +{ + std::cerr << "mk_abs_fcn_info = " << mk_abs_fcn_info << "\n" + << "mk_abs_symscope = " << mk_abs_symscope << "\n" + << "mk_abs_load_path_pi_remove = " << mk_abs_load_path_pi_remove << "\n" + << "mk_abs_load_path_pi_find_private_fcn = " << mk_abs_load_path_pi_find_private_fcn << "\n" + << "mk_abs_load_path_pi_find_private_fcn_already_absolute = " << mk_abs_load_path_pi_find_private_fcn_already_absolute << "\n" + << "mk_abs_load_path_pi_add_to_private_fcn_map = " << mk_abs_load_path_pi_add_to_private_fcn_map << "\n" + << "mk_abs_load_path_pi_add_to_method_map = " << mk_abs_load_path_pi_add_to_method_map << "\n" + << "mk_abs_load_path_pi_remoave_private_fcn_map = " << mk_abs_load_path_pi_remoave_private_fcn_map << std::endl; + + return ovl (); +} + namespace octave { // Canonicalize file name (keeping the path relative) if it exists. @@ -1565,7 +1590,8 @@ namespace octave remove_fcn_map (dir, fcn_files); - remove_private_fcn_map (sys::canonicalize_file_name (dir)); + ++mk_abs_load_path_pi_remove; + remove_private_fcn_map (sys::env::make_absolute (dir)); remove_method_map (dir); } @@ -1695,10 +1721,13 @@ namespace octave { std::string retval; + if (sys::env::absolute_pathname (dir)) + ++mk_abs_load_path_pi_find_private_fcn_already_absolute; // update (); - std::string canon_dir = sys::canonicalize_file_name (dir); - - const_private_fcn_map_iterator q = private_fcn_map.find (canon_dir); + ++mk_abs_load_path_pi_find_private_fcn; + std::string abs_dir = sys::env::make_absolute (dir); + + const_private_fcn_map_iterator q = private_fcn_map.find (abs_dir); if (q != private_fcn_map.end ()) { @@ -1709,7 +1738,7 @@ namespace octave if (p != fcn_file_map.end ()) { std::string fname - = sys::file_ops::concat (sys::file_ops::concat (canon_dir, "private"), fcn); + = sys::file_ops::concat (sys::file_ops::concat (abs_dir, "private"), fcn); if (check_file_type (fname, type, p->second, fcn, "load_path::find_private_fcn")) @@ -1717,7 +1746,7 @@ namespace octave } } else - retval = find_private_fcn_file (canon_dir, fcn, type); + retval = find_private_fcn_file (abs_dir, fcn, type); return retval; } @@ -1935,8 +1964,11 @@ namespace octave dir_info::fcn_file_map_type private_file_map = di.private_file_map; if (! private_file_map.empty ()) - private_fcn_map[sys::canonicalize_file_name (di.dir_name)] - = private_file_map; + { + ++mk_abs_load_path_pi_add_to_private_fcn_map; + private_fcn_map[sys::env::make_absolute (di.dir_name)] + = private_file_map; + } } void @@ -1999,8 +2031,11 @@ namespace octave dir_info::fcn_file_map_type private_file_map = ci.private_file_map; if (! private_file_map.empty ()) - private_fcn_map[sys::canonicalize_file_name (full_dir_name)] - = private_file_map; + { + ++mk_abs_load_path_pi_add_to_method_map; + private_fcn_map[sys::env::make_absolute (full_dir_name)] + = private_file_map; + } } } @@ -2139,7 +2174,8 @@ namespace octave void load_path::package_info::remove_private_fcn_map (const std::string& dir) { - auto p = private_fcn_map.find (sys::canonicalize_file_name (dir)); + ++mk_abs_load_path_pi_remoave_private_fcn_map; + auto p = private_fcn_map.find (sys::env::make_absolute (dir)); if (p != private_fcn_map.end ()) private_fcn_map.erase (p); diff --git a/libinterp/corefcn/symscope.cc b/libinterp/corefcn/symscope.cc --- a/libinterp/corefcn/symscope.cc +++ b/libinterp/corefcn/symscope.cc @@ -30,6 +30,7 @@ #include #include "file-ops.h" +#include "oct-env.h" #include "fcn-info.h" #include "interpreter-private.h" @@ -40,6 +41,8 @@ #include "symscope.h" #include "utils.h" +extern size_t mk_abs_symscope; + namespace octave { symbol_record symbol_scope_rep::insert_local (const std::string& name) @@ -174,7 +177,8 @@ namespace octave void symbol_scope_rep::cache_dir_name (const std::string& name) { - m_dir_name = octave::sys::canonicalize_file_name (name); + ++mk_abs_symscope; + m_dir_name = octave::sys::env::make_absolute (name); } bool