Mercurial > octave
annotate libinterp/parse-tree/pt-bp.h @ 22094:9203833cab7d
move new interpreter class to separate file
* libinterp/corefcn/interpreter.cc, libinterp/corefcn/interpreter.h:
New files. Move interpreter class and some supporting functions here
from octave.h, octave.cc, toplev.h, and toplev.cc. Move main_loop
into the interpreter class. Handle exiting with a separate exception
object from interrupts, passing the exit status with the object.
Update other files as needed to remove toplev.h or include
interpreter.h instead of toplev.h.
* libinterp/corefcn/module.mk: Update.
* toplev.h: Deprecate.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 11 Jul 2016 18:05:53 -0400 |
parents | 1473547f50f5 |
children | bac0d6f07a3e |
rev | line source |
---|---|
3771 | 1 /* |
2 | |
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
17856
diff
changeset
|
3 Copyright (C) 2001-2015 Ben Sapp |
3771 | 4 |
5 This file is part of Octave. | |
6 | |
7 Octave is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by the | |
7016 | 9 Free Software Foundation; either version 3 of the License, or (at your |
10 option) any later version. | |
3771 | 11 |
12 Octave is distributed in the hope that it will be useful, but WITHOUT | |
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
15 for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
19 <http://www.gnu.org/licenses/>. | |
3771 | 20 |
21 */ | |
22 | |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
23 #if ! defined (octave_pt_bp_h) |
17822
ebb3ef964372
maint: Use common #define syntax "octave_filename_h" in h_files.
Rik <rik@octave.org>
parents:
17787
diff
changeset
|
24 #define octave_pt_bp_h 1 |
3771 | 25 |
21244
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21157
diff
changeset
|
26 #include "octave-config.h" |
1473547f50f5
include octave-config.h in public header files
John W. Eaton <jwe@octave.org>
parents:
21157
diff
changeset
|
27 |
3771 | 28 #include "input.h" |
3805 | 29 #include "ov-usr-fcn.h" |
3771 | 30 #include "pt-walk.h" |
3805 | 31 #include "pt-pr-code.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
21244
diff
changeset
|
32 #include "interpreter.h" |
3771 | 33 |
34 class tree; | |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
7818
diff
changeset
|
35 class tree_decl_command; |
3771 | 36 |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20791
diff
changeset
|
37 static std::string pt_bp_empty_string (""); |
3771 | 38 class |
39 tree_breakpoint : public tree_walker | |
40 { | |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
41 public: |
3771 | 42 |
43 enum action { set = 1, clear = 2, list = 3 }; | |
44 | |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20791
diff
changeset
|
45 tree_breakpoint (int l, action a, const std::string& c = pt_bp_empty_string) |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20791
diff
changeset
|
46 : line (l), act (a), condition (c), found (false), bp_list () { } |
3771 | 47 |
48 ~tree_breakpoint (void) { } | |
49 | |
50 bool success (void) const { return found; } | |
51 | |
52 void visit_argument_list (tree_argument_list&); | |
53 | |
54 void visit_binary_expression (tree_binary_expression&); | |
55 | |
4207 | 56 void visit_break_command (tree_break_command&); |
3771 | 57 |
58 void visit_colon_expression (tree_colon_expression&); | |
59 | |
4207 | 60 void visit_continue_command (tree_continue_command&); |
3771 | 61 |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
7818
diff
changeset
|
62 void visit_global_command (tree_global_command&); |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
7818
diff
changeset
|
63 |
14294
9e3983c8963c
deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
64 void visit_persistent_command (tree_persistent_command&); |
3771 | 65 |
66 void visit_decl_elt (tree_decl_elt&); | |
67 | |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
68 void visit_decl_init_list (tree_decl_init_list&); |
3771 | 69 |
70 void visit_while_command (tree_while_command&); | |
71 | |
72 void visit_do_until_command (tree_do_until_command&); | |
73 | |
74 void visit_simple_for_command (tree_simple_for_command&); | |
75 | |
76 void visit_complex_for_command (tree_complex_for_command&); | |
77 | |
7715
5b4d278ec828
parse scripts completely before executing
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
78 void visit_octave_user_script (octave_user_script&); |
5b4d278ec828
parse scripts completely before executing
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
79 |
3771 | 80 void visit_octave_user_function (octave_user_function&); |
81 | |
82 void visit_octave_user_function_header (octave_user_function&); | |
83 | |
84 void visit_octave_user_function_trailer (octave_user_function&); | |
85 | |
7715
5b4d278ec828
parse scripts completely before executing
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
86 void visit_function_def (tree_function_def&); |
5b4d278ec828
parse scripts completely before executing
John W. Eaton <jwe@octave.org>
parents:
7017
diff
changeset
|
87 |
3771 | 88 void visit_identifier (tree_identifier&); |
89 | |
90 void visit_if_clause (tree_if_clause&); | |
91 | |
92 void visit_if_command (tree_if_command&); | |
93 | |
94 void visit_if_command_list (tree_if_command_list&); | |
95 | |
96 void visit_index_expression (tree_index_expression&); | |
97 | |
98 void visit_matrix (tree_matrix&); | |
99 | |
100 void visit_cell (tree_cell&); | |
101 | |
102 void visit_multi_assignment (tree_multi_assignment&); | |
103 | |
104 void visit_no_op_command (tree_no_op_command&); | |
105 | |
5861 | 106 void visit_anon_fcn_handle (tree_anon_fcn_handle&); |
107 | |
3771 | 108 void visit_constant (tree_constant&); |
109 | |
4342 | 110 void visit_fcn_handle (tree_fcn_handle&); |
111 | |
15035 | 112 void visit_funcall (tree_funcall&); |
113 | |
3771 | 114 void visit_parameter_list (tree_parameter_list&); |
115 | |
116 void visit_postfix_expression (tree_postfix_expression&); | |
117 | |
118 void visit_prefix_expression (tree_prefix_expression&); | |
119 | |
4207 | 120 void visit_return_command (tree_return_command&); |
3771 | 121 |
122 void visit_return_list (tree_return_list&); | |
123 | |
124 void visit_simple_assignment (tree_simple_assignment&); | |
125 | |
126 void visit_statement (tree_statement&); | |
127 | |
128 void visit_statement_list (tree_statement_list&); | |
129 | |
130 void visit_switch_case (tree_switch_case&); | |
131 | |
132 void visit_switch_case_list (tree_switch_case_list&); | |
133 | |
134 void visit_switch_command (tree_switch_command&); | |
135 | |
136 void visit_try_catch_command (tree_try_catch_command&); | |
137 | |
138 void visit_unwind_protect_command (tree_unwind_protect_command&); | |
139 | |
3805 | 140 octave_value_list get_list (void) { return bp_list; } |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20791
diff
changeset
|
141 octave_value_list get_cond_list (void) { return bp_cond_list; } |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
142 |
16596
645672f1c873
handle setting breakpoints in subfunctions in GUI editor
John W. Eaton <jwe@octave.org>
parents:
15195
diff
changeset
|
143 int get_line (void) { return found ? line : 0; } |
3771 | 144 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
145 private: |
3771 | 146 |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
7818
diff
changeset
|
147 void do_decl_command (tree_decl_command&); |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
7818
diff
changeset
|
148 |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
7818
diff
changeset
|
149 void take_action (tree& tr); |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
7818
diff
changeset
|
150 |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
7818
diff
changeset
|
151 void take_action (tree_statement& stmt); |
3771 | 152 |
3805 | 153 // Statement line number we are looking for. |
3771 | 154 int line; |
155 | |
3805 | 156 // What to do. |
3771 | 157 action act; |
3805 | 158 |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20791
diff
changeset
|
159 // Expression which must be true to break |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20791
diff
changeset
|
160 std::string condition; |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20791
diff
changeset
|
161 |
3805 | 162 // Have we already found the line? |
3771 | 163 bool found; |
164 | |
3805 | 165 // List of breakpoint line numbers. |
166 octave_value_list bp_list; | |
3771 | 167 |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20791
diff
changeset
|
168 // List of breakpoint conditions. |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20791
diff
changeset
|
169 octave_value_list bp_cond_list; |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20791
diff
changeset
|
170 |
3771 | 171 // No copying! |
172 | |
173 tree_breakpoint (const tree_breakpoint&); | |
174 | |
175 tree_breakpoint& operator = (const tree_breakpoint&); | |
176 }; | |
177 | |
4185 | 178 // TRUE means SIGINT should put us in the debugger at the next |
179 // available breakpoint. | |
180 extern bool octave_debug_on_interrupt_state; | |
181 | |
3771 | 182 #endif |