diff libinterp/corefcn/syscalls.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 092078913d54
children b9378eff6d13
line wrap: on
line diff
--- a/libinterp/corefcn/syscalls.cc	Fri Jun 09 11:36:34 2017 -0400
+++ b/libinterp/corefcn/syscalls.cc	Fri Jun 09 02:21:28 2017 -0400
@@ -46,6 +46,7 @@
 #include "defun.h"
 #include "error.h"
 #include "errwarn.h"
+#include "interpreter.h"
 #include "oct-hist.h"
 #include "oct-map.h"
 #include "ovl.h"
@@ -451,8 +452,8 @@
   return ovl (status, msg);
 }
 
-DEFUNX ("fork", Ffork, args, ,
-        doc: /* -*- texinfo -*-
+DEFMETHODX ("fork", Ffork, interp, args, ,
+            doc: /* -*- texinfo -*-
 @deftypefn {} {[@var{pid}, @var{msg}] =} fork ()
 Create a copy of the current process.
 
@@ -477,7 +478,9 @@
   if (args.length () != 0)
     print_usage ();
 
-  if (symbol_table::at_top_level ())
+  symbol_table& symtab = interp.get_symbol_table ();
+
+  if (symtab.at_top_level ())
     error ("fork: cannot be called from command line");
 
   std::string msg;