Mercurial > octave
annotate libinterp/corefcn/toplev.cc @ 21603:37cbdf7bffa9
Add fftwf_version (bug #45659)
* toplev.cc (F__octave_config_info__): New field, fftwf_version.
* oct-fftw.cc, oct-fftw.h (octave_fftwf_version): New function.
author | mmuetzel <markus.muetzel@gmx.de> |
---|---|
date | Mon, 11 Apr 2016 10:45:17 +0200 |
parents | 184b85b31e03 |
children | e6f76c393ad7 |
rev | line source |
---|---|
1683 | 1 /* |
2 | |
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
19625
diff
changeset
|
3 Copyright (C) 1995-2015 John W. Eaton |
1683 | 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. | |
1683 | 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/>. | |
1683 | 20 |
21 */ | |
22 | |
23 #ifdef HAVE_CONFIG_H | |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21253
diff
changeset
|
24 # include "config.h" |
1683 | 25 #endif |
26 | |
27 #include <cassert> | |
4489 | 28 #include <cerrno> |
1683 | 29 #include <cstdlib> |
30 #include <cstring> | |
4221 | 31 #include <new> |
1683 | 32 |
3503 | 33 #include <fstream> |
34 #include <iostream> | |
5765 | 35 #include <sstream> |
1728 | 36 #include <string> |
37 | |
16317
ce5231908ea2
* toplev.cc: Include sys/select.h.
John W. Eaton <jwe@octave.org>
parents:
16292
diff
changeset
|
38 #include <sys/select.h> |
1683 | 39 #include <sys/types.h> |
40 #include <unistd.h> | |
41 | |
2926 | 42 #include "cmd-edit.h" |
12989
00235a6446da
eliminate duplication of internal variables controlling command history
John W. Eaton <jwe@octave.org>
parents:
12846
diff
changeset
|
43 #include "cmd-hist.h" |
2926 | 44 #include "file-ops.h" |
1683 | 45 #include "lo-error.h" |
2370 | 46 #include "lo-mappers.h" |
3020 | 47 #include "oct-env.h" |
21600
184b85b31e03
more updates for version function
mmuetzel <markus.muetzel@gmx.de>
parents:
21598
diff
changeset
|
48 #include "oct-fftw.h" |
13983
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
49 #include "oct-locbuf.h" |
4153 | 50 #include "quit.h" |
13983
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
51 #include "singleton-cleanup.h" |
1755 | 52 #include "str-vec.h" |
1683 | 53 |
21220
d78e45987d6a
rename octave::build_env namespace from octave::config
John W. Eaton <jwe@octave.org>
parents:
21200
diff
changeset
|
54 #include "build-env.h" |
21597
fe1447ae68cf
Add more info to version.m and store build info in the binary (bug #45659)
mmuetzel <markus.muetzel@gmx.de>
parents:
21534
diff
changeset
|
55 #include "build-info.h" |
13983
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
56 #include "defaults.h" |
1683 | 57 #include "defun.h" |
58 #include "error.h" | |
59 #include "file-io.h" | |
14014
907d03def9d5
explicitly close figures in clean_up_and_exit instead of using an atexit function
John W. Eaton <jwe@octave.org>
parents:
13983
diff
changeset
|
60 #include "graphics.h" |
1683 | 61 #include "input.h" |
62 #include "lex.h" | |
17755
9c03b071fd7b
avoid HDF5 error message at exit (bug #37713)
John W. Eaton <jwe@octave.org>
parents:
17744
diff
changeset
|
63 #include "load-save.h" |
16485
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
64 #include "octave-link.h" |
1742 | 65 #include "oct-hist.h" |
2162 | 66 #include "oct-map.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
20939
diff
changeset
|
67 #include "ovl.h" |
13983
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
68 #include "ov.h" |
1683 | 69 #include "pager.h" |
70 #include "parse.h" | |
71 #include "pathsearch.h" | |
72 #include "procstream.h" | |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
8581
diff
changeset
|
73 #include "pt-eval.h" |
2985 | 74 #include "pt-jump.h" |
2982 | 75 #include "pt-stmt.h" |
1683 | 76 #include "sighandlers.h" |
77 #include "sysdep.h" | |
2693 | 78 #include "syswait.h" |
1750 | 79 #include "toplev.h" |
1683 | 80 #include "unwind-prot.h" |
81 #include "utils.h" | |
82 #include "variables.h" | |
13983
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
83 #include "version.h" |
1683 | 84 |
15756
ea1a1fb00744
Make the path to the shell interpreter configuable
Mike Miller <mtmiller@ieee.org>
parents:
15596
diff
changeset
|
85 #ifndef SHELL_PATH |
21200
fcac5dbbf9ed
maint: Indent #ifdef blocks in libinterp.
Rik <rik@octave.org>
parents:
21182
diff
changeset
|
86 # define SHELL_PATH "/bin/sh" |
15756
ea1a1fb00744
Make the path to the shell interpreter configuable
Mike Miller <mtmiller@ieee.org>
parents:
15596
diff
changeset
|
87 #endif |
ea1a1fb00744
Make the path to the shell interpreter configuable
Mike Miller <mtmiller@ieee.org>
parents:
15596
diff
changeset
|
88 |
9217
ee7cf4d963f3
smarter handling of quit()
Jaroslav Hajek <highegg@gmail.com>
parents:
9187
diff
changeset
|
89 void (*octave_exit) (int) = ::exit; |
ee7cf4d963f3
smarter handling of quit()
Jaroslav Hajek <highegg@gmail.com>
parents:
9187
diff
changeset
|
90 |
9255
1c2d2c9f4a8d
don't allow quit() in embedded mode by default, make configurable
Jaroslav Hajek <highegg@gmail.com>
parents:
9217
diff
changeset
|
91 // TRUE means the quit() call is allowed. |
1c2d2c9f4a8d
don't allow quit() in embedded mode by default, make configurable
Jaroslav Hajek <highegg@gmail.com>
parents:
9217
diff
changeset
|
92 bool quit_allowed = true; |
1c2d2c9f4a8d
don't allow quit() in embedded mode by default, make configurable
Jaroslav Hajek <highegg@gmail.com>
parents:
9217
diff
changeset
|
93 |
3020 | 94 // TRUE means we are exiting via the builtin exit or quit functions. |
9383 | 95 bool quitting_gracefully = false; |
96 // This stores the exit status. | |
97 int exit_status = 0; | |
1683 | 98 |
4217 | 99 // TRUE means we are ready to interpret commands, but not everything |
100 // is ready for interactive use. | |
101 bool octave_interpreter_ready = false; | |
102 | |
4172 | 103 // TRUE means we've processed all the init code and we are good to go. |
104 bool octave_initialized = false; | |
105 | |
5743 | 106 octave_call_stack *octave_call_stack::instance = 0; |
107 | |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
108 std::string |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
109 octave_call_stack::stack_frame::fcn_file_name (void) const |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
110 { |
21017
93748bcaec17
maint: Replace emtpy 'std::string ()' calls with "".
Rik <rik@octave.org>
parents:
20962
diff
changeset
|
111 return m_fcn ? m_fcn->fcn_file_name () : ""; |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
112 } |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
113 |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
114 std::string |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
115 octave_call_stack::stack_frame::fcn_name (bool print_subfn) const |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
116 { |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
117 std::string retval; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
118 |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
119 if (m_fcn) |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
120 { |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
121 std::string parent_fcn_name = m_fcn->parent_fcn_name (); |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
122 |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
123 if (print_subfn && ! parent_fcn_name.empty ()) |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
124 retval = parent_fcn_name + Vfilemarker; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
125 |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
126 retval += m_fcn->name (); |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
127 } |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
128 else |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
129 retval = "<unknown>"; |
19597
db92e7e28e1f
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
130 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
131 return retval; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
132 } |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
133 |
20511
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
134 bool |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
135 octave_call_stack::stack_frame::operator== (const octave_call_stack::stack_frame &rhs) const |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
136 { |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
137 if (this->line () != rhs.line ()) |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
138 return false; |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
139 else if (this->column () != rhs.column ()) |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
140 return false; |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
141 else if (this->fcn_file_name () != rhs.fcn_file_name ()) |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
142 return false; |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
143 else if (this->fcn_name () != rhs.fcn_name ()) |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
144 return false; |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
145 else |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
146 return true; |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
147 } |
9502e0142c19
Simplify error output if max_recursion_depth is exceeded (Bug #45843).
Stefan Miereis <stefan.miereis@gmx.de>
parents:
20172
diff
changeset
|
148 |
13983
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
149 void |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
150 octave_call_stack::create_instance (void) |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
151 { |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
152 instance = new octave_call_stack (); |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
153 |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
154 if (instance) |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
155 { |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
156 instance->do_push (0, symbol_table::top_scope (), 0); |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
157 |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
158 singleton_cleanup_list::add (cleanup_instance); |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
159 } |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
160 } |
7dd7cccf0757
clean up memory allocated for singletons before exit
John W. Eaton <jwe@octave.org>
parents:
13981
diff
changeset
|
161 |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
162 int |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
163 octave_call_stack::do_current_line (void) const |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
164 { |
16354
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
165 int retval = -1; |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
166 |
16354
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
167 if (! cs.empty ()) |
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
168 { |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
169 const stack_frame& elt = cs[curr_frame]; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
170 retval = elt.m_line; |
16354
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
171 } |
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
172 |
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
173 return retval; |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
174 } |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
175 |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
176 int |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
177 octave_call_stack::do_current_column (void) const |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
178 { |
16354
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
179 int retval = -1; |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
180 |
16354
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
181 if (! cs.empty ()) |
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
182 { |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
183 const stack_frame& elt = cs[curr_frame]; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
184 retval = elt.m_column; |
16354
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
185 } |
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
186 |
fb27f1e08297
track line and column info directly in call stack (bug #38556)
John W. Eaton <jwe@octave.org>
parents:
16347
diff
changeset
|
187 return retval; |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
188 } |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
189 |
7901 | 190 size_t |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
191 octave_call_stack::do_num_user_code_frames |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
192 (octave_idx_type& curr_user_frame) const |
7901 | 193 { |
194 size_t retval = 0; | |
195 | |
196 curr_user_frame = 0; | |
197 | |
198 // Look for the caller of dbstack. | |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
199 size_t xframe = cs[curr_frame].m_prev; |
7901 | 200 |
201 bool found = false; | |
202 | |
203 size_t k = cs.size (); | |
204 | |
205 for (const_reverse_iterator p = cs.rbegin (); p != cs.rend (); p++) | |
206 { | |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
207 octave_function *f = (*p).m_fcn; |
7901 | 208 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
209 if (--k == xframe) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
210 found = true; |
7901 | 211 |
212 if (f && f->is_user_code ()) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
213 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
214 if (! found) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
215 curr_user_frame++; |
7901 | 216 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
217 retval++; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
218 } |
7901 | 219 } |
220 | |
221 // We counted how many user frames were not the one, in reverse. | |
222 // Now set curr_user_frame to be the index in the other direction. | |
223 curr_user_frame = retval - curr_user_frame - 1; | |
224 | |
225 return retval; | |
226 } | |
227 | |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7552
diff
changeset
|
228 octave_user_code * |
7923
c3d21b9b94b6
eliminate octave_call_stack member functions caller_user_script and caller_user_function, and unused difference_type args
John W. Eaton <jwe@octave.org>
parents:
7913
diff
changeset
|
229 octave_call_stack::do_caller_user_code (size_t nskip) const |
5744 | 230 { |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7552
diff
changeset
|
231 octave_user_code *retval = 0; |
5744 | 232 |
7890 | 233 const_iterator p = cs.end (); |
234 | |
235 while (p != cs.begin ()) | |
5744 | 236 { |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
237 const stack_frame& elt = *(--p); |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
238 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
239 octave_function *f = elt.m_fcn; |
5744 | 240 |
7719
87eda1f8faaa
octave_user_code: new base class for octave_user_script and octave_user_function
John W. Eaton <jwe@octave.org>
parents:
7552
diff
changeset
|
241 if (f && f->is_user_code ()) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
242 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
243 if (nskip > 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
244 nskip--; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
245 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
246 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
247 retval = dynamic_cast<octave_user_code *> (f); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
248 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
249 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
250 } |
5744 | 251 } |
252 | |
253 return retval; | |
254 } | |
255 | |
21322
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
256 int |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
257 octave_call_stack::do_caller_user_code_line (void) const |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
258 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
259 int retval = -1; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
260 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
261 const_iterator p = cs.end (); |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
262 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
263 while (p != cs.begin ()) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
264 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
265 const stack_frame& elt = *(--p); |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
266 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
267 octave_function *f = elt.m_fcn; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
268 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
269 if (f && f->is_user_code ()) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
270 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
271 if (elt.m_line > 0) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
272 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
273 retval = elt.m_line; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
274 break; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
275 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
276 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
277 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
278 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
279 return retval; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
280 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
281 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
282 int |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
283 octave_call_stack::do_caller_user_code_column (void) const |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
284 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
285 int retval = -1; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
286 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
287 const_iterator p = cs.end (); |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
288 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
289 while (p != cs.begin ()) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
290 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
291 const stack_frame& elt = *(--p); |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
292 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
293 octave_function *f = elt.m_fcn; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
294 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
295 if (f && f->is_user_code ()) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
296 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
297 if (elt.m_column) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
298 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
299 retval = elt.m_column; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
300 break; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
301 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
302 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
303 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
304 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
305 return retval; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
306 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
307 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
308 octave_user_code * |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
309 octave_call_stack::do_debug_user_code (void) const |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
310 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
311 octave_user_code *retval = 0; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
312 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
313 // This should never happen... |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
314 if (curr_frame == 0) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
315 return retval; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
316 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
317 // Start looking with the caller of the calling debug function. |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
318 size_t i = cs[curr_frame].m_prev; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
319 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
320 while (i != 0) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
321 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
322 const stack_frame& elt = cs[i]; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
323 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
324 octave_function *f = elt.m_fcn; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
325 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
326 if (f && f->is_user_code ()) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
327 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
328 retval = dynamic_cast<octave_user_code *> (f); |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
329 break; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
330 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
331 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
332 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
333 return retval; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
334 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
335 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
336 int |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
337 octave_call_stack::do_debug_user_code_line (void) const |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
338 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
339 int retval = -1; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
340 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
341 // This should never happen... |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
342 if (curr_frame == 0) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
343 return retval; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
344 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
345 // Start looking with the caller of the calling debug function. |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
346 size_t i = cs[curr_frame].m_prev; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
347 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
348 while (i != 0) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
349 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
350 const stack_frame& elt = cs[i]; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
351 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
352 octave_function *f = elt.m_fcn; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
353 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
354 if (f && f->is_user_code ()) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
355 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
356 if (elt.m_line) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
357 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
358 retval = elt.m_line; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
359 break; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
360 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
361 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
362 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
363 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
364 return retval; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
365 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
366 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
367 int |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
368 octave_call_stack::do_debug_user_code_column (void) const |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
369 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
370 int retval = -1; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
371 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
372 // This should never happen... |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
373 if (curr_frame == 0) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
374 return retval; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
375 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
376 // Start looking with the caller of the calling debug function. |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
377 size_t i = cs[curr_frame].m_prev; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
378 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
379 while (i != 0) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
380 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
381 const stack_frame& elt = cs[i]; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
382 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
383 octave_function *f = elt.m_fcn; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
384 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
385 if (f && f->is_user_code ()) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
386 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
387 if (elt.m_column) |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
388 { |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
389 retval = elt.m_column; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
390 break; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
391 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
392 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
393 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
394 |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
395 return retval; |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
396 } |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
397 |
18267
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
398 bool |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
399 octave_call_stack::do_all_scripts (void) const |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
400 { |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
401 bool retval = true; |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
402 |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
403 const_iterator p = cs.end (); |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
404 |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
405 while (p != cs.begin ()) |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
406 { |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
407 const stack_frame& elt = *(--p); |
18267
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
408 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
409 octave_function *f = elt.m_fcn; |
18267
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
410 |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
411 if (f && ! f->is_user_script ()) |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
412 { |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
413 retval = false; |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
414 break; |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
415 } |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
416 } |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
417 |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
418 return retval; |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
419 } |
bc139ccccef9
Don't echo scripts not executed from the cmd line when using 'echo on'(bug #41202)
Rik <rik@octave.org>
parents:
18104
diff
changeset
|
420 |
10767
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
421 // Use static fields for the best efficiency. |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
422 // NOTE: C++0x will allow these two to be merged into one. |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
423 static const char *bt_fieldnames[] = { "file", "name", "line", |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
424 "column", "scope", "context", 0 |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
425 }; |
10767
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
426 static const octave_fields bt_fields (bt_fieldnames); |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
427 |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
428 octave_map |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
429 octave_call_stack::empty_backtrace (void) |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
430 { |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
431 return octave_map (dim_vector (0, 1), bt_fields); |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
432 } |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
433 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
434 std::list<octave_call_stack::stack_frame> |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
435 octave_call_stack::do_backtrace_frames (size_t nskip, |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
436 octave_idx_type& curr_user_frame) const |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
437 { |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
438 std::list<octave_call_stack::stack_frame> retval; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
439 |
7901 | 440 size_t user_code_frames = do_num_user_code_frames (curr_user_frame); |
441 | |
442 size_t nframes = nskip <= user_code_frames ? user_code_frames - nskip : 0; | |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
443 |
7901 | 444 // Our list is reversed. |
445 curr_user_frame = nframes - curr_user_frame - 1; | |
446 | |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
447 if (nframes > 0) |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
448 { |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
449 for (const_reverse_iterator p = cs.rbegin (); p != cs.rend (); p++) |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
450 { |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
451 const stack_frame& elt = *p; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
452 |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
453 octave_function *f = elt.m_fcn; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
454 |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
455 if (f && f->is_user_code ()) |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
456 { |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
457 if (nskip > 0) |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
458 nskip--; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
459 else |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
460 retval.push_back (elt); |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
461 } |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
462 } |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
463 } |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
464 |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
465 return retval; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
466 } |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
467 |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
468 octave_map |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
469 octave_call_stack::do_backtrace (size_t nskip, |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
470 octave_idx_type& curr_user_frame, |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
471 bool print_subfn) const |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
472 { |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
473 std::list<octave_call_stack::stack_frame> frames |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
474 = do_backtrace_frames (nskip, curr_user_frame); |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
475 |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
476 size_t nframes = frames.size (); |
19597
db92e7e28e1f
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
477 |
10767
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
478 octave_map retval (dim_vector (nframes, 1), bt_fields); |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
479 |
10767
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
480 Cell& file = retval.contents (0); |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
481 Cell& name = retval.contents (1); |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
482 Cell& line = retval.contents (2); |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
483 Cell& column = retval.contents (3); |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
484 Cell& scope = retval.contents (4); |
2b041d3995a3
modernize some map usage on toplev.cc and error.cc
Jaroslav Hajek <highegg@gmail.com>
parents:
10411
diff
changeset
|
485 Cell& context = retval.contents (5); |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
486 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
487 octave_idx_type k = 0; |
7901 | 488 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
489 for (std::list<octave_call_stack::stack_frame>::const_iterator p = frames.begin (); |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
490 p != frames.end (); p++) |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
491 { |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
492 const stack_frame& elt = *p; |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
493 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
494 scope(k) = elt.m_scope; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
495 context(k) = elt.m_context; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
496 file(k) = elt.fcn_file_name (); |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
497 name(k) = elt.fcn_name (print_subfn); |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
498 line(k) = elt.m_line; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
499 column(k) = elt.m_column; |
7901 | 500 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
501 k++; |
7734
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
502 } |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
503 |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
504 return retval; |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
505 } |
2dee19385d32
eliminate tree_statement_stack; handle current statement info in octave_call_stack
John W. Eaton <jwe@octave.org>
parents:
7733
diff
changeset
|
506 |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
507 bool |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
508 octave_call_stack::do_goto_frame (size_t n, bool verbose) |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
509 { |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
510 bool retval = false; |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
511 |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
512 if (n < cs.size ()) |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
513 { |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
514 retval = true; |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
515 |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
516 curr_frame = n; |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
517 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
518 const stack_frame& elt = cs[n]; |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
519 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
520 symbol_table::set_scope_and_context (elt.m_scope, elt.m_context); |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
521 |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
522 if (verbose) |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
523 octave_stdout << "stopped in " << elt.fcn_name () |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
524 << " at line " << elt.m_line |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
525 << " column " << elt.m_column |
21322
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
526 << " [" << elt.fcn_file_name () << "] " |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
527 << " (scope = " << elt.m_scope |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
528 << "[context = " << elt.m_context << "])" |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
529 << std::endl; |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
530 } |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
531 |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
532 return retval; |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
533 } |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
534 |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
535 bool |
7901 | 536 octave_call_stack::do_goto_frame_relative (int nskip, bool verbose) |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
537 { |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
538 bool retval = false; |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
539 |
9483
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
540 int incr = 0; |
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
541 |
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
542 if (nskip < 0) |
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
543 incr = -1; |
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
544 else if (nskip > 0) |
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
545 incr = 1; |
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
546 |
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
547 // Start looking with the caller of dbup/dbdown/keyboard. |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
548 size_t xframe = cs[curr_frame].m_prev; |
9483
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
549 |
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
550 while (true) |
7890 | 551 { |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
552 if ((incr < 0 && xframe == 0) || (incr > 0 && xframe == cs.size () - 1)) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
553 break; |
9483
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
554 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
555 xframe += incr; |
7901 | 556 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
557 const stack_frame& elt = cs[xframe]; |
7901 | 558 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
559 octave_function *f = elt.m_fcn; |
9483
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
560 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
561 if (xframe == 0 || (f && f->is_user_code ())) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
562 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
563 if (nskip > 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
564 nskip--; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
565 else if (nskip < 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
566 nskip++; |
7901 | 567 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
568 if (nskip == 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
569 { |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
570 curr_frame = xframe; |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
571 cs[cs.size () - 1].m_prev = curr_frame; |
9483
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
572 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
573 symbol_table::set_scope_and_context (elt.m_scope, elt.m_context); |
7901 | 574 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
575 if (verbose) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
576 { |
9990
2b008f1d3794
octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents:
9981
diff
changeset
|
577 std::ostringstream buf; |
2b008f1d3794
octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents:
9981
diff
changeset
|
578 |
2b008f1d3794
octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents:
9981
diff
changeset
|
579 if (f) |
21322
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
580 buf << "stopped in " << elt.fcn_name () |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
581 << " at line " << elt.m_line |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
582 << " [" << elt.fcn_file_name () << "] " |
909129eb77c5
use correct stack frame when reporting debug location
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
583 << std::endl; |
9990
2b008f1d3794
octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents:
9981
diff
changeset
|
584 else |
2b008f1d3794
octave_call_stack::do_goto_frame_relative: stop searching at top frame
John W. Eaton <jwe@octave.org>
parents:
9981
diff
changeset
|
585 buf << "at top level" << std::endl; |
9483
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
586 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
587 octave_stdout << buf.str (); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
588 } |
9483
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
589 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
590 retval = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
591 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
592 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
593 } |
19597
db92e7e28e1f
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
19415
diff
changeset
|
594 else if (incr == 0) // Break out of infinite loop by choosing an incr. |
18755
fc43c8017e9b
Fix infinite loop when using builtin ("keyboard") (bug #33296).
Rik <rik@octave.org>
parents:
18638
diff
changeset
|
595 incr = -1; |
7901 | 596 |
597 // There is no need to set scope and context here. That will | |
9483
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
598 // happen when the dbup/dbdown/keyboard frame is popped and we |
25c2e92ee03c
correctly skip frame assigned to keyboard function
John W. Eaton <jwe@octave.org>
parents:
9452
diff
changeset
|
599 // jump to the new "prev" frame set above. |
7890 | 600 } |
7752
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
601 |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
602 return retval; |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
603 } |
40c428ea3408
initial implementation of dbup and dbdown
John W. Eaton <jwe@octave.org>
parents:
7736
diff
changeset
|
604 |
5744 | 605 void |
7901 | 606 octave_call_stack::do_goto_caller_frame (void) |
607 { | |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
608 size_t xframe = curr_frame; |
7901 | 609 |
610 bool skipped = false; | |
611 | |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
612 while (xframe != 0) |
7901 | 613 { |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
614 xframe = cs[xframe].m_prev; |
7901 | 615 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
616 const stack_frame& elt = cs[xframe]; |
7901 | 617 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
618 octave_function *f = elt.m_fcn; |
7901 | 619 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
620 if (elt.m_scope == cs[0].m_scope || (f && f->is_user_code ())) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
621 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
622 if (! skipped) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
623 // We found the current user code frame, so skip it. |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
624 skipped = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
625 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
626 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
627 // We found the caller user code frame. |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
628 stack_frame tmp (elt); |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
629 tmp.m_prev = curr_frame; |
7901 | 630 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
631 curr_frame = cs.size (); |
7901 | 632 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
633 cs.push_back (tmp); |
7901 | 634 |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
635 symbol_table::set_scope_and_context (tmp.m_scope, tmp.m_context); |
7901 | 636 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
637 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
638 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
639 } |
7901 | 640 } |
641 } | |
642 | |
643 void | |
644 octave_call_stack::do_goto_base_frame (void) | |
645 { | |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
646 stack_frame tmp (cs[0]); |
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
647 tmp.m_prev = curr_frame; |
7901 | 648 |
649 curr_frame = cs.size (); | |
650 | |
651 cs.push_back (tmp); | |
652 | |
19415
972abb60c30f
emit stack trace immediately at point of error
John W. Eaton <jwe@octave.org>
parents:
19403
diff
changeset
|
653 symbol_table::set_scope_and_context (tmp.m_scope, tmp.m_context); |
8011
3100283874d7
improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents:
7968
diff
changeset
|
654 } |
3100283874d7
improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents:
7968
diff
changeset
|
655 |
3100283874d7
improve backtrace error messages
John W. Eaton <jwe@octave.org>
parents:
7968
diff
changeset
|
656 void |
4180 | 657 recover_from_exception (void) |
658 { | |
659 can_interrupt = true; | |
4182 | 660 octave_interrupt_immediately = 0; |
4180 | 661 octave_interrupt_state = 0; |
5142 | 662 octave_signal_caught = 0; |
7481
78f3811155f7
use exceptions in liboctave error handler
John W. Eaton <jwe@octave.org>
parents:
7409
diff
changeset
|
663 octave_exception_state = octave_no_exception; |
4180 | 664 octave_restore_signal_mask (); |
665 octave_catch_interrupts (); | |
666 } | |
667 | |
1907 | 668 int |
5189 | 669 main_loop (void) |
1907 | 670 { |
2016 | 671 octave_save_signal_mask (); |
672 | |
3020 | 673 can_interrupt = true; |
1907 | 674 |
5142 | 675 octave_signal_hook = octave_signal_handler; |
10066
2cd940306a06
make unwind_protect frames local
Jaroslav Hajek <highegg@gmail.com>
parents:
9990
diff
changeset
|
676 octave_interrupt_hook = 0; |
2cd940306a06
make unwind_protect frames local
Jaroslav Hajek <highegg@gmail.com>
parents:
9990
diff
changeset
|
677 octave_bad_alloc_hook = 0; |
4429 | 678 |
2554 | 679 octave_catch_interrupts (); |
1907 | 680 |
4172 | 681 octave_initialized = true; |
682 | |
1907 | 683 // The big loop. |
684 | |
19849
1c9ed5b4c73d
input.h: change meaning of interactive and forced_interactive global variables.
Carnë Draug <carandraug@octave.org>
parents:
19734
diff
changeset
|
685 octave_lexer *lxr = (interactive |
16335
bef822a80ffb
if not interactive, bypass readline and read stdin as a file (bug #38520)
John W. Eaton <jwe@octave.org>
parents:
16317
diff
changeset
|
686 ? new octave_lexer () |
bef822a80ffb
if not interactive, bypass readline and read stdin as a file (bug #38520)
John W. Eaton <jwe@octave.org>
parents:
16317
diff
changeset
|
687 : new octave_lexer (stdin)); |
bef822a80ffb
if not interactive, bypass readline and read stdin as a file (bug #38520)
John W. Eaton <jwe@octave.org>
parents:
16317
diff
changeset
|
688 |
bef822a80ffb
if not interactive, bypass readline and read stdin as a file (bug #38520)
John W. Eaton <jwe@octave.org>
parents:
16317
diff
changeset
|
689 octave_parser parser (*lxr); |
16151 | 690 |
4153 | 691 int retval = 0; |
1907 | 692 do |
693 { | |
4180 | 694 try |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
695 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
696 reset_error_handler (); |
4318 | 697 |
16288
fe3b9a51e625
rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents:
16287
diff
changeset
|
698 parser.reset (); |
2620 | 699 |
10186
095a1e670e68
make dbstep work with keyboard function
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
700 if (symbol_table::at_top_level ()) |
095a1e670e68
make dbstep work with keyboard function
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
701 tree_evaluator::reset_debug_state (); |
095a1e670e68
make dbstep work with keyboard function
John W. Eaton <jwe@octave.org>
parents:
10182
diff
changeset
|
702 |
16288
fe3b9a51e625
rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents:
16287
diff
changeset
|
703 retval = parser.run (); |
2620 | 704 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
705 if (retval == 0) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
706 { |
16288
fe3b9a51e625
rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents:
16287
diff
changeset
|
707 if (parser.stmt_list) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
708 { |
16288
fe3b9a51e625
rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents:
16287
diff
changeset
|
709 parser.stmt_list->accept (*current_evaluator); |
3883 | 710 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
711 octave_quit (); |
4171 | 712 |
19849
1c9ed5b4c73d
input.h: change meaning of interactive and forced_interactive global variables.
Carnë Draug <carandraug@octave.org>
parents:
19734
diff
changeset
|
713 if (! interactive) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
714 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
715 bool quit = (tree_return_command::returning |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
716 || tree_break_command::breaking); |
4153 | 717 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
718 if (tree_return_command::returning) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
719 tree_return_command::returning = 0; |
4153 | 720 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
721 if (tree_break_command::breaking) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
722 tree_break_command::breaking--; |
4153 | 723 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
724 if (quit) |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
725 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
726 } |
4153 | 727 |
20741
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
728 if (octave_completion_matches_called) |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
729 octave_completion_matches_called = false; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
730 else |
20741
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
731 command_editor::increment_current_command_number (); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
732 } |
16288
fe3b9a51e625
rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents:
16287
diff
changeset
|
733 else if (parser.lexer.end_of_input) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
734 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
735 } |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
736 } |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
737 catch (const octave_interrupt_exception&) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
738 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
739 recover_from_exception (); |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20741
diff
changeset
|
740 |
9383 | 741 if (quitting_gracefully) |
16485
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
742 return exit_status; |
21359
8e94a86ca648
Do not print extra newlines to stdout on exit (bug #47258).
Carnë Draug <carandraug@octave.org>
parents:
21322
diff
changeset
|
743 |
8e94a86ca648
Do not print extra newlines to stdout on exit (bug #47258).
Carnë Draug <carandraug@octave.org>
parents:
21322
diff
changeset
|
744 // Required newline when the user does Ctrl+C at the prompt. |
21363
8cfd1b47d49f
Eliminate more extra newlines to stdout when not interactive (bug #47258)
Mike Miller <mtmiller@octave.org>
parents:
21359
diff
changeset
|
745 if (interactive) |
8cfd1b47d49f
Eliminate more extra newlines to stdout when not interactive (bug #47258)
Mike Miller <mtmiller@octave.org>
parents:
21359
diff
changeset
|
746 octave_stdout << "\n"; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
747 } |
20651
c1d94e5cd5ea
catch index_exception by const reference where possible
John W. Eaton <jwe@octave.org>
parents:
20582
diff
changeset
|
748 catch (const index_exception& e) |
20542
dd6345fd8a97
use exceptions for better invalid index error reporting (bug #45957)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20535
diff
changeset
|
749 { |
dd6345fd8a97
use exceptions for better invalid index error reporting (bug #45957)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20535
diff
changeset
|
750 recover_from_exception (); |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20741
diff
changeset
|
751 |
20542
dd6345fd8a97
use exceptions for better invalid index error reporting (bug #45957)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20535
diff
changeset
|
752 std::cerr << "error: unhandled index exception: " |
20652
7a8096f8df5d
more cleanup of indexing exceptions
John W. Eaton <jwe@octave.org>
parents:
20651
diff
changeset
|
753 << e.message () << " -- trying to return to prompt" |
20542
dd6345fd8a97
use exceptions for better invalid index error reporting (bug #45957)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20535
diff
changeset
|
754 << std::endl; |
dd6345fd8a97
use exceptions for better invalid index error reporting (bug #45957)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
20535
diff
changeset
|
755 } |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20652
diff
changeset
|
756 catch (const octave_execution_exception& e) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
757 { |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20652
diff
changeset
|
758 std::string stack_trace = e.info (); |
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20652
diff
changeset
|
759 |
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20652
diff
changeset
|
760 if (! stack_trace.empty ()) |
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20652
diff
changeset
|
761 std::cerr << stack_trace; |
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20652
diff
changeset
|
762 |
20741
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
763 if (interactive) |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
764 recover_from_exception (); |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
765 else |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
766 { |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
767 // We should exit with a nonzero status. |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
768 retval = 1; |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
769 break; |
a5ab31b52ae8
eliminate more uses of error_state
John W. Eaton <jwe@octave.org>
parents:
20726
diff
changeset
|
770 } |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
771 } |
20535
b70cc4bd8109
begin removal of global error_state variable
John W. Eaton <jwe@octave.org>
parents:
20511
diff
changeset
|
772 catch (const std::bad_alloc&) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
773 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
774 recover_from_exception (); |
20756
200ae1d650b7
propagate octave_execution_exception objects through try/catch blocks
John W. Eaton <jwe@octave.org>
parents:
20741
diff
changeset
|
775 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
776 std::cerr << "error: out of memory -- trying to return to prompt" |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
777 << std::endl; |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
778 } |
21157
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21140
diff
changeset
|
779 |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21140
diff
changeset
|
780 #ifdef DBSTOP_NANINF |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21140
diff
changeset
|
781 if (Vdebug_on_naninf) |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21140
diff
changeset
|
782 { |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21140
diff
changeset
|
783 if (setjump (naninf_jump) != 0) |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21140
diff
changeset
|
784 debug_or_throw_exception (true); // true = stack trace |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21140
diff
changeset
|
785 } |
94fc5f13d51b
dbstop: conditional breakpoint, dbstop if caught error etc. (bug #46795)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21140
diff
changeset
|
786 #endif |
1907 | 787 } |
788 while (retval == 0); | |
789 | |
21363
8cfd1b47d49f
Eliminate more extra newlines to stdout when not interactive (bug #47258)
Mike Miller <mtmiller@octave.org>
parents:
21359
diff
changeset
|
790 if (interactive) |
8cfd1b47d49f
Eliminate more extra newlines to stdout when not interactive (bug #47258)
Mike Miller <mtmiller@octave.org>
parents:
21359
diff
changeset
|
791 octave_stdout << "\n"; |
18638
4ccd2b473f84
Print newline after closing interpreter with EOF (bug #41513).
Vaibhav Gupta <vaibhav.gupta@students.iiit.ac.in>
parents:
18515
diff
changeset
|
792 |
16987
aabe12e5fdc1
Allow exit/quit to properly pass all possible exit status values
Mike Miller <mtmiller@ieee.org>
parents:
16892
diff
changeset
|
793 if (retval == EOF) |
aabe12e5fdc1
Allow exit/quit to properly pass all possible exit status values
Mike Miller <mtmiller@ieee.org>
parents:
16892
diff
changeset
|
794 retval = 0; |
aabe12e5fdc1
Allow exit/quit to properly pass all possible exit status values
Mike Miller <mtmiller@ieee.org>
parents:
16892
diff
changeset
|
795 |
1907 | 796 return retval; |
797 } | |
798 | |
1683 | 799 // Fix up things before exiting. |
800 | |
16485
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
801 static std::list<std::string> octave_atexit_functions; |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
802 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
803 static void |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
804 do_octave_atexit (void) |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
805 { |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
806 static bool deja_vu = false; |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
807 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
808 OCTAVE_SAFE_CALL (remove_input_event_hook_functions, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
809 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
810 while (! octave_atexit_functions.empty ()) |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
811 { |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
812 std::string fcn = octave_atexit_functions.front (); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
813 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
814 octave_atexit_functions.pop_front (); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
815 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
816 OCTAVE_SAFE_CALL (reset_error_handler, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
817 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
818 OCTAVE_SAFE_CALL (feval, (fcn, octave_value_list (), 0)); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
819 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
820 OCTAVE_SAFE_CALL (flush_octave_stdout, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
821 } |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
822 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
823 if (! deja_vu) |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
824 { |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
825 deja_vu = true; |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
826 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
827 // Process pending events and disasble octave_link event |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
828 // processing with this call. |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
829 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
830 octave_link::process_events (true); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
831 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
832 // Do this explicitly so that destructors for mex file objects |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
833 // are called, so that functions registered with mexAtExit are |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
834 // called. |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
835 OCTAVE_SAFE_CALL (clear_mex_functions, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
836 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
837 OCTAVE_SAFE_CALL (command_editor::restore_terminal_state, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
838 |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
839 // FIXME: is this needed? Can it cause any trouble? |
16485
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
840 OCTAVE_SAFE_CALL (raw_mode, (0)); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
841 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
842 OCTAVE_SAFE_CALL (octave_history_write_timestamp, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
843 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
844 if (! command_history::ignoring_entries ()) |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
845 OCTAVE_SAFE_CALL (command_history::clean_up_and_save, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
846 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
847 OCTAVE_SAFE_CALL (gh_manager::close_all_figures, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
848 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
849 OCTAVE_SAFE_CALL (gtk_manager::unload_all_toolkits, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
850 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
851 OCTAVE_SAFE_CALL (close_files, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
852 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
853 OCTAVE_SAFE_CALL (cleanup_tmp_files, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
854 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
855 OCTAVE_SAFE_CALL (symbol_table::cleanup, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
856 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
857 OCTAVE_SAFE_CALL (sysdep_cleanup, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
858 |
17755
9c03b071fd7b
avoid HDF5 error message at exit (bug #37713)
John W. Eaton <jwe@octave.org>
parents:
17744
diff
changeset
|
859 OCTAVE_SAFE_CALL (octave_finalize_hdf5, ()); |
9c03b071fd7b
avoid HDF5 error message at exit (bug #37713)
John W. Eaton <jwe@octave.org>
parents:
17744
diff
changeset
|
860 |
16485
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
861 OCTAVE_SAFE_CALL (flush_octave_stdout, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
862 |
19849
1c9ed5b4c73d
input.h: change meaning of interactive and forced_interactive global variables.
Carnë Draug <carandraug@octave.org>
parents:
19734
diff
changeset
|
863 if (! quitting_gracefully && interactive) |
16485
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
864 { |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
865 octave_stdout << "\n"; |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
866 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
867 // Yes, we want this to be separate from the call to |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
868 // flush_octave_stdout above. |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
869 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
870 OCTAVE_SAFE_CALL (flush_octave_stdout, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
871 } |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
872 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
873 // Don't call singleton_cleanup_list::cleanup until we have the |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
874 // problems with registering/unregistering types worked out. For |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
875 // example, uncomment the following line, then use the make_int |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
876 // function from the examples directory to create an integer |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
877 // object and then exit Octave. Octave should crash with a |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
878 // segfault when cleaning up the typinfo singleton. We need some |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
879 // way to force new octave_value_X types that are created in |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
880 // .oct files to be unregistered when the .oct file shared library |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
881 // is unloaded. |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
882 // |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
883 // OCTAVE_SAFE_CALL (singleton_cleanup_list::cleanup, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
884 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
885 OCTAVE_SAFE_CALL (octave_chunk_buffer::clear, ()); |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
886 } |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
887 } |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
888 |
1683 | 889 void |
19714
21015ca26566
Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
19697
diff
changeset
|
890 clean_up_and_exit (int status, bool safe_to_return) |
3162 | 891 { |
3216 | 892 do_octave_atexit (); |
1683 | 893 |
19714
21015ca26566
Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
19697
diff
changeset
|
894 if (octave_link::exit (status)) |
16485
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
895 { |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
896 if (safe_to_return) |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
897 return; |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
898 else |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
899 { |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
900 // What should we do here? We might be called from some |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
901 // location other than the end of octave_execute_interpreter, |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
902 // so it might not be safe to return. |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
903 |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
904 // We have nothing else to do at this point, and the |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
905 // octave_link::exit function is supposed to take care of |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
906 // exiting for us. Assume that job won't take more than a |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
907 // day... |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
908 |
20923
58263bea2fdf
Unified "sleep" functions to "octave_sleep" in C++ and "pause" in Octave.
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
20878
diff
changeset
|
909 octave_sleep (86400); // FIXME: really needed? |
16485
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
910 } |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
911 } |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
912 else |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
913 { |
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
914 if (octave_exit) |
19714
21015ca26566
Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
19697
diff
changeset
|
915 (*octave_exit) (status); |
16485
8b783661e03f
improve exit sequence for GUI
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
916 } |
1683 | 917 } |
918 | |
11023
cb62c7401ea2
toplev.cc (Fquit): allow any number of output paramters
John W. Eaton <jwe@octave.org>
parents:
10890
diff
changeset
|
919 DEFUN (quit, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
920 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
921 @deftypefn {} {} exit\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
922 @deftypefnx {} {} exit (@var{status})\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
923 @deftypefnx {} {} quit\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
924 @deftypefnx {} {} quit (@var{status})\n\ |
19273
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
925 Exit the current Octave session.\n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
926 \n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
927 If the optional integer value @var{status} is supplied, pass that value to\n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
928 the operating system as Octave's exit status. The default value is zero.\n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
929 \n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
930 When exiting, Octave will attempt to run the m-file @file{finish.m} if it\n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
931 exists. User commands to save the workspace or clean up temporary files\n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
932 may be placed in that file. Alternatively, another m-file may be scheduled\n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
933 to run using @code{atexit}.\n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
934 @seealso{atexit}\n\ |
3333 | 935 @end deftypefn") |
1683 | 936 { |
19714
21015ca26566
Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
19697
diff
changeset
|
937 // Confirm OK to shutdown. Note: A dynamic function installation similar |
21015ca26566
Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
19697
diff
changeset
|
938 // to overriding polymorphism for which the GUI can install its own "quit" |
21015ca26566
Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
19697
diff
changeset
|
939 // yet call this base "quit" could be nice. No link would be needed here. |
21015ca26566
Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
19697
diff
changeset
|
940 if (! octave_link::confirm_shutdown ()) |
21078
49852ff04747
maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents:
21055
diff
changeset
|
941 return ovl (); |
19714
21015ca26566
Restructure shutdown flow and behavior for improved robustness
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
19697
diff
changeset
|
942 |
9255
1c2d2c9f4a8d
don't allow quit() in embedded mode by default, make configurable
Jaroslav Hajek <highegg@gmail.com>
parents:
9217
diff
changeset
|
943 if (! quit_allowed) |
11590
4ced6b90fffb
style fixes for warning and error messages in source files
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
944 error ("quit: not supported in embedded mode"); |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
945 |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
946 if (args.length () > 0) |
2068 | 947 { |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
948 int tmp = args(0).nint_value (); |
1683 | 949 |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
950 exit_status = tmp; |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
951 } |
3180 | 952 |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
953 // Instead of simply calling exit, we simulate an interrupt |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
954 // with a request to exit cleanly so that no matter where the |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
955 // call to quit occurs, we will run the unwind_protect stack, |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
956 // clear the OCTAVE_LOCAL_BUFFER allocations, etc. before |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
957 // exiting. |
9383 | 958 |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
959 quitting_gracefully = true; |
9383 | 960 |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
961 octave_interrupt_state = -1; |
9383 | 962 |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
963 octave_throw_interrupt_exception (); |
2068 | 964 |
21078
49852ff04747
maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents:
21055
diff
changeset
|
965 return ovl (); |
1683 | 966 } |
967 | |
968 DEFALIAS (exit, quit); | |
969 | |
1957 | 970 DEFUN (warranty, , , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
971 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
972 @deftypefn {} {} warranty ()\n\ |
3446 | 973 Describe the conditions for copying and distributing Octave.\n\ |
974 @end deftypefn") | |
1683 | 975 { |
17510
7542f4496974
eliminate some macros in version.h
John W. Eaton <jwe@octave.org>
parents:
17281
diff
changeset
|
976 octave_stdout << "\n" << octave_name_version_and_copyright () << "\n\ |
3922 | 977 \n\ |
19604
7005044f3080
Correct missing word in output of warranty().
Daniel J Sebald <daniel.sebald@ieee.org>
parents:
17821
diff
changeset
|
978 GNU Octave is free software; you can redistribute it and/or modify\n\ |
1683 | 979 it under the terms of the GNU General Public License as published by\n\ |
7016 | 980 the Free Software Foundation; either version 3 of the License, or\n\ |
1683 | 981 (at your option) any later version.\n\ |
982 \n\ | |
11104 | 983 GNU Octave is distributed in the hope that it will be useful,\n\ |
1683 | 984 but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ |
985 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ | |
986 GNU General Public License for more details.\n\ | |
987 \n\ | |
988 You should have received a copy of the GNU General Public License\n\ | |
7016 | 989 along with this program. If not, see <http://www.gnu.org/licenses/>.\n\ |
1683 | 990 \n"; |
991 | |
21078
49852ff04747
maint: Remove unnecessary declarations of retval.
Rik <rik@octave.org>
parents:
21055
diff
changeset
|
992 return ovl (); |
1683 | 993 } |
994 | |
995 // Execute a shell command. | |
996 | |
6316 | 997 static int |
998 wait_for_input (int fid) | |
999 { | |
1000 int retval = -1; | |
1001 | |
1002 #if defined (HAVE_SELECT) | |
1003 if (fid >= 0) | |
1004 { | |
1005 fd_set set; | |
1006 | |
1007 FD_ZERO (&set); | |
1008 FD_SET (fid, &set); | |
1009 | |
10411 | 1010 retval = gnulib::select (FD_SETSIZE, &set, 0, 0, 0); |
6316 | 1011 } |
1012 #else | |
1013 retval = 1; | |
1014 #endif | |
1015 | |
1016 return retval; | |
1017 } | |
1018 | |
2086 | 1019 static octave_value_list |
3523 | 1020 run_command_and_return_output (const std::string& cmd_str) |
2083 | 1021 { |
2086 | 1022 octave_value_list retval; |
10212
56f7734f5448
fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents:
10186
diff
changeset
|
1023 unwind_protect frame; |
2083 | 1024 |
1025 iprocstream *cmd = new iprocstream (cmd_str.c_str ()); | |
1026 | |
10212
56f7734f5448
fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents:
10186
diff
changeset
|
1027 frame.add_delete (cmd); |
56f7734f5448
fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents:
10186
diff
changeset
|
1028 frame.add_fcn (octave_child_list::remove, cmd->pid ()); |
3060 | 1029 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1030 if (! *cmd) |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1031 error ("system: unable to start subprocess for '%s'", cmd_str.c_str ()); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1032 |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1033 int fid = cmd->file_number (); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1034 |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1035 std::ostringstream output_buf; |
2095 | 1036 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1037 char ch; |
4494 | 1038 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1039 for (;;) |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1040 { |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1041 if (cmd->get (ch)) |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1042 output_buf.put (ch); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1043 else |
10212
56f7734f5448
fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents:
10186
diff
changeset
|
1044 { |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1045 if (! cmd->eof () && errno == EAGAIN) |
10212
56f7734f5448
fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents:
10186
diff
changeset
|
1046 { |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1047 cmd->clear (); |
3147 | 1048 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1049 if (wait_for_input (fid) != 1) |
10212
56f7734f5448
fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents:
10186
diff
changeset
|
1050 break; |
56f7734f5448
fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents:
10186
diff
changeset
|
1051 } |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1052 else |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1053 break; |
10212
56f7734f5448
fix process creation failure handling in system()
Jaroslav Hajek <highegg@gmail.com>
parents:
10186
diff
changeset
|
1054 } |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1055 } |
3147 | 1056 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1057 int cmd_status = cmd->close (); |
2083 | 1058 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1059 if (octave_wait::ifexited (cmd_status)) |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1060 cmd_status = octave_wait::exitstatus (cmd_status); |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1061 else |
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1062 cmd_status = 127; |
2083 | 1063 |
20962
3aa293be0e8d
maint: Invert simple conditionals in if/else/error paradigm.
Rik <rik@octave.org>
parents:
20946
diff
changeset
|
1064 retval = ovl (cmd_status, output_buf.str ()); |
2083 | 1065 |
1066 return retval; | |
1067 } | |
1068 | |
5285 | 1069 enum system_exec_type { et_sync, et_async }; |
1070 | |
1957 | 1071 DEFUN (system, args, nargout, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
1072 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
1073 @deftypefn {} {} system (\"@var{string}\")\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
1074 @deftypefnx {} {} system (\"@var{string}\", @var{return_output})\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
1075 @deftypefnx {} {} system (\"@var{string}\", @var{return_output}, @var{type})\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
1076 @deftypefnx {} {[@var{status}, @var{output}] =} system (@dots{})\n\ |
11123
fbec4b3be59f
toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents:
11104
diff
changeset
|
1077 Execute a shell command specified by @var{string}.\n\ |
20172
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1078 \n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1079 If the optional argument @var{type} is @qcode{\"async\"}, the process is\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1080 started in the background and the process ID of the child process is\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1081 returned immediately. Otherwise, the child process is started and Octave\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1082 waits until it exits. If the @var{type} argument is omitted, it defaults to\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1083 the value @qcode{\"sync\"}.\n\ |
2083 | 1084 \n\ |
14018
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1085 If @var{system} is called with one or more output arguments, or if the\n\ |
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1086 optional argument @var{return_output} is true and the subprocess is started\n\ |
20172
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1087 synchronously, then the output from the command is returned as a variable.\n\ |
14018
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1088 Otherwise, if the subprocess is executed synchronously, its output is sent\n\ |
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1089 to the standard output. To send the output of a command executed with\n\ |
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1090 @code{system} through the pager, use a command like\n\ |
2321 | 1091 \n\ |
3301 | 1092 @example\n\ |
14018
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1093 @group\n\ |
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1094 [output, text] = system (\"cmd\");\n\ |
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1095 disp (text);\n\ |
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1096 @end group\n\ |
3301 | 1097 @end example\n\ |
2321 | 1098 \n\ |
3301 | 1099 @noindent\n\ |
2321 | 1100 or\n\ |
1101 \n\ | |
3301 | 1102 @example\n\ |
14018
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1103 printf (\"%s\\n\", nthargout (2, \"system\", \"cmd\"));\n\ |
3301 | 1104 @end example\n\ |
1105 \n\ | |
5659 | 1106 The @code{system} function can return two values. The first is the\n\ |
1107 exit status of the command and the second is any output from the\n\ | |
1108 command that was written to the standard output stream. For example,\n\ | |
3301 | 1109 \n\ |
1110 @example\n\ | |
5717 | 1111 [status, output] = system (\"echo foo; exit 2\");\n\ |
3301 | 1112 @end example\n\ |
1113 \n\ | |
1114 @noindent\n\ | |
1115 will set the variable @code{output} to the string @samp{foo}, and the\n\ | |
1116 variable @code{status} to the integer @samp{2}.\n\ | |
11123
fbec4b3be59f
toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents:
11104
diff
changeset
|
1117 \n\ |
fbec4b3be59f
toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents:
11104
diff
changeset
|
1118 For commands run asynchronously, @var{status} is the process id of the\n\ |
fbec4b3be59f
toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents:
11104
diff
changeset
|
1119 command shell that is started to run the command.\n\ |
14018
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1120 @seealso{unix, dos}\n\ |
3301 | 1121 @end deftypefn") |
1683 | 1122 { |
1123 int nargin = args.length (); | |
1124 | |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1125 if (nargin == 0 || nargin > 3) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1126 print_usage (); |
2083 | 1127 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1128 system_exec_type type = et_sync; |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1129 if (nargin == 3) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1130 { |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1131 std::string type_str = args(2).xstring_value ("system: TYPE must be a string"); |
11123
fbec4b3be59f
toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents:
11104
diff
changeset
|
1132 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1133 if (type_str == "sync") |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1134 type = et_sync; |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1135 else if (type_str == "async") |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1136 type = et_async; |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1137 else |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20799
diff
changeset
|
1138 error ("system: TYPE must be \"sync\" or \"async\""); |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1139 } |
11123
fbec4b3be59f
toplev.cc (Fsystem): allow optional return_output and type arguments to be specified independently
John W. Eaton <jwe@octave.org>
parents:
11104
diff
changeset
|
1140 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1141 octave_value_list retval; |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1142 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1143 // FIXME: Is this unwind_protect frame needed anymore (12/16/15)? |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1144 unwind_protect frame; |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1145 |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1146 bool return_output = (nargin == 1 && nargout > 1); |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1147 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1148 if (nargin > 1) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1149 { |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1150 try |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1151 { |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1152 return_output = args(1).is_true (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1153 } |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1154 catch (octave_execution_exception& e) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1155 { |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1156 error (e, "system: RETURN_OUTPUT must be boolean value true or false"); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1157 } |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1158 } |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1159 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1160 if (return_output && type == et_async) |
20831
35241c4b696c
eliminate return statements after calls to error
John W. Eaton <jwe@octave.org>
parents:
20799
diff
changeset
|
1161 error ("system: can't return output from commands run asynchronously"); |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1162 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1163 std::string cmd_str = args(0).xstring_value ("system: first argument must be a string"); |
1683 | 1164 |
7104 | 1165 #if defined (__WIN32__) && ! defined (__CYGWIN__) |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1166 // Work around weird double-quote handling on Windows systems. |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1167 if (type == et_sync) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1168 cmd_str = "\"" + cmd_str + "\""; |
7104 | 1169 #endif |
1170 | |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1171 if (type == et_async) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1172 { |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1173 // FIXME: maybe this should go in sysdep.cc? |
4086 | 1174 #ifdef HAVE_FORK |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1175 pid_t pid = fork (); |
2083 | 1176 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1177 if (pid < 0) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1178 error ("system: fork failed -- can't create child process"); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1179 else if (pid == 0) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1180 { |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
1181 // FIXME: should probably replace this call with something portable. |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1182 execl (SHELL_PATH, "sh", "-c", cmd_str.c_str (), |
21534
be1c9f1e31ab
Cast NULL pointer to char, rather than void, when using execl.
Rik <rik@octave.org>
parents:
21434
diff
changeset
|
1183 static_cast<char *> (0)); |
3273 | 1184 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1185 panic_impossible (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1186 } |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1187 else |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1188 retval(0) = pid; |
6222 | 1189 #elif defined (__WIN32__) |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1190 STARTUPINFO si; |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1191 PROCESS_INFORMATION pi; |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1192 ZeroMemory (&si, sizeof (si)); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1193 ZeroMemory (&pi, sizeof (pi)); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1194 OCTAVE_LOCAL_BUFFER (char, xcmd_str, cmd_str.length ()+1); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1195 strcpy (xcmd_str, cmd_str.c_str ()); |
6222 | 1196 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1197 if (! CreateProcess (0, xcmd_str, 0, 0, FALSE, 0, 0, 0, &si, &pi)) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1198 error ("system: CreateProcess failed -- can't create child process"); |
21055
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
1199 |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
1200 retval(0) = pi.dwProcessId; |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
1201 CloseHandle (pi.hProcess); |
5e00ed38a58b
maint: Replace if/error/else paradigm with just if/error.
Rik <rik@octave.org>
parents:
21017
diff
changeset
|
1202 CloseHandle (pi.hThread); |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1203 #else |
21109
bd1752782e56
Use err_disabled_feature, warn_disabled_feature throughout code base.
Rik <rik@octave.org>
parents:
21078
diff
changeset
|
1204 err_disabled_feature ("system", "asynchronous system calls"); |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1205 #endif |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1206 } |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1207 else if (return_output) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1208 retval = run_command_and_return_output (cmd_str); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1209 else |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1210 { |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1211 int status = system (cmd_str.c_str ()); |
2321 | 1212 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1213 // The value in status is as returned by waitpid. If |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1214 // the process exited normally, extract the actual exit |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1215 // status of the command. Otherwise, return 127 as a |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1216 // failure code. |
20582
ba2b07c13913
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
1217 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1218 if (octave_wait::ifexited (status)) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1219 status = octave_wait::exitstatus (status); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1220 |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1221 retval(0) = status; |
1683 | 1222 } |
1223 | |
1224 return retval; | |
1225 } | |
1226 | |
12846
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1227 /* |
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1228 %!test |
14018
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1229 %! cmd = ls_command (); |
12846
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1230 %! [status, output] = system (cmd); |
14018
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1231 %! assert (status, 0); |
12846
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1232 %! assert (ischar (output)); |
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1233 %! assert (! isempty (output)); |
14018
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1234 |
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1235 %!error system () |
5d5685216876
Deprecate shell_cmd function and update system, dos, unix commands
Rik <octave@nomad.inbox5.com>
parents:
14016
diff
changeset
|
1236 %!error system (1, 2, 3) |
12846
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1237 */ |
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1238 |
7409 | 1239 void |
1240 octave_add_atexit_function (const std::string& fname) | |
1241 { | |
1242 octave_atexit_functions.push_front (fname); | |
1243 } | |
1244 | |
1245 bool | |
1246 octave_remove_atexit_function (const std::string& fname) | |
1247 { | |
1248 bool found = false; | |
1249 | |
1250 for (std::list<std::string>::iterator p = octave_atexit_functions.begin (); | |
1251 p != octave_atexit_functions.end (); p++) | |
1252 { | |
1253 if (*p == fname) | |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1254 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1255 octave_atexit_functions.erase (p); |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1256 found = true; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1257 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1258 } |
7409 | 1259 } |
1260 | |
1261 return found; | |
1262 } | |
1263 | |
1264 | |
6680 | 1265 DEFUN (atexit, args, nargout, |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
1266 "-*- texinfo -*-\n\ |
20853
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
1267 @deftypefn {} {} atexit (@var{fcn})\n\ |
1142cf6abc0d
2015 Code Sprint: remove class of function from docstring for all C++ files.
Rik <rik@octave.org>
parents:
20831
diff
changeset
|
1268 @deftypefnx {} {} atexit (@var{fcn}, @var{flag})\n\ |
19273
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
1269 Register a function to be called when Octave exits.\n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
1270 \n\ |
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
1271 For example,\n\ |
2077 | 1272 \n\ |
3332 | 1273 @example\n\ |
1274 @group\n\ | |
9035
57649dcecb55
Documentation cleanup of basics.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
1275 function last_words ()\n\ |
6620 | 1276 disp (\"Bye bye\");\n\ |
3332 | 1277 endfunction\n\ |
9035
57649dcecb55
Documentation cleanup of basics.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
1278 atexit (\"last_words\");\n\ |
3332 | 1279 @end group\n\ |
1280 @end example\n\ | |
1281 \n\ | |
1282 @noindent\n\ | |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
16987
diff
changeset
|
1283 will print the message @qcode{\"Bye bye\"} when Octave exits.\n\ |
6680 | 1284 \n\ |
20172
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1285 The additional argument @var{flag} will register or unregister @var{fcn}\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1286 from the list of functions to be called when Octave exits. If @var{flag} is\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1287 true, the function is registered, and if @var{flag} is false, it is\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1288 unregistered. For example, after registering the function @code{last_words}\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1289 above,\n\ |
6680 | 1290 \n\ |
1291 @example\n\ | |
9035
57649dcecb55
Documentation cleanup of basics.texi
Rik <rdrider0-list@yahoo.com>
parents:
8920
diff
changeset
|
1292 atexit (\"last_words\", false);\n\ |
6680 | 1293 @end example\n\ |
1294 \n\ | |
1295 @noindent\n\ | |
1296 will remove the function from the list and Octave will not call\n\ | |
9133
c0cef1436788
Update help text for sections 2.2 and 2.3 of basics.txi
Rik <rdrider0-list@yahoo.com>
parents:
9079
diff
changeset
|
1297 @code{last_words} when it exits.\n\ |
6680 | 1298 \n\ |
7001 | 1299 Note that @code{atexit} only removes the first occurrence of a function\n\ |
20172
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1300 from the list, so if a function was placed in the list multiple times with\n\ |
4f45eaf83908
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19849
diff
changeset
|
1301 @code{atexit}, it must also be removed from the list multiple times.\n\ |
19273
dc64f1c4a33e
doc: Add documentation about finish.m and shutdown procedure to manual.
Rik <rik@octave.org>
parents:
19192
diff
changeset
|
1302 @seealso{quit}\n\ |
3333 | 1303 @end deftypefn") |
2077 | 1304 { |
1305 int nargin = args.length (); | |
1306 | |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1307 if (nargin < 1 || nargin > 2) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1308 print_usage (); |
20582
ba2b07c13913
use new string_value method to handle value extraction errors
John W. Eaton <jwe@octave.org>
parents:
20555
diff
changeset
|
1309 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1310 std::string arg = args(0).xstring_value ("atexit: FCN argument must be a string"); |
2077 | 1311 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1312 bool add_mode = (nargin == 2) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1313 ? args(1).xbool_value ("atexit: FLAG argument must be a logical value") |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1314 : true; |
6680 | 1315 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1316 octave_value_list retval; |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1317 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1318 if (add_mode) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1319 octave_add_atexit_function (arg); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1320 else |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1321 { |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1322 bool found = octave_remove_atexit_function (arg); |
6680 | 1323 |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1324 if (nargout > 0) |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1325 retval = ovl (found); |
2077 | 1326 } |
1327 | |
1328 return retval; | |
1329 } | |
1330 | |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1331 static octave_value |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1332 find_config_info (const octave_scalar_map& m, const std::string& key) |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1333 { |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1334 if (m.isfield (key)) |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1335 { |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1336 Cell c = m.contents (key); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1337 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1338 if (! c.is_empty ()) |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1339 return c(0); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1340 } |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1341 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1342 return octave_value (); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1343 } |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1344 |
21434
1da428cbf401
deprecate octave_config_info
John W. Eaton <jwe@octave.org>
parents:
21421
diff
changeset
|
1345 DEFUN (__octave_config_info__, args, , |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
1346 "-*- texinfo -*-\n\ |
21434
1da428cbf401
deprecate octave_config_info
John W. Eaton <jwe@octave.org>
parents:
21421
diff
changeset
|
1347 @deftypefn {} {} __octave_config_info__ ()\n\ |
1da428cbf401
deprecate octave_config_info
John W. Eaton <jwe@octave.org>
parents:
21421
diff
changeset
|
1348 @deftypefnx {} {} __octave_config_info__ (@var{option})\n\ |
19192
8a8a7bc2a09d
Improve docstrings and mark documentation m-files as tested in miscellaneous/ dir.
Rik <rik@octave.org>
parents:
19032
diff
changeset
|
1349 Return a structure containing configuration and installation information for\n\ |
8a8a7bc2a09d
Improve docstrings and mark documentation m-files as tested in miscellaneous/ dir.
Rik <rik@octave.org>
parents:
19032
diff
changeset
|
1350 Octave.\n\ |
2689 | 1351 \n\ |
12208
9611014e7cf1
Add function compare_versions to documentation.
Rik <octave@nomad.inbox5.com>
parents:
12195
diff
changeset
|
1352 If @var{option} is a string, return the configuration information for the\n\ |
2689 | 1353 specified option.\n\ |
1354 \n\ | |
19274
66ca15a97988
doc: Remove deprecated dump_prefs function from the manual.
Rik <rik@octave.org>
parents:
19273
diff
changeset
|
1355 @seealso{computer}\n\ |
3301 | 1356 @end deftypefn") |
2162 | 1357 { |
4128 | 1358 #if defined (ENABLE_DYNAMIC_LINKING) |
2689 | 1359 bool octave_supports_dynamic_linking = true; |
1360 #else | |
1361 bool octave_supports_dynamic_linking = false; | |
1362 #endif | |
1363 | |
4357 | 1364 static bool initialized = false; |
2162 | 1365 |
6274 | 1366 struct conf_info_struct |
1367 { | |
1368 const char *key; | |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1369 octave_value val; |
6274 | 1370 }; |
1371 | |
1372 static const conf_info_struct conf_info[] = | |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1373 { |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1374 { "DEFAULT_PAGER", OCTAVE_DEFAULT_PAGER }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1375 |
21229
a83e7a384ee0
create and install a subset of config.h in octave-config.h
John W. Eaton <jwe@octave.org>
parents:
21226
diff
changeset
|
1376 #if defined (OCTAVE_ENABLE_64) |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1377 { "ENABLE_64", true }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1378 #else |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1379 { "ENABLE_64", false }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1380 #endif |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1381 |
21229
a83e7a384ee0
create and install a subset of config.h in octave-config.h
John W. Eaton <jwe@octave.org>
parents:
21226
diff
changeset
|
1382 #if defined (OCTAVE_ENABLE_ATOMIC_REFCOUNT) |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1383 { "ENABLE_ATOMIC_REFCOUNT", true }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1384 #else |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1385 { "ENABLE_ATOMIC_REFCOUNT", false }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1386 #endif |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1387 |
21229
a83e7a384ee0
create and install a subset of config.h in octave-config.h
John W. Eaton <jwe@octave.org>
parents:
21226
diff
changeset
|
1388 #if defined (OCTAVE_ENABLE_BOUNDS_CHECK) |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1389 { "ENABLE_BOUNDS_CHECK", true }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1390 #else |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1391 { "ENABLE_BOUNDS_CHECK", false }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1392 #endif |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1393 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1394 #if defined (ENABLE_DOCS) |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1395 { "ENABLE_DOCS", true }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1396 #else |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1397 { "ENABLE_DOCS", false }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1398 #endif |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1399 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1400 #if defined (ENABLE_DYNAMIC_LINKING) |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1401 { "ENABLE_DYNAMIC_LINKING", true }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1402 #else |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1403 { "ENABLE_DYNAMIC_LINKING", false }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1404 #endif |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1405 |
21229
a83e7a384ee0
create and install a subset of config.h in octave-config.h
John W. Eaton <jwe@octave.org>
parents:
21226
diff
changeset
|
1406 #if defined (OCTAVE_ENABLE_FLOAT_TRUNCATE) |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1407 { "ENABLE_FLOAT_TRUNCATE", true }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1408 #else |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1409 { "ENABLE_FLOAT_TRUNCATE", false }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1410 #endif |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1411 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1412 #if defined (ENABLE_JIT) |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1413 { "ENABLE_JIT", true }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1414 #else |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1415 { "ENABLE_JIT", false }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1416 #endif |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1417 |
21229
a83e7a384ee0
create and install a subset of config.h in octave-config.h
John W. Eaton <jwe@octave.org>
parents:
21226
diff
changeset
|
1418 #if defined (OCTAVE_ENABLE_OPENMP) |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1419 { "ENABLE_OPENMP", true }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1420 #else |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1421 { "ENABLE_OPENMP", false }, |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1422 #endif |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1423 |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1424 { "api_version", OCTAVE_API_VERSION }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1425 { "archlibdir", subst_octave_home (OCTAVE_ARCHLIBDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1426 { "bindir", subst_octave_home (OCTAVE_BINDIR) }, |
21598
cf552443c104
revise method of handling hg id for build info
John W. Eaton <jwe@octave.org>
parents:
21597
diff
changeset
|
1427 { "build_time", octave_build_time () }, |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1428 { "canonical_host_type", OCTAVE_CANONICAL_HOST_TYPE }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1429 { "datadir", subst_octave_home (OCTAVE_DATADIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1430 { "datarootdir", subst_octave_home (OCTAVE_DATAROOTDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1431 { "exec_prefix", subst_octave_home (OCTAVE_EXEC_PREFIX) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1432 { "fcnfiledir", subst_octave_home (OCTAVE_FCNFILEDIR) }, |
21600
184b85b31e03
more updates for version function
mmuetzel <markus.muetzel@gmx.de>
parents:
21598
diff
changeset
|
1433 { "fftw_version", octave_fftw_version () }, |
21603
37cbdf7bffa9
Add fftwf_version (bug #45659)
mmuetzel <markus.muetzel@gmx.de>
parents:
21600
diff
changeset
|
1434 { "fftwf_version", octave_fftwf_version () }, |
21598
cf552443c104
revise method of handling hg id for build info
John W. Eaton <jwe@octave.org>
parents:
21597
diff
changeset
|
1435 { "hg_id", octave_hg_id () }, |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1436 { "imagedir", subst_octave_home (OCTAVE_IMAGEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1437 { "includedir", subst_octave_home (OCTAVE_INCLUDEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1438 { "infodir", subst_octave_home (OCTAVE_INFODIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1439 { "infofile", subst_octave_home (OCTAVE_INFOFILE) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1440 { "libdir", subst_octave_home (OCTAVE_LIBDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1441 { "libexecdir", subst_octave_home (OCTAVE_LIBEXECDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1442 { "localapiarchlibdir", subst_octave_home (OCTAVE_LOCALAPIARCHLIBDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1443 { "localapifcnfiledir", subst_octave_home (OCTAVE_LOCALAPIFCNFILEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1444 { "localapioctfiledir", subst_octave_home (OCTAVE_LOCALAPIOCTFILEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1445 { "localarchlibdir", subst_octave_home (OCTAVE_LOCALARCHLIBDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1446 { "localfcnfiledir", subst_octave_home (OCTAVE_LOCALFCNFILEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1447 { "localoctfiledir", subst_octave_home (OCTAVE_LOCALOCTFILEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1448 { "localstartupfiledir", subst_octave_home (OCTAVE_LOCALSTARTUPFILEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1449 { "localverarchlibdir", subst_octave_home (OCTAVE_LOCALVERARCHLIBDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1450 { "localverfcnfiledir", subst_octave_home (OCTAVE_LOCALVERFCNFILEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1451 { "localveroctfiledir", subst_octave_home (OCTAVE_LOCALVEROCTFILEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1452 { "man1dir", subst_octave_home (OCTAVE_MAN1DIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1453 { "man1ext", OCTAVE_MAN1EXT }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1454 { "mandir", subst_octave_home (OCTAVE_MANDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1455 { "octdatadir", subst_octave_home (OCTAVE_OCTDATADIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1456 { "octfiledir", subst_octave_home (OCTAVE_OCTFILEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1457 { "octetcdir", subst_octave_home (OCTAVE_OCTETCDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1458 { "octincludedir", subst_octave_home (OCTAVE_OCTINCLUDEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1459 { "octlibdir", subst_octave_home (OCTAVE_OCTLIBDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1460 { "octtestsdir", subst_octave_home (OCTAVE_OCTTESTSDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1461 { "prefix", subst_octave_home (OCTAVE_PREFIX) }, |
21598
cf552443c104
revise method of handling hg id for build info
John W. Eaton <jwe@octave.org>
parents:
21597
diff
changeset
|
1462 { "release_date", OCTAVE_RELEASE_DATE }, |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1463 { "startupfiledir", subst_octave_home (OCTAVE_STARTUPFILEDIR) }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1464 { "version", OCTAVE_VERSION }, |
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1465 { 0, octave_value () } |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1466 }; |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1467 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1468 struct build_info_struct |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
1469 { |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1470 const char *key; |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1471 const char *val; |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17755
diff
changeset
|
1472 }; |
4357 | 1473 |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1474 static const build_info_struct build_info[] = |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1475 { |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1476 { "AMD_CPPFLAGS", octave::build_env::AMD_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1477 { "AMD_LDFLAGS", octave::build_env::AMD_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1478 { "AMD_LIBS", octave::build_env::AMD_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1479 { "AR", octave::build_env::AR }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1480 { "ARFLAGS", octave::build_env::ARFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1481 { "ARPACK_CPPFLAGS", octave::build_env::ARPACK_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1482 { "ARPACK_LDFLAGS", octave::build_env::ARPACK_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1483 { "ARPACK_LIBS", octave::build_env::ARPACK_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1484 { "BLAS_LIBS", octave::build_env::BLAS_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1485 { "CAMD_CPPFLAGS", octave::build_env::CAMD_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1486 { "CAMD_LDFLAGS", octave::build_env::CAMD_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1487 { "CAMD_LIBS", octave::build_env::CAMD_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1488 { "CARBON_LIBS", octave::build_env::CARBON_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1489 { "CC", octave::build_env::CC }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1490 { "CCOLAMD_CPPFLAGS", octave::build_env::CCOLAMD_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1491 { "CCOLAMD_LDFLAGS", octave::build_env::CCOLAMD_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1492 { "CCOLAMD_LIBS", octave::build_env::CCOLAMD_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1493 { "CFLAGS", octave::build_env::CFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1494 { "CHOLMOD_CPPFLAGS", octave::build_env::CHOLMOD_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1495 { "CHOLMOD_LDFLAGS", octave::build_env::CHOLMOD_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1496 { "CHOLMOD_LIBS", octave::build_env::CHOLMOD_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1497 { "COLAMD_CPPFLAGS", octave::build_env::COLAMD_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1498 { "COLAMD_LDFLAGS", octave::build_env::COLAMD_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1499 { "COLAMD_LIBS", octave::build_env::COLAMD_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1500 { "CPICFLAG", octave::build_env::CPICFLAG }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1501 { "CPPFLAGS", octave::build_env::CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1502 { "CURL_CPPFLAGS", octave::build_env::CURL_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1503 { "CURL_LDFLAGS", octave::build_env::CURL_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1504 { "CURL_LIBS", octave::build_env::CURL_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1505 { "CXSPARSE_CPPFLAGS", octave::build_env::CXSPARSE_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1506 { "CXSPARSE_LDFLAGS", octave::build_env::CXSPARSE_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1507 { "CXSPARSE_LIBS", octave::build_env::CXSPARSE_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1508 { "CXX", octave::build_env::CXX }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1509 { "CXXCPP", octave::build_env::CXXCPP }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1510 { "CXXFLAGS", octave::build_env::CXXFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1511 { "CXXPICFLAG", octave::build_env::CXXPICFLAG }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1512 { "DEFS", octave::build_env::DEFS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1513 { "DL_LD", octave::build_env::DL_LD }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1514 { "DL_LDFLAGS", octave::build_env::DL_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1515 { "DL_LIBS", octave::build_env::DL_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1516 { "GCC_VERSION", octave::build_env::GCC_VERSION }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1517 { "GXX_VERSION", octave::build_env::GXX_VERSION }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1518 { "EXEEXT", octave::build_env::EXEEXT }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1519 { "F77", octave::build_env::F77 }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1520 { "F77_FLOAT_STORE_FLAG", octave::build_env::F77_FLOAT_STORE_FLAG }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1521 { "F77_INTEGER_8_FLAG", octave::build_env::F77_INTEGER_8_FLAG }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1522 { "FFLAGS", octave::build_env::FFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1523 { "FFTW3_CPPFLAGS", octave::build_env::FFTW3_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1524 { "FFTW3_LDFLAGS", octave::build_env::FFTW3_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1525 { "FFTW3_LIBS", octave::build_env::FFTW3_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1526 { "FFTW3F_CPPFLAGS", octave::build_env::FFTW3F_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1527 { "FFTW3F_LDFLAGS", octave::build_env::FFTW3F_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1528 { "FFTW3F_LIBS", octave::build_env::FFTW3F_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1529 { "FLIBS", octave::build_env::FLIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1530 { "FLTK_CPPFLAGS", octave::build_env::FLTK_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1531 { "FLTK_LDFLAGS", octave::build_env::FLTK_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1532 { "FLTK_LIBS", octave::build_env::FLTK_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1533 { "FONTCONFIG_CPPFLAGS", octave::build_env::FONTCONFIG_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1534 { "FONTCONFIG_LIBS", octave::build_env::FONTCONFIG_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1535 { "FPICFLAG", octave::build_env::FPICFLAG }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1536 { "FT2_CPPFLAGS", octave::build_env::FT2_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1537 { "FT2_LIBS", octave::build_env::FT2_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1538 { "GLPK_CPPFLAGS", octave::build_env::GLPK_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1539 { "GLPK_LDFLAGS", octave::build_env::GLPK_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1540 { "GLPK_LIBS", octave::build_env::GLPK_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1541 { "GNUPLOT", octave::build_env::GNUPLOT }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1542 { "HDF5_CPPFLAGS", octave::build_env::HDF5_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1543 { "HDF5_LDFLAGS", octave::build_env::HDF5_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1544 { "HDF5_LIBS", octave::build_env::HDF5_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1545 { "LAPACK_LIBS", octave::build_env::LAPACK_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1546 { "LDFLAGS", octave::build_env::LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1547 { "LD_CXX", octave::build_env::LD_CXX }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1548 { "LD_STATIC_FLAG", octave::build_env::LD_STATIC_FLAG }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1549 { "LEX", octave::build_env::LEX }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1550 { "LEXLIB", octave::build_env::LEXLIB }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1551 { "LFLAGS", octave::build_env::LFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1552 { "LIBEXT", octave::build_env::LIBEXT }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1553 { "LIBOCTAVE", octave::build_env::LIBOCTAVE }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1554 { "LIBOCTINTERP", octave::build_env::LIBOCTINTERP }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1555 { "LIBS", octave::build_env::LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1556 { "LLVM_CPPFLAGS", octave::build_env::LLVM_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1557 { "LLVM_LDFLAGS", octave::build_env::LLVM_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1558 { "LLVM_LIBS", octave::build_env::LLVM_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1559 { "LN_S", octave::build_env::LN_S }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1560 { "MAGICK_CPPFLAGS", octave::build_env::MAGICK_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1561 { "MAGICK_LDFLAGS", octave::build_env::MAGICK_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1562 { "MAGICK_LIBS", octave::build_env::MAGICK_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1563 { "MKOCTFILE_DL_LDFLAGS", octave::build_env::MKOCTFILE_DL_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1564 { "OCTAVE_LINK_DEPS", octave::build_env::OCTAVE_LINK_DEPS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1565 { "OCTAVE_LINK_OPTS", octave::build_env::OCTAVE_LINK_OPTS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1566 { "OCT_LINK_DEPS", octave::build_env::OCT_LINK_DEPS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1567 { "OCT_LINK_OPTS", octave::build_env::OCT_LINK_OPTS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1568 { "OPENGL_LIBS", octave::build_env::OPENGL_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1569 { "OSMESA_CPPFLAGS", octave::build_env::OSMESA_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1570 { "OSMESA_LDFLAGS", octave::build_env::OSMESA_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1571 { "OSMESA_LIBS", octave::build_env::OSMESA_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1572 { "PCRE_CPPFLAGS", octave::build_env::PCRE_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1573 { "PCRE_LIBS", octave::build_env::PCRE_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1574 { "PTHREAD_CFLAGS", octave::build_env::PTHREAD_CFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1575 { "PTHREAD_LIBS", octave::build_env::PTHREAD_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1576 { "QHULL_CPPFLAGS", octave::build_env::QHULL_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1577 { "QHULL_LDFLAGS", octave::build_env::QHULL_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1578 { "QHULL_LIBS", octave::build_env::QHULL_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1579 { "QRUPDATE_CPPFLAGS", octave::build_env::QRUPDATE_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1580 { "QRUPDATE_LDFLAGS", octave::build_env::QRUPDATE_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1581 { "QRUPDATE_LIBS", octave::build_env::QRUPDATE_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1582 { "QT_CPPFLAGS", octave::build_env::QT_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1583 { "QT_LDFLAGS", octave::build_env::QT_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1584 { "QT_LIBS", octave::build_env::QT_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1585 { "RANLIB", octave::build_env::RANLIB }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1586 { "RDYNAMIC_FLAG", octave::build_env::RDYNAMIC_FLAG }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1587 { "READLINE_LIBS", octave::build_env::READLINE_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1588 { "SED", octave::build_env::SED }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1589 { "SHARED_LIBS", octave::build_env::SHARED_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1590 { "SHLEXT", octave::build_env::SHLEXT }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1591 { "SHLEXT_VER", octave::build_env::SHLEXT_VER }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1592 { "SH_LD", octave::build_env::SH_LD }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1593 { "SH_LDFLAGS", octave::build_env::SH_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1594 { "STATIC_LIBS", octave::build_env::STATIC_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1595 { "TERM_LIBS", octave::build_env::TERM_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1596 { "UMFPACK_CPPFLAGS", octave::build_env::UMFPACK_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1597 { "UMFPACK_LDFLAGS", octave::build_env::UMFPACK_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1598 { "UMFPACK_LIBS", octave::build_env::UMFPACK_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1599 { "WARN_CFLAGS", octave::build_env::WARN_CFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1600 { "WARN_CXXFLAGS", octave::build_env::WARN_CXXFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1601 { "X11_INCFLAGS", octave::build_env::X11_INCFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1602 { "X11_LIBS", octave::build_env::X11_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1603 { "XTRA_CFLAGS", octave::build_env::XTRA_CFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1604 { "XTRA_CXXFLAGS", octave::build_env::XTRA_CXXFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1605 { "YACC", octave::build_env::YACC }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1606 { "YFLAGS", octave::build_env::YFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1607 { "Z_CPPFLAGS", octave::build_env::Z_CPPFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1608 { "Z_LDFLAGS", octave::build_env::Z_LDFLAGS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1609 { "Z_LIBS", octave::build_env::Z_LIBS }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1610 { "config_opts", octave::build_env::config_opts }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1611 { 0, 0 }, |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1612 }; |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1613 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1614 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1615 static octave_scalar_map config; |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1616 static octave_scalar_map build_env; |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1617 static octave_scalar_map build_features = octave::build_env::features (); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1618 |
4357 | 1619 if (! initialized) |
1620 { | |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1621 int i; |
4357 | 1622 |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1623 i = 0; |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1624 while (true) |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1625 { |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1626 const build_info_struct& elt = build_info[i++]; |
4697 | 1627 |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1628 const char *key = elt.key; |
4697 | 1629 |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1630 if (key) |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1631 build_env.assign (key, elt.val); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1632 else |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1633 break; |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1634 } |
4697 | 1635 |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1636 i = 0; |
4440 | 1637 while (true) |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1638 { |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1639 const conf_info_struct& elt = conf_info[i++]; |
6274 | 1640 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1641 const char *key = elt.key; |
4357 | 1642 |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1643 if (key) |
21253
a66a737913b5
allow __have_feature__ to check for ENABLE_ options
John W. Eaton <jwe@octave.org>
parents:
21229
diff
changeset
|
1644 config.assign (key, elt.val); |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1645 else |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1646 break; |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10212
diff
changeset
|
1647 } |
4357 | 1648 |
4691 | 1649 bool unix_system = true; |
7013 | 1650 bool mac_system = false; |
4691 | 1651 bool windows_system = false; |
1652 | |
1653 #if defined (WIN32) | |
1654 windows_system = true; | |
20791
f7084eae3318
maint: Use Octave coding conventions for #if statements.
Rik <rik@octave.org>
parents:
20785
diff
changeset
|
1655 #if ! defined (__CYGWIN__) |
4691 | 1656 unix_system = false; |
1657 #endif | |
1658 #endif | |
1659 | |
8574
83b8c739d626
toplev.cc: check OCTAVE_USE_OS_X_API instead of __APPLE__ && __MACH__
John W. Eaton <jwe@octave.org>
parents:
8377
diff
changeset
|
1660 #if defined (OCTAVE_USE_OS_X_API) |
7010 | 1661 mac_system = true; |
1662 #endif | |
1663 | |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1664 config.assign ("unix", octave_value (unix_system)); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1665 config.assign ("mac", octave_value (mac_system)); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1666 config.assign ("windows", octave_value (windows_system)); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1667 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1668 config.assign ("dld", octave_value (octave_supports_dynamic_linking)); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1669 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1670 oct_mach_info::float_format ff = oct_mach_info::native_float_format (); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1671 config.assign ("float_format", |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1672 octave_value (oct_mach_info::float_format_as_string (ff))); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1673 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1674 config.assign ("words_big_endian", |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1675 octave_value (oct_mach_info::words_big_endian ())); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1676 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1677 config.assign ("words_little_endian", |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1678 octave_value (oct_mach_info::words_little_endian ())); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1679 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1680 config.assign ("build_environment", octave_value (build_env)); |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1681 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1682 config.assign ("build_features", octave_value (build_features)); |
4691 | 1683 |
4357 | 1684 initialized = true; |
1685 } | |
2162 | 1686 |
2689 | 1687 int nargin = args.length (); |
1688 | |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1689 if (nargin > 1) |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1690 print_usage (); |
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1691 |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1692 octave_value_list retval; |
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1693 |
2689 | 1694 if (nargin == 1) |
1695 { | |
21434
1da428cbf401
deprecate octave_config_info
John W. Eaton <jwe@octave.org>
parents:
21421
diff
changeset
|
1696 std::string arg = args(0).xstring_value ("__octave_config_info__: OPTION argument must be a string"); |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1697 |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1698 octave_value info = find_config_info (config, arg); |
2689 | 1699 |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1700 if (info.is_undefined ()) |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1701 info = find_config_info (build_env, arg); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1702 |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1703 if (info.is_undefined ()) |
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1704 info = find_config_info (build_features, arg); |
5199 | 1705 |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1706 if (info.is_undefined ()) |
21434
1da428cbf401
deprecate octave_config_info
John W. Eaton <jwe@octave.org>
parents:
21421
diff
changeset
|
1707 error ("__octave_config_info__: no info for '%s'", arg.c_str ()); |
20939
b17fda023ca6
maint: Use new C++ archetype in more files.
Rik <rik@octave.org>
parents:
20923
diff
changeset
|
1708 |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1709 return info; |
2689 | 1710 } |
20799
c349d4c91ce2
eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents:
20791
diff
changeset
|
1711 else |
21226
a55b8ece1ecd
reorganize octave_config_info again
John W. Eaton <jwe@octave.org>
parents:
21220
diff
changeset
|
1712 retval = ovl (config); |
2689 | 1713 |
1714 return retval; | |
2162 | 1715 } |
1716 | |
12846
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1717 /* |
21434
1da428cbf401
deprecate octave_config_info
John W. Eaton <jwe@octave.org>
parents:
21421
diff
changeset
|
1718 %!assert (ischar (__octave_config_info__ ("version"))) |
12846
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1719 %!test |
21434
1da428cbf401
deprecate octave_config_info
John W. Eaton <jwe@octave.org>
parents:
21421
diff
changeset
|
1720 %! x = __octave_config_info__ (); |
12846
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1721 %! assert (isstruct (x)); |
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1722 %! assert (! isempty (x)); |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14156
diff
changeset
|
1723 |
21603
37cbdf7bffa9
Add fftwf_version (bug #45659)
mmuetzel <markus.muetzel@gmx.de>
parents:
21600
diff
changeset
|
1724 %!assert (__octave_config_info__ ("fftw_version"), __octave_config_info__ ("fftwf_version")) |
37cbdf7bffa9
Add fftwf_version (bug #45659)
mmuetzel <markus.muetzel@gmx.de>
parents:
21600
diff
changeset
|
1725 |
21434
1da428cbf401
deprecate octave_config_info
John W. Eaton <jwe@octave.org>
parents:
21421
diff
changeset
|
1726 %!error __octave_config_info__ (1, 2) |
12846
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1727 */ |
9ce9e1e2d2c8
codesprint: new tests for toplev.cc
John W. Eaton <jwe@octave.org>
parents:
12483
diff
changeset
|
1728 |
1683 | 1729 #if defined (__GNUG__) && defined (DEBUG_NEW_DELETE) |
2806 | 1730 |
1683 | 1731 int debug_new_delete = 0; |
1732 | |
1733 typedef void (*vfp)(void); | |
1734 extern vfp __new_handler; | |
1735 | |
1736 void * | |
1737 __builtin_new (size_t sz) | |
1738 { | |
1739 void *p; | |
1740 | |
20946 | 1741 // malloc (0) is unpredictable; avoid it. |
1683 | 1742 if (sz == 0) |
1743 sz = 1; | |
15451
219479b461b8
build: Add missing tests and gnulib modules suggested by autoscan.
Rik <rik@octave.org>
parents:
15424
diff
changeset
|
1744 p = gnulib::malloc (sz); |
1683 | 1745 while (p == 0) |
1746 { | |
1747 (*__new_handler) (); | |
15451
219479b461b8
build: Add missing tests and gnulib modules suggested by autoscan.
Rik <rik@octave.org>
parents:
15424
diff
changeset
|
1748 p = gnulib::malloc (sz); |
1683 | 1749 } |
1750 | |
1751 if (debug_new_delete) | |
5629 | 1752 std::cerr << "__builtin_new: " << p << std::endl; |
1683 | 1753 |
1754 return p; | |
1755 } | |
1756 | |
1757 void | |
1758 __builtin_delete (void *ptr) | |
1759 { | |
1760 if (debug_new_delete) | |
5629 | 1761 std::cerr << "__builtin_delete: " << ptr << std::endl; |
1683 | 1762 |
1763 if (ptr) | |
1764 free (ptr); | |
1765 } | |
2806 | 1766 |
1683 | 1767 #endif |