diff libinterp/corefcn/defun.cc @ 23599:5cb3a2bb5e1e

don't use singleton for symbol_table This is the first of a series of changes to make the symbol table a part of the interpreter instead of a global object. These changes also aim to simplify the implementation of symbol table so that it is easier to understand and modify. * Functions now own their scope (workspace) data. * The list of subfunctions is contained in the scope rather than a global list. * symtab.h, symtab.cc (class symbol_table): Don't use singleton pattern. * interpreter.h, interpreter.cc (interpreter::m_symbol_table): New data member. (interpreter::~interpreter): Don't set instance to 0. * interpreter-private.h, interpreter-private.cc (__get_symbol_table__): New function. Change all uses of call_stack to access call_stack object from the interpreter.
author John W. Eaton <jwe@octave.org>
date Fri, 09 Jun 2017 02:21:28 -0400
parents 14723784b9f2
children 91c8f006ed8b
line wrap: on
line diff
--- a/libinterp/corefcn/defun.cc	Fri Jun 09 11:36:34 2017 -0400
+++ b/libinterp/corefcn/defun.cc	Fri Jun 09 02:21:28 2017 -0400
@@ -91,7 +91,9 @@
 {
   octave_value fcn (new octave_builtin (f, name, file, doc));
 
-  symbol_table::install_built_in_function (name, fcn);
+  symbol_table& symtab = octave::__get_symbol_table__ ("install_builtin_function");
+
+  symtab.install_built_in_function (name, fcn);
 }
 
 void
@@ -101,7 +103,9 @@
 {
   octave_value fcn (new octave_builtin (m, name, file, doc));
 
-  symbol_table::install_built_in_function (name, fcn);
+  symbol_table& symtab = octave::__get_symbol_table__ ("install_builtin_function");
+
+  symtab.install_built_in_function (name, fcn);
 }
 
 void
@@ -116,7 +120,9 @@
 
   octave_value fval (fcn);
 
-  symbol_table::install_built_in_function (name, fval);
+  symbol_table& symtab = octave::__get_symbol_table__ ("install_dld_function");
+
+  symtab.install_built_in_function (name, fval);
 }
 
 void
@@ -131,7 +137,9 @@
 
   octave_value fval (fcn);
 
-  symbol_table::install_built_in_function (name, fval);
+  symbol_table& symtab = octave::__get_symbol_table__ ("install_dld_function");
+
+  symtab.install_built_in_function (name, fval);
 }
 
 void
@@ -145,19 +153,25 @@
 
   octave_value fval (fcn);
 
-  symbol_table::install_built_in_function (name, fval);
+  symbol_table& symtab = octave::__get_symbol_table__ ("install_mex_function");
+
+  symtab.install_built_in_function (name, fval);
 }
 
 void
 alias_builtin (const std::string& alias, const std::string& name)
 {
-  symbol_table::alias_built_in_function (alias, name);
+  symbol_table& symtab = octave::__get_symbol_table__ ("alias_builtin");
+
+  symtab.alias_built_in_function (alias, name);
 }
 
 void
 install_builtin_dispatch (const std::string& name, const std::string& klass)
 {
-  symbol_table::install_built_in_dispatch (name, klass);
+  symbol_table& symtab = octave::__get_symbol_table__ ("install_builtin_dispatch");
+
+  symtab.install_built_in_dispatch (name, klass);
 }
 
 octave::dynamic_library