annotate libinterp/corefcn/interpreter-private.h @ 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 (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
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
32 namespace octave
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
33 {
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
34 class call_stack;
23517
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
35 class interpreter;
23511
232c8d69d934 manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents: 23438
diff changeset
36 class load_path;
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
37 class tree_evaluator;
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38
23517
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
39 extern interpreter& __get_interpreter__ (const std::string& who);
1bc8f1f50b54 new function for accessing interpreter
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
40
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
41 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
42
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
43 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
44
23602
214cb58ccc1c use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
45 extern 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
46
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23517
diff changeset
47 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
48
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23532
diff changeset
49 extern call_stack& __get_call_stack__ (const std::string& who);
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
50 }
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
diff changeset
52 #endif