annotate libinterp/corefcn/interpreter-private.cc @ 23602:214cb58ccc1c

use pointer to scope instead of scope id Eliminate symbol table scope ID and the global list of all scopes indexed by numeric ID. Function scope data is now only accessible from the function itself, or by asking a scope for its parent scope (if it exists). The top-level and global scopes are now regular data members of the symbol table class instead of being static. Symbol table scopes are now created in the lexer when parsing a function begins and stored in the function object when finishing the construction of function object. If an error occurs while parsing a function, the list of any pending scopes is deleted.
author John W. Eaton <jwe@octave.org>
date Wed, 14 Jun 2017 11:53:34 -0400
parents 5cb3a2bb5e1e
children 99989ab8f142
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
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
3 Copyright (C) 2017 John W. Eaton
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
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
7 Octave is free software; you can redistribute it and/or modify it
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
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
9 the Free Software Foundation; either version 3 of the License, or
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
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
19 <http://www.gnu.org/licenses/>.
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 (HAVE_CONFIG_H)
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
24 # include "config.h"
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
25 #endif
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
26
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
27 #include <string>
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
28
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
29 #include "call-stack.h"
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
30 #include "error.h"
23511
232c8d69d934 manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents: 23438
diff changeset
31 #include "load-path.h"
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 #include "interpreter-private.h"
23511
232c8d69d934 manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents: 23438
diff changeset
33 #include "interpreter.h"
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
34 #include "symtab.h"
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
36 namespace octave
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37 {
23517
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
38 interpreter& __get_interpreter__ (const std::string& who)
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
39 {
23511
232c8d69d934 manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents: 23438
diff changeset
40 interpreter *interp = interpreter::the_interpreter ();
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
41
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
42 if (! interp)
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
43 {
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
44 abort ();
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
45 error ("%s: interpreter context missing", who.c_str ());
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
46 }
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
47
23517
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
48 return *interp;
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
49 }
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
50
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
51 load_path& __get_load_path__ (const std::string& who)
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
52 {
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
53 interpreter& interp = __get_interpreter__ (who);
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
54
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
55 return interp.get_load_path ();
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
56 }
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
57
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
58 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
59 {
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
60 interpreter& interp = __get_interpreter__ (who);
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
61
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
62 return interp.get_symbol_table ();
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
63 }
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
64
23602
214cb58ccc1c use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
65 symbol_table::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 {
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
67 symbol_table& symtab = __get_symbol_table__ (who);
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
68
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
69 return symtab.current_scope ();
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
70 }
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
71
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
72 tree_evaluator& __get_evaluator__ (const std::string& who)
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
73 {
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
74 interpreter& interp = __get_interpreter__ (who);
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
75
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
76 return interp.get_evaluator ();
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
77 }
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
78
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
79 call_stack& __get_call_stack__ (const std::string& who)
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
80 {
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
81 interpreter& interp = __get_interpreter__ (who);
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
82
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
83 return interp.get_call_stack ();
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
84 }
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
85 }