annotate libinterp/corefcn/interpreter-private.h @ 25460:627d6bde9b8d

solve installation info initialization problem differently Back out changesets 893344cee100 and 69fc8935020b. * defaults.h, defaults.cc: Instead of storing installation info like include_dir, data_dir, info_dir, etc., in file-scope static variables or a class object owned by the interpreter, store the initialized values as constants inside the functions that return them. This way they are initialized on demand and we don't have to worry about initialization order of static data. It's OK for these to be static because even though they may require some computation to intialize (looking at environment variables or substituting the value of OCTAVE_HOME), they are constants for any given installation of Octave and will be the same for any instantiation of the interpreter. Only include defaults.h in files that actually need it.
author John W. Eaton <jwe@octave.org>
date Tue, 12 Jun 2018 13:03:04 -0400
parents 69fc8935020b
children f75bb9d659e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1 /*
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2
25054
6652d3823428 maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 24738
diff changeset
3 Copyright (C) 2017-2018 John W. Eaton
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
4
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
5 This file is part of Octave.
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
6
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24361
diff changeset
7 Octave is free software: you can redistribute it and/or modify it
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
8 under the terms of the GNU General Public License as published by
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24361
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
10 (at your option) any later version.
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
11
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
12 Octave is distributed in the hope that it will be useful, but
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
13 WITHOUT ANY WARRANTY; without even the implied warranty of
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
15 GNU General Public License for more details.
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
16
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
18 along with Octave; see the file COPYING. If not, see
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24361
diff changeset
19 <https://www.gnu.org/licenses/>.
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
20
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
21 */
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
22
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
23 #if ! defined (octave_interpreter_private_h)
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
24 #define octave_interpreter_private_h 1
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26 #include "octave-config.h"
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28 #include <string>
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
29
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
30 #include "symtab.h"
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
31
23651
5c6cceef132b don't use singleton for cdef_manager object
John W. Eaton <jwe@octave.org>
parents: 23627
diff changeset
32 class cdef_manager;
5c6cceef132b don't use singleton for cdef_manager object
John W. Eaton <jwe@octave.org>
parents: 23627
diff changeset
33
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
34 namespace octave
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 {
24738
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24734
diff changeset
36 class bp_table;
24540
46440078d73b don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
37 class call_stack;
24734
5d8c4cbc56d7 don't use singleton pattern for child_list
John W. Eaton <jwe@octave.org>
parents: 24540
diff changeset
38 class child_list;
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23609
diff changeset
39 class dynamic_loader;
23774
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
40 class gtk_manager;
23721
b2d55b52ee51 new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents: 23651
diff changeset
41 class help_system;
25407
ab10403a0b50 new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
42 class input_system;
24540
46440078d73b don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
43 class interpreter;
23511
232c8d69d934 manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents: 23438
diff changeset
44 class load_path;
25435
a52e6fb674b1 eliminate some singletons and static & global variables
John W. Eaton <jwe@octave.org>
parents: 25407
diff changeset
45 class output_system;
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
46 class tree_evaluator;
24540
46440078d73b don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
47 class type_info;
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
48
23517
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
49 extern interpreter& __get_interpreter__ (const std::string& who);
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
50
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23609
diff changeset
51 extern dynamic_loader& __get_dynamic_loader__ (const std::string& who);
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23609
diff changeset
52
23721
b2d55b52ee51 new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents: 23651
diff changeset
53 extern help_system& __get_help_system__ (const std::string& who);
b2d55b52ee51 new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents: 23651
diff changeset
54
25407
ab10403a0b50 new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
55 extern input_system& __get_input_system__ (const std::string& who);
ab10403a0b50 new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
56
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
57 extern load_path& __get_load_path__ (const std::string& who);
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
58
25435
a52e6fb674b1 eliminate some singletons and static & global variables
John W. Eaton <jwe@octave.org>
parents: 25407
diff changeset
59 extern output_system& __get_output_system__ (const std::string& who);
a52e6fb674b1 eliminate some singletons and static & global variables
John W. Eaton <jwe@octave.org>
parents: 25407
diff changeset
60
24540
46440078d73b don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
61 extern type_info& __get_type_info__ (const std::string& who);
46440078d73b don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
62
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
63 extern symbol_table& __get_symbol_table__ (const std::string& who);
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
64
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
65 extern symbol_scope __get_current_scope__ (const std::string& who);
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
66
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
67 extern symbol_scope __require_current_scope__ (const std::string& who);
23609
99989ab8f142 new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents: 23602
diff changeset
68
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
69 extern tree_evaluator& __get_evaluator__ (const std::string& who);
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
70
24738
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24734
diff changeset
71 extern bp_table& __get_bp_table__ (const std::string& who);
3695c2cd69b8 don't use singleton pattern for bp_table
John W. Eaton <jwe@octave.org>
parents: 24734
diff changeset
72
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
73 extern call_stack& __get_call_stack__ (const std::string& who);
23651
5c6cceef132b don't use singleton for cdef_manager object
John W. Eaton <jwe@octave.org>
parents: 23627
diff changeset
74
24734
5d8c4cbc56d7 don't use singleton pattern for child_list
John W. Eaton <jwe@octave.org>
parents: 24540
diff changeset
75 extern child_list& __get_child_list__ (const std::string& who);
5d8c4cbc56d7 don't use singleton pattern for child_list
John W. Eaton <jwe@octave.org>
parents: 24540
diff changeset
76
23651
5c6cceef132b don't use singleton for cdef_manager object
John W. Eaton <jwe@octave.org>
parents: 23627
diff changeset
77 extern cdef_manager& __get_cdef_manager__ (const std::string& who);
23774
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
78
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
79 extern gtk_manager& __get_gtk_manager__ (const std::string& who);
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
80 }
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
81
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
82 #endif