Mercurial > octave
annotate libinterp/corefcn/interpreter.cc @ 28347:00a9a49c7670 stable
improve interpreter shutdown process (bug #56952)
This change is a further attempt to avoid segfaults when shutting down
the interpreter and exiting the GUI event loop. The latest approach
is to have the interpreter signal that it is finished with "normal"
command execution (REPL, command line script, or --eval option code),
then let the GUI thread process any remaining functions in its event
loop(s) then signal back to the interpreter that it is OK to shutdown.
Once the shutdown has happened (which may involve further calls to the
GUI thread while executing atexit functions or finish.m or other
shutdown code, the interpreter signals back to the GUI that shutdown
is complete. At that point, the GUI can delete the interpreter object
and exit.
* ObjectProxy.h, ObjectProxy.cc (ObjectProxy::sendFinalize): New signal.
(ObjectProxy::ObjectProxy): Connect/disconnect sendFinalize signal.
(ObjectProxy::update, ObjectProxy::finalize): Use normal signal/slot
connection.
* interpreter-qobject.h, interpreter-qobject.cc
(interpreter_qobject::ready): Rename from octave_ready_signal. Change
all uses.
(interpreter_qobject::execution_finished): Rename from
octave_finished_singal. Change all uses.
(interpreter_qobject::shutdown_finished): New signal.
(interpreter_qobject::shutdown): New slot.
(interpreter_qobject::execute): After interpreter finishes with normal
execution, simply signal that execution has finished. Don't attempt
to disable connecton to GUI or cleanup/delete interpreter.
* octave-qobject.h, octave-qobject.cc
(base_qobject::handle_interpreter_execution_finished): Rename from
handle_octave_finished): Simply emit a signal requesting an orderly
shutdown of the interpreter. Change all uses.
(base_qobject::handle_interpreter_shutdown_finished): New slot.
(base_qobject::request_interpreter_shutdown): New signal.
(base_qobject::base_qobject): Connect request_interpreter_shutdown to
interpreter_qobject::shutdown slot.
* interpreter.h, interpreter.cc (interpreter::shutdown): Rename from
cleanup and make public.
(interpreter::~interpreter): Don't call cleanup here.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 22 May 2020 12:54:13 -0400 |
parents | ce7a5b60e102 |
children | 548556e78bdf 7a8c69c4eb55 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 //////////////////////////////////////////////////////////////////////// |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
3 // Copyright (C) 1993-2020 The Octave Project Developers |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
4 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 // See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 // distribution or <https://octave.org/copyright/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
7 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
8 // This file is part of Octave. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
9 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
10 // Octave is free software: you can redistribute it and/or modify it |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
11 // under the terms of the GNU General Public License as published by |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
12 // the Free Software Foundation, either version 3 of the License, or |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
13 // (at your option) any later version. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
14 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
15 // Octave is distributed in the hope that it will be useful, but |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
16 // WITHOUT ANY WARRANTY; without even the implied warranty of |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
18 // GNU General Public License for more details. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
19 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
20 // You should have received a copy of the GNU General Public License |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
21 // along with Octave; see the file COPYING. If not, see |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
22 // <https://www.gnu.org/licenses/>. |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 // |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 //////////////////////////////////////////////////////////////////////// |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
25 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
27 # include "config.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
28 #endif |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
29 |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
30 #include <cstdio> |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
31 |
27542
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
32 #include <set> |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
33 #include <string> |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
34 #include <iostream> |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
35 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
36 #include "cmd-edit.h" |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
37 #include "cmd-hist.h" |
27408
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
38 #include "file-ops.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
39 #include "file-stat.h" |
27832
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
40 #include "file-ops.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
41 #include "fpucw-wrappers.h" |
22322
93b3cdd36854
move most f77 function decls to separate header files
John W. Eaton <jwe@octave.org>
parents:
22196
diff
changeset
|
42 #include "lo-blas-proto.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
43 #include "lo-error.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
44 #include "oct-env.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
45 #include "str-vec.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
46 #include "signal-wrappers.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
47 #include "unistd-wrappers.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
48 |
23711
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
49 #include "builtin-defun-decls.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
50 #include "defaults.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
51 #include "Cell.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
52 #include "defun.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
53 #include "display.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
54 #include "error.h" |
27263
99aa1bcb8848
rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27262
diff
changeset
|
55 #include "event-manager.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
56 #include "file-io.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
57 #include "graphics.h" |
23721
b2d55b52ee51
new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents:
23719
diff
changeset
|
58 #include "help.h" |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25404
diff
changeset
|
59 #include "input.h" |
23438
d24d01273bd0
eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
23435
diff
changeset
|
60 #include "interpreter-private.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
61 #include "interpreter.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
62 #include "load-path.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
63 #include "load-save.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
64 #include "octave.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
65 #include "oct-hist.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
66 #include "oct-map.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
67 #include "oct-mutex.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
68 #include "ovl.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
69 #include "ov.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
70 #include "ov-classdef.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
71 #include "parse.h" |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
72 #include "pt-classdef.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
73 #include "pt-eval.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
74 #include "pt-jump.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
75 #include "pt-stmt.h" |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25440
diff
changeset
|
76 #include "settings.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
77 #include "sighandlers.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
78 #include "sysdep.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
79 #include "unwind-prot.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
80 #include "utils.h" |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
81 #include "variables.h" |
23466
5da300c55e89
use "" instead of <> for including defaults.h and version.h
John W. Eaton <jwe@octave.org>
parents:
23460
diff
changeset
|
82 #include "version.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
83 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
84 // TRUE means the quit() call is allowed. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
85 bool quit_allowed = true; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
86 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
87 // TRUE means we are ready to interpret commands, but not everything |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
88 // is ready for interactive use. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
89 bool octave_interpreter_ready = false; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
90 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
91 // TRUE means we've processed all the init code and we are good to go. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
92 bool octave_initialized = false; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
93 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
94 DEFUN (__version_info__, args, , |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
95 doc: /* -*- texinfo -*- |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
96 @deftypefn {} {retval =} __version_info__ (@var{name}, @var{version}, @var{release}, @var{date}) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
97 Undocumented internal function. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
98 @end deftypefn */) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
99 { |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
100 static octave_map vinfo; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
101 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
102 int nargin = args.length (); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
103 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
104 if (nargin != 0 && nargin != 4) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
105 print_usage (); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
106 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
107 octave_value retval; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
108 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
109 if (nargin == 0) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
110 retval = vinfo; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
111 else if (nargin == 4) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
112 { |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
113 if (vinfo.nfields () == 0) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
114 { |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
115 vinfo.assign ("Name", args(0)); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
116 vinfo.assign ("Version", args(1)); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
117 vinfo.assign ("Release", args(2)); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
118 vinfo.assign ("Date", args(3)); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
119 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
120 else |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
121 { |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
122 octave_idx_type n = vinfo.numel () + 1; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
123 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
124 vinfo.resize (dim_vector (n, 1)); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
125 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
126 octave_value idx (n); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
127 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
128 vinfo.assign (idx, "Name", Cell (octave_value (args(0)))); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
129 vinfo.assign (idx, "Version", Cell (octave_value (args(1)))); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
130 vinfo.assign (idx, "Release", Cell (octave_value (args(2)))); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
131 vinfo.assign (idx, "Date", Cell (octave_value (args(3)))); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
132 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
133 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
134 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
135 return retval; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
136 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
137 |
27261
dccdc3b001a2
eliminate static functions from octave_link class
John W. Eaton <jwe@octave.org>
parents:
27214
diff
changeset
|
138 DEFMETHOD (quit, interp, args, , |
dccdc3b001a2
eliminate static functions from octave_link class
John W. Eaton <jwe@octave.org>
parents:
27214
diff
changeset
|
139 doc: /* -*- texinfo -*- |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
140 @deftypefn {} {} quit |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
141 @deftypefnx {} {} quit cancel |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
142 @deftypefnx {} {} quit force |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
143 @deftypefnx {} {} quit ("cancel") |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
144 @deftypefnx {} {} quit ("force") |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
145 @deftypefnx {} {} quit (@var{status}) |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
146 @deftypefnx {} {} quit (@var{status}, "force") |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
147 Quit the current Octave session. |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
148 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
149 The @code{exit} function is an alias for @code{quit}. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
150 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
151 If the optional integer value @var{status} is supplied, pass that value to |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
152 the operating system as Octave's exit status. The default value is zero. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
153 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
154 When exiting, Octave will attempt to run the m-file @file{finish.m} if it |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
155 exists. User commands to save the workspace or clean up temporary files |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
156 may be placed in that file. Alternatively, another m-file may be scheduled |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
157 to run using @code{atexit}. If an error occurs while executing the |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
158 @file{finish.m} file, Octave does not exit and control is returned to |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
159 the command prompt. |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
160 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
161 If the optional argument @qcode{"cancel"} is provided, Octave does not |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
162 exit and control is returned to the command prompt. This feature allows |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
163 the @code{finish.m} file to cancel the quit process. |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
164 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
165 If the user preference to request confirmation before exiting, Octave |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
166 will display a dialog and give the user an option to cancel the exit |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
167 process. |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
168 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
169 If the optional argument @qcode{"force"} is provided, no confirmation is |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
170 requested, and the execution of the @file{finish.m} file is skipped. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
171 @seealso{atexit} |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
172 @end deftypefn */) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
173 { |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
174 int numel = args.length (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
175 |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
176 if (numel > 2) |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
177 print_usage (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
178 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
179 int exit_status = 0; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
180 |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
181 bool force = false; |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
182 bool cancel = false; |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
183 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
184 if (numel == 2) |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
185 { |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
186 exit_status = args(0).xnint_value ("quit: STATUS must be an integer"); |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
187 std::string frc |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
188 = args(1).xstring_value ("quit: second argument must be a string"); |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
189 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
190 if (frc == "force") |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
191 force = true; |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
192 else |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
193 error (R"(quit: second argument must be string "force")"); |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
194 } |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
195 else if (numel == 1) |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
196 { |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
197 if (args(0).is_string ()) |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
198 { |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
199 const char *msg |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
200 = R"(quit: option must be string "cancel" or "force")"; |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
201 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
202 std::string opt = args(0).xstring_value (msg); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
203 |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
204 if (opt == "cancel") |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
205 cancel = true; |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
206 else if (opt == "force") |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
207 force = true; |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
208 else |
27593
a2db1e36e9b2
Silence compiler warning about use of error() without format string.
Rik <rik@octave.org>
parents:
27592
diff
changeset
|
209 error ("%s", msg); |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
210 } |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
211 else |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
212 exit_status = args(0).xnint_value ("quit: STATUS must be an integer"); |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
213 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
214 |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
215 if (cancel) |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
216 { |
27591
b54d6ac62fbf
make "quit cancel" a no-op outside of finish script
John W. Eaton <jwe@octave.org>
parents:
27588
diff
changeset
|
217 // No effect if "quit cancel" appears outside of finish script. |
b54d6ac62fbf
make "quit cancel" a no-op outside of finish script
John W. Eaton <jwe@octave.org>
parents:
27588
diff
changeset
|
218 |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
219 if (interp.executing_finish_script ()) |
27591
b54d6ac62fbf
make "quit cancel" a no-op outside of finish script
John W. Eaton <jwe@octave.org>
parents:
27588
diff
changeset
|
220 interp.cancel_quit (true); |
b54d6ac62fbf
make "quit cancel" a no-op outside of finish script
John W. Eaton <jwe@octave.org>
parents:
27588
diff
changeset
|
221 |
b54d6ac62fbf
make "quit cancel" a no-op outside of finish script
John W. Eaton <jwe@octave.org>
parents:
27588
diff
changeset
|
222 return ovl (); |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
223 } |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
224 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
225 interp.quit (exit_status, force); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
226 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
227 return ovl (); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
228 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
229 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
230 DEFALIAS (exit, quit); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
231 |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
232 DEFMETHOD (atexit, interp, args, nargout, |
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
233 doc: /* -*- texinfo -*- |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
234 @deftypefn {} {} atexit (@var{fcn}) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
235 @deftypefnx {} {} atexit (@var{fcn}, @var{flag}) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
236 Register a function to be called when Octave exits. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
237 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
238 For example, |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
239 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
240 @example |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
241 @group |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
242 function last_words () |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
243 disp ("Bye bye"); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
244 endfunction |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
245 atexit ("last_words"); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
246 @end group |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
247 @end example |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
248 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
249 @noindent |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
250 will print the message @qcode{"Bye bye"} when Octave exits. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
251 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
252 The additional argument @var{flag} will register or unregister @var{fcn} |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
253 from the list of functions to be called when Octave exits. If @var{flag} is |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
254 true, the function is registered, and if @var{flag} is false, it is |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
255 unregistered. For example, after registering the function @code{last_words} |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
256 above, |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
257 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
258 @example |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
259 atexit ("last_words", false); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
260 @end example |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
261 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
262 @noindent |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
263 will remove the function from the list and Octave will not call |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
264 @code{last_words} when it exits. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
265 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
266 Note that @code{atexit} only removes the first occurrence of a function |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
267 from the list, so if a function was placed in the list multiple times with |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
268 @code{atexit}, it must also be removed from the list multiple times. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
269 @seealso{quit} |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
270 @end deftypefn */) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
271 { |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
272 int nargin = args.length (); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
273 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
274 if (nargin < 1 || nargin > 2) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
275 print_usage (); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
276 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
277 std::string arg = args(0).xstring_value ("atexit: FCN argument must be a string"); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
278 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
279 bool add_mode = (nargin == 2) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
280 ? args(1).xbool_value ("atexit: FLAG argument must be a logical value") |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
281 : true; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
282 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
283 octave_value_list retval; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
284 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
285 if (add_mode) |
27689
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
286 interp.add_atexit_fcn (arg); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
287 else |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
288 { |
27689
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
289 bool found = interp.remove_atexit_fcn (arg); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
290 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
291 if (nargout > 0) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
292 retval = ovl (found); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
293 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
294 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
295 return retval; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
296 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
297 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
298 namespace octave |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
299 { |
27542
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
300 temporary_file_list::~temporary_file_list (void) |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
301 { |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
302 cleanup (); |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
303 } |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
304 |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
305 void temporary_file_list::insert (const std::string& file) |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
306 { |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
307 m_files.insert (file); |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
308 } |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
309 |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
310 void temporary_file_list::cleanup (void) |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
311 { |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
312 while (! m_files.empty ()) |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
313 { |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
314 auto it = m_files.begin (); |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
315 |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
316 octave_unlink_wrapper (it->c_str ()); |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
317 |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
318 m_files.erase (it); |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
319 } |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
320 } |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
321 |
27408
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
322 // The time we last time we changed directories. |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
323 sys::time Vlast_chdir_time = 0.0; |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
324 |
25487
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
325 // Execute commands from a file and catch potential exceptions in a consistent |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
326 // way. This function should be called anywhere we might parse and execute |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
327 // commands from a file before we have entered the main loop in |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
328 // toplev.cc. |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
329 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
330 static int safe_source_file (const std::string& file_name, |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
331 const std::string& context = "", |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
332 bool verbose = false, |
27507
2d537a089e5d
eliminate warn_for argument for source_file and parse_fcn_file functions
John W. Eaton <jwe@octave.org>
parents:
27506
diff
changeset
|
333 bool require_file = true) |
25487
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
334 { |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
335 interpreter& interp = __get_interpreter__ ("safe_source_file"); |
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
336 |
25487
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
337 try |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
338 { |
27507
2d537a089e5d
eliminate warn_for argument for source_file and parse_fcn_file functions
John W. Eaton <jwe@octave.org>
parents:
27506
diff
changeset
|
339 source_file (file_name, context, verbose, require_file); |
25487
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
340 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
341 catch (const interrupt_exception&) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
342 { |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
343 interp.recover_from_exception (); |
25487
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
344 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
345 return 1; |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
346 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
347 catch (const execution_exception& e) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
348 { |
27471 | 349 interp.handle_exception (e); |
25487
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
350 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
351 return 1; |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
352 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
353 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
354 return 0; |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
355 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
356 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
357 static void initialize_version_info (void) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
358 { |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
359 octave_value_list args; |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
360 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
361 args(3) = OCTAVE_RELEASE_DATE; |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
362 args(2) = config::release (); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
363 args(1) = OCTAVE_VERSION; |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
364 args(0) = "GNU Octave"; |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
365 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
366 F__version_info__ (args, 0); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
367 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
368 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
369 static void xerbla_abort (void) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
370 { |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
371 error ("Fortran procedure terminated by call to XERBLA"); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
372 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
373 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
374 static void initialize_xerbla_error_handler (void) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
375 { |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
376 // The idea here is to force xerbla to be referenced so that we will |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
377 // link to our own version instead of the one provided by the BLAS |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
378 // library. But numeric_limits<double>::NaN () should never be -1, so |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
379 // we should never actually call xerbla. FIXME (again!): If this |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
380 // becomes a constant expression the test might be optimized away and |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
381 // then the reference to the function might also disappear. |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
382 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
383 if (numeric_limits<double>::NaN () == -1) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
384 F77_FUNC (xerbla, XERBLA) ("octave", 13 F77_CHAR_ARG_LEN (6)); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
385 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
386 typedef void (*xerbla_handler_ptr) (void); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
387 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
388 typedef void (*octave_set_xerbla_handler_ptr) (xerbla_handler_ptr); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
389 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
390 dynamic_library libs (""); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
391 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
392 if (libs) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
393 { |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
394 octave_set_xerbla_handler_ptr octave_set_xerbla_handler |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
395 = reinterpret_cast<octave_set_xerbla_handler_ptr> |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
396 (libs.search ("octave_set_xerbla_handler")); |
25487
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
397 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
398 if (octave_set_xerbla_handler) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
399 octave_set_xerbla_handler (xerbla_abort); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
400 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
401 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
402 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
403 OCTAVE_NORETURN static void |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
404 lo_error_handler (const char *fmt, ...) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
405 { |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
406 va_list args; |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
407 va_start (args, fmt); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
408 verror_with_cfn (fmt, args); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
409 va_end (args); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
410 |
27480
63b417917f5e
remove some obsolete signal handling functions
John W. Eaton <jwe@octave.org>
parents:
27474
diff
changeset
|
411 throw execution_exception (); |
25487
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
412 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
413 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
414 OCTAVE_NORETURN static void |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
415 lo_error_with_id_handler (const char *id, const char *fmt, ...) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
416 { |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
417 va_list args; |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
418 va_start (args, fmt); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
419 verror_with_id_cfn (id, fmt, args); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
420 va_end (args); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
421 |
27480
63b417917f5e
remove some obsolete signal handling functions
John W. Eaton <jwe@octave.org>
parents:
27474
diff
changeset
|
422 throw execution_exception (); |
25487
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
423 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
424 |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
425 static void initialize_error_handlers (void) |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
426 { |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
427 set_liboctave_error_handler (lo_error_handler); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
428 set_liboctave_error_with_id_handler (lo_error_with_id_handler); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
429 set_liboctave_warning_handler (warning); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
430 set_liboctave_warning_with_id_handler (warning_with_id); |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
431 } |
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
432 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
433 // Create an interpreter object and perform initialization up to the |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
434 // point of setting reading command history and setting the load |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
435 // path. |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22186
diff
changeset
|
436 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
437 interpreter::interpreter (application *app_context) |
23627
0a6e87804cab
don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
438 : m_app_context (app_context), |
27542
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
439 m_tmp_files (), |
27689
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
440 m_atexit_fcns (), |
27266
596312d4f25d
don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
441 m_display_info (), |
23719
69a111259a2c
eliminate some global variables
John W. Eaton <jwe@octave.org>
parents:
23717
diff
changeset
|
442 m_environment (), |
25443
2fa7cd178c4a
new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents:
25440
diff
changeset
|
443 m_settings (), |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
444 m_error_system (*this), |
23721
b2d55b52ee51
new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents:
23719
diff
changeset
|
445 m_help_system (*this), |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25404
diff
changeset
|
446 m_input_system (*this), |
25435
a52e6fb674b1
eliminate some singletons and static & global variables
John W. Eaton <jwe@octave.org>
parents:
25407
diff
changeset
|
447 m_output_system (*this), |
25994
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25993
diff
changeset
|
448 m_history_system (*this), |
23627
0a6e87804cab
don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
449 m_dynamic_loader (*this), |
27394
489c74ac36da
store reference to interpreter in load_path object
John W. Eaton <jwe@octave.org>
parents:
27335
diff
changeset
|
450 m_load_path (*this), |
25993
f75bb9d659e0
eliminate global and file-scope static variables from load-save.cc (bug #54571)
John W. Eaton <jwe@octave.org>
parents:
25488
diff
changeset
|
451 m_load_save_system (*this), |
24540
46440078d73b
don't use singleton for octave_value_typeinfo
John W. Eaton <jwe@octave.org>
parents:
24538
diff
changeset
|
452 m_type_info (), |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
453 m_symbol_table (*this), |
23630
8a47d4735655
avoid memory leak in interpreter
John W. Eaton <jwe@octave.org>
parents:
23627
diff
changeset
|
454 m_evaluator (*this), |
23738
8acd390d16c9
don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
455 m_stream_list (*this), |
24734
5d8c4cbc56d7
don't use singleton pattern for child_list
John W. Eaton <jwe@octave.org>
parents:
24727
diff
changeset
|
456 m_child_list (), |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23738
diff
changeset
|
457 m_url_handle_manager (), |
23651
5c6cceef132b
don't use singleton for cdef_manager object
John W. Eaton <jwe@octave.org>
parents:
23630
diff
changeset
|
458 m_cdef_manager (*this), |
23774
41795b504a8b
don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents:
23753
diff
changeset
|
459 m_gtk_manager (), |
27302
5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
John W. Eaton <jwe@octave.org>
parents:
27301
diff
changeset
|
460 m_event_manager (*this), |
27321
eddce82a57cc
don't use singleton pattern for gh_manager object
John W. Eaton <jwe@octave.org>
parents:
27309
diff
changeset
|
461 m_gh_manager (nullptr), |
23627
0a6e87804cab
don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
462 m_interactive (false), |
0a6e87804cab
don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
463 m_read_site_files (true), |
23795
980f39c3ab90
Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents:
23775
diff
changeset
|
464 m_read_init_files (m_app_context != nullptr), |
23627
0a6e87804cab
don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
465 m_verbose (false), |
0a6e87804cab
don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
466 m_inhibit_startup_message (false), |
0a6e87804cab
don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
467 m_load_path_initialized (false), |
0a6e87804cab
don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
468 m_history_initialized (false), |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
469 m_in_top_level_repl (false), |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
470 m_cancel_quit (false), |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
471 m_executing_finish_script (false), |
27690
c81139d8dcc3
prevent atexit functions from adding new atexit functions
John W. Eaton <jwe@octave.org>
parents:
27689
diff
changeset
|
472 m_executing_atexit (false), |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23552
diff
changeset
|
473 m_initialized (false) |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
474 { |
24538
2b273df71aa0
allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
475 // FIXME: When thread_local storage is used by default, this message |
2b273df71aa0
allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
476 // should change to say something like |
2b273df71aa0
allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
477 // |
2b273df71aa0
allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
478 // only one Octave interpreter may be active in any given thread |
2b273df71aa0
allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
479 |
23511
232c8d69d934
manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
480 if (instance) |
232c8d69d934
manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
481 throw std::runtime_error |
24538
2b273df71aa0
allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
482 ("only one Octave interpreter may be active"); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22186
diff
changeset
|
483 |
23511
232c8d69d934
manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
484 instance = this; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
485 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
486 // Matlab uses "C" locale for LC_NUMERIC class regardless of local setting |
27309
463fc0cfed90
initialize locale from values in the environment on interpreter start
Mike Miller <mtmiller@octave.org>
parents:
27302
diff
changeset
|
487 setlocale (LC_ALL, ""); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
488 setlocale (LC_NUMERIC, "C"); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
489 setlocale (LC_TIME, "C"); |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
490 sys::env::putenv ("LC_NUMERIC", "C"); |
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
491 sys::env::putenv ("LC_TIME", "C"); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
492 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
493 // Initialize the default floating point unit control state. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
494 octave_set_default_fpucw (); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
495 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
496 thread::init (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
497 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
498 octave_ieee_init (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
499 |
25487
fbc270aeb55d
* interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
500 initialize_xerbla_error_handler (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
501 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
502 initialize_error_handlers (); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
503 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
504 if (m_app_context) |
26826
20881d195d20
fix handling of SIGTSTP (bug #51903)
John W. Eaton <jwe@octave.org>
parents:
26722
diff
changeset
|
505 { |
20881d195d20
fix handling of SIGTSTP (bug #51903)
John W. Eaton <jwe@octave.org>
parents:
26722
diff
changeset
|
506 install_signal_handlers (); |
20881d195d20
fix handling of SIGTSTP (bug #51903)
John W. Eaton <jwe@octave.org>
parents:
26722
diff
changeset
|
507 octave_unblock_signal_by_name ("SIGTSTP"); |
20881d195d20
fix handling of SIGTSTP (bug #51903)
John W. Eaton <jwe@octave.org>
parents:
26722
diff
changeset
|
508 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
509 else |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
510 quit_allowed = false; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
511 |
27266
596312d4f25d
don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
512 if (! m_app_context) |
596312d4f25d
don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
513 m_display_info.initialize (); |
596312d4f25d
don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
514 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
515 bool line_editing = false; |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
516 bool traditional = false; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
517 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
518 if (m_app_context) |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
519 { |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
520 // Embedded interpreters don't execute command line options. |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
521 const cmdline_options& options = m_app_context->options (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
522 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
523 // Make all command-line arguments available to startup files, |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
524 // including PKG_ADD files. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
525 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
526 string_vector args = options.all_args (); |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
527 |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
528 m_app_context->intern_argv (args); |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
529 intern_nargin (args.numel () - 1); |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
530 |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
531 bool is_octave_program = m_app_context->is_octave_program (); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
532 |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
533 std::list<std::string> command_line_path = options.command_line_path (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
534 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
535 for (const auto& pth : command_line_path) |
23438
d24d01273bd0
eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
23435
diff
changeset
|
536 m_load_path.set_command_line_path (pth); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
537 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
538 std::string exec_path = options.exec_path (); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
539 if (! exec_path.empty ()) |
23719
69a111259a2c
eliminate some global variables
John W. Eaton <jwe@octave.org>
parents:
23717
diff
changeset
|
540 m_environment.exec_path (exec_path); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
541 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
542 std::string image_path = options.image_path (); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
543 if (! image_path.empty ()) |
23719
69a111259a2c
eliminate some global variables
John W. Eaton <jwe@octave.org>
parents:
23717
diff
changeset
|
544 m_environment.image_path (image_path); |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
545 |
27266
596312d4f25d
don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
546 if (! options.no_window_system ()) |
596312d4f25d
don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents:
27263
diff
changeset
|
547 m_display_info.initialize (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
548 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
549 // Is input coming from a terminal? If so, we are probably |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
550 // interactive. |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
551 |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
552 // If stdin is not a tty, then we are reading commands from a |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
553 // pipe or a redirected file. |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
554 bool stdin_is_tty = octave_isatty_wrapper (fileno (stdin)); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
555 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
556 m_interactive = (! is_octave_program && stdin_is_tty |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
557 && octave_isatty_wrapper (fileno (stdout))); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
558 |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
559 // Check if the user forced an interactive session. |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
560 if (options.forced_interactive ()) |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
561 m_interactive = true; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
562 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
563 line_editing = options.line_editing (); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
564 if ((! m_interactive || options.forced_interactive ()) |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
565 && ! options.forced_line_editing ()) |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
566 line_editing = false; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
567 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
568 traditional = options.traditional (); |
23711
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
569 |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
570 // FIXME: if possible, perform the following actions directly |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
571 // instead of using the interpreter-level functions. |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
572 |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
573 if (options.echo_commands ()) |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
574 m_evaluator.echo |
25063
a211e39e59d9
restore '--echo-commands' option to same behavior as 'echo on all' (bug #53453)
Mike Miller <mtmiller@octave.org>
parents:
25054
diff
changeset
|
575 (tree_evaluator::ECHO_SCRIPTS | tree_evaluator::ECHO_FUNCTIONS |
a211e39e59d9
restore '--echo-commands' option to same behavior as 'echo on all' (bug #53453)
Mike Miller <mtmiller@octave.org>
parents:
25054
diff
changeset
|
576 | tree_evaluator::ECHO_ALL); |
23711
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
577 |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
578 std::string docstrings_file = options.docstrings_file (); |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
579 if (! docstrings_file.empty ()) |
23721
b2d55b52ee51
new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents:
23719
diff
changeset
|
580 Fbuilt_in_docstrings_file (*this, octave_value (docstrings_file)); |
23711
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
581 |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
582 std::string doc_cache_file = options.doc_cache_file (); |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
583 if (! doc_cache_file.empty ()) |
23721
b2d55b52ee51
new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents:
23719
diff
changeset
|
584 Fdoc_cache_file (*this, octave_value (doc_cache_file)); |
23711
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
585 |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
586 std::string info_file = options.info_file (); |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
587 if (! info_file.empty ()) |
23721
b2d55b52ee51
new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents:
23719
diff
changeset
|
588 Finfo_file (*this, octave_value (info_file)); |
23711
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
589 |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
590 std::string info_program = options.info_program (); |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
591 if (! info_program.empty ()) |
23721
b2d55b52ee51
new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents:
23719
diff
changeset
|
592 Finfo_program (*this, octave_value (info_program)); |
23711
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
593 |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
594 if (options.debug_jit ()) |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
595 Fdebug_jit (octave_value (true)); |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
596 |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
597 if (options.jit_compiler ()) |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
598 Fjit_enable (octave_value (true)); |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
599 |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
600 std::string texi_macros_file = options.texi_macros_file (); |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
601 if (! texi_macros_file.empty ()) |
23721
b2d55b52ee51
new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents:
23719
diff
changeset
|
602 Ftexi_macros_file (*this, octave_value (texi_macros_file)); |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
603 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
604 |
27322
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
605 // FIXME: we defer creation of the gh_manager object because it |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
606 // creates a root_figure object that requires the display_info |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
607 // object, but that is currently only accessible through the global |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
608 // interpreter object and that is not available until after the |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
609 // interpreter::instance pointer is set (above). It would be better |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
610 // if m_gh_manager could be an object value instead of a pointer and |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
611 // created as part of the interpreter initialization. To do that, |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
612 // we should either make the display_info object independent of the |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
613 // interpreter object (does it really need to cache any |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
614 // information?) or defer creation of the root_figure object until |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
615 // it is actually needed. |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
616 m_gh_manager = new gh_manager (*this); |
cb92168e48f6
defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents:
27321
diff
changeset
|
617 |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25404
diff
changeset
|
618 m_input_system.initialize (line_editing); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
619 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
620 // These can come after command line args since none of them set any |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
621 // defaults that might be changed by command line options. |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
622 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
623 initialize_version_info (); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
624 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
625 // This should be done before initializing the load path because |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
626 // some PKG_ADD files might need --traditional behavior. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
627 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
628 if (traditional) |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
629 maximum_braindamage (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
630 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
631 octave_interpreter_ready = true; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
632 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
633 |
24538
2b273df71aa0
allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents:
24534
diff
changeset
|
634 OCTAVE_THREAD_LOCAL interpreter *interpreter::instance = nullptr; |
23511
232c8d69d934
manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents:
23466
diff
changeset
|
635 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22186
diff
changeset
|
636 interpreter::~interpreter (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22186
diff
changeset
|
637 { |
27335
50216d7a2f6b
eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents:
27322
diff
changeset
|
638 delete m_gh_manager; |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
639 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22186
diff
changeset
|
640 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
641 void interpreter::intern_nargin (octave_idx_type nargs) |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
642 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
643 m_evaluator.set_auto_fcn_var (stack_frame::NARGIN, nargs); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22186
diff
changeset
|
644 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22186
diff
changeset
|
645 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
646 // Read the history file unless a command-line option inhibits that. |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
647 |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
648 void interpreter::initialize_history (bool read_history_file) |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
649 { |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
650 if (! m_history_initialized) |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
651 { |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
652 // Allow command-line option to override. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
653 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
654 if (m_app_context) |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
655 { |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
656 const cmdline_options& options = m_app_context->options (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
657 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
658 read_history_file = options.read_history_file (); |
23711
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
659 |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
660 if (! read_history_file) |
5a97aafb12a9
don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents:
23703
diff
changeset
|
661 command_history::ignore_entries (); |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
662 } |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
663 |
25994
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25993
diff
changeset
|
664 m_history_system.initialize (read_history_file); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
665 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
666 if (! m_app_context) |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
667 command_history::ignore_entries (); |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
668 |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
669 m_history_initialized = true; |
23092
0fed4c678795
additional restructuring of startup and shutdown
John W. Eaton <jwe@octave.org>
parents:
23087
diff
changeset
|
670 } |
0fed4c678795
additional restructuring of startup and shutdown
John W. Eaton <jwe@octave.org>
parents:
23087
diff
changeset
|
671 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
672 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
673 // Set the initial path to the system default unless command-line |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
674 // option says to leave it empty. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
675 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
676 void interpreter::initialize_load_path (bool set_initial_path) |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
677 { |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
678 if (! m_load_path_initialized) |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
679 { |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
680 // Allow command-line option to override. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
681 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
682 if (m_app_context) |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
683 { |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
684 const cmdline_options& options = m_app_context->options (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
685 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
686 set_initial_path = options.set_initial_path (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
687 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
688 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
689 // Temporarily set the execute_pkg_add function to one that |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
690 // catches exceptions. This is better than wrapping |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
691 // load_path::initialize in a try-catch block because it will |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
692 // not stop executing PKG_ADD files at the first exception. |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
693 // It's also better than changing the default execute_pkg_add |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
694 // function to use safe_source file because that will normally |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
695 // be evaluated from the normal interpreter loop where exceptions |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
696 // are already handled. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
697 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
698 unwind_protect frame; |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
699 |
23438
d24d01273bd0
eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
23435
diff
changeset
|
700 frame.add_method (m_load_path, &load_path::set_add_hook, |
d24d01273bd0
eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
23435
diff
changeset
|
701 m_load_path.get_add_hook ()); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
702 |
25345
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
703 m_load_path.set_add_hook ([this] (const std::string& dir) |
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
704 { this->execute_pkg_add (dir); }); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
705 |
23438
d24d01273bd0
eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents:
23435
diff
changeset
|
706 m_load_path.initialize (set_initial_path); |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
707 |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
708 m_load_path_initialized = true; |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
709 } |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
710 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
711 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
712 // This may be called separately from execute |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
713 |
23819
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
714 void interpreter::initialize (void) |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
715 { |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
716 if (m_initialized) |
23819
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
717 return; |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
718 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
719 display_startup_message (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
720 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
721 // Wait to read the history file until the interpreter reads input |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
722 // files and begins evaluating commands. |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
723 |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
724 initialize_history (); |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
725 |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
726 // Initializing the load path may execute PKG_ADD files, so can't be |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
727 // done until the interpreter is ready to execute commands. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
728 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
729 // Deferring it to the execute step also allows the path to be |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
730 // initialized between creating and execute the interpreter, for |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
731 // example, to set a custom path for an embedded interpreter. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
732 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
733 initialize_load_path (); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
734 |
27531
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
735 octave_save_signal_mask (); |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
736 |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
737 can_interrupt = true; |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
738 |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
739 octave_signal_hook = respond_to_pending_signals; |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
740 octave_interrupt_hook = nullptr; |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
741 |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
742 catch_interrupts (); |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
743 |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
744 // FIXME: could we eliminate this variable or make it not be global? |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
745 // Global used to communicate with signal handler. |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
746 octave_initialized = true; |
478150691336
consolidate initialization code
John W. Eaton <jwe@octave.org>
parents:
27530
diff
changeset
|
747 |
23819
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
748 m_initialized = true; |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
749 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
750 |
23819
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
751 // FIXME: this function is intended to be executed only once. Should |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
752 // we enforce that restriction? |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
753 |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
754 int interpreter::execute (void) |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
755 { |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
756 int exit_status = 0; |
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
757 |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
758 try |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
759 { |
23819
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
760 initialize (); |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
761 |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
762 execute_startup_files (); |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
763 |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
764 if (m_app_context) |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
765 { |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
766 const cmdline_options& options = m_app_context->options (); |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
767 |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
768 if (m_app_context->have_eval_option_code ()) |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
769 { |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
770 int status = execute_eval_option_code (); |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
771 |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
772 if (status ) |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
773 exit_status = status; |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
774 |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
775 if (! options.persist ()) |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
776 return exit_status; |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
777 } |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
778 |
23819
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
779 // If there is an extra argument, see if it names a file to |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
780 // read. Additional arguments are taken as command line options |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
781 // for the script. |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
782 |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
783 if (m_app_context->have_script_file ()) |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
784 { |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
785 int status = execute_command_line_file (); |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
786 |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
787 if (status) |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
788 exit_status = status; |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
789 |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
790 if (! options.persist ()) |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
791 return exit_status; |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
792 } |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
793 |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
794 if (options.forced_interactive ()) |
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
795 command_editor::blink_matching_paren (false); |
27693
de4bfeda8d9f
do not call main_loop in embedded interpreter (bug #57229)
Mike Miller <mtmiller@octave.org>
parents:
27690
diff
changeset
|
796 |
de4bfeda8d9f
do not call main_loop in embedded interpreter (bug #57229)
Mike Miller <mtmiller@octave.org>
parents:
27690
diff
changeset
|
797 exit_status = main_loop (); |
23819
5d8ef9b859f8
defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents:
23795
diff
changeset
|
798 } |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
799 } |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
800 catch (const exit_exception& ex) |
23117
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
801 { |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
802 return ex.exit_status (); |
17a3567a7b01
separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents:
23111
diff
changeset
|
803 } |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
804 |
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
805 return exit_status; |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
806 } |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
807 |
28347
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
808 // Call a function with exceptions handled to avoid problems with |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
809 // errors while shutting down. |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
810 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
811 #define OCTAVE_IGNORE_EXCEPTION(E) \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
812 catch (E) \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
813 { \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
814 recover_from_exception (); \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
815 \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
816 std::cerr << "error: ignoring " #E " while preparing to exit" \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
817 << std::endl; \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
818 } |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
819 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
820 #define OCTAVE_SAFE_CALL(F, ARGS) \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
821 do \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
822 { \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
823 try \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
824 { \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
825 unwind_protect frame; \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
826 \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
827 frame.add_method (m_error_system, \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
828 &error_system::set_debug_on_error, \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
829 m_error_system.debug_on_error ()); \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
830 frame.add_method (m_error_system, \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
831 &error_system::set_debug_on_warning, \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
832 m_error_system.debug_on_warning ()); \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
833 \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
834 m_error_system.debug_on_error (false); \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
835 m_error_system.debug_on_warning (false); \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
836 \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
837 F ARGS; \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
838 } \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
839 OCTAVE_IGNORE_EXCEPTION (const exit_exception&) \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
840 OCTAVE_IGNORE_EXCEPTION (const interrupt_exception&) \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
841 OCTAVE_IGNORE_EXCEPTION (const execution_exception&) \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
842 OCTAVE_IGNORE_EXCEPTION (const std::bad_alloc&) \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
843 } \ |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
844 while (0) |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
845 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
846 void interpreter::shutdown (void) |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
847 { |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
848 // If we are attached to a GUI, process pending events and |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
849 // disable the link. |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
850 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
851 m_event_manager.process_events (true); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
852 m_event_manager.disable (); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
853 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
854 OCTAVE_SAFE_CALL (m_input_system.clear_input_event_hooks, ()); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
855 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
856 // Any atexit functions added after this function call won't be |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
857 // executed. |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
858 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
859 execute_atexit_fcns (); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
860 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
861 // Do this explicitly so that destructors for mex file objects |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
862 // are called, so that functions registered with mexAtExit are |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
863 // called. |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
864 OCTAVE_SAFE_CALL (m_symbol_table.clear_mex_functions, ()); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
865 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
866 OCTAVE_SAFE_CALL (command_editor::restore_terminal_state, ()); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
867 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
868 OCTAVE_SAFE_CALL (m_history_system.write_timestamp, ()); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
869 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
870 if (! command_history::ignoring_entries ()) |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
871 OCTAVE_SAFE_CALL (command_history::clean_up_and_save, ()); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
872 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
873 OCTAVE_SAFE_CALL (m_gh_manager->close_all_figures, ()); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
874 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
875 m_gtk_manager.unload_all_toolkits (); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
876 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
877 // FIXME: May still need something like this to ensure that |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
878 // destructors for class objects will run properly. Should that be |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
879 // done earlier? Before or after atexit functions are executed? |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
880 m_symbol_table.cleanup (); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
881 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
882 OCTAVE_SAFE_CALL (sysdep_cleanup, ()); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
883 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
884 OCTAVE_SAFE_CALL (flush_stdout, ()); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
885 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
886 // Don't call singleton_cleanup_list::cleanup until we have the |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
887 // problems with registering/unregistering types worked out. For |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
888 // example, uncomment the following line, then use the make_int |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
889 // function from the examples directory to create an integer |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
890 // object and then exit Octave. Octave should crash with a |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
891 // segfault when cleaning up the typinfo singleton. We need some |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
892 // way to force new octave_value_X types that are created in |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
893 // .oct files to be unregistered when the .oct file shared library |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
894 // is unloaded. |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
895 // |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
896 // OCTAVE_SAFE_CALL (singleton_cleanup_list::cleanup, ()); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
897 } |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
898 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
899 void interpreter::execute_atexit_fcns (void) |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
900 { |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
901 // Prevent atexit functions from adding new functions to the list. |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
902 m_executing_atexit = true; |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
903 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
904 while (! m_atexit_fcns.empty ()) |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
905 { |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
906 std::string fcn = m_atexit_fcns.front (); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
907 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
908 m_atexit_fcns.pop_front (); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
909 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
910 OCTAVE_SAFE_CALL (feval, (fcn, octave_value_list (), 0)); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
911 |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
912 OCTAVE_SAFE_CALL (flush_stdout, ()); |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
913 } |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
914 } |
00a9a49c7670
improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents:
28266
diff
changeset
|
915 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
916 void interpreter::display_startup_message (void) const |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
917 { |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
918 bool inhibit_startup_message = false; |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
919 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
920 if (m_app_context) |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
921 { |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
922 const cmdline_options& options = m_app_context->options (); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
923 |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
924 inhibit_startup_message = options.inhibit_startup_message (); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
925 } |
23396
945b53af4655
maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
926 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
927 if (m_interactive && ! inhibit_startup_message) |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
928 std::cout << octave_startup_message () << "\n" << std::endl; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
929 } |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
930 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
931 // Initialize by reading startup files. Return non-zero if an exception |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
932 // occurs when reading any of them, but don't exit early because of an |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
933 // exception. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
934 |
26722
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
935 int interpreter::execute_startup_files (void) |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
936 { |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
937 bool read_site_files = m_read_site_files; |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
938 bool read_init_files = m_read_init_files; |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
939 bool verbose = m_verbose; |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
940 bool inhibit_startup_message = m_inhibit_startup_message; |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
941 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
942 if (m_app_context) |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
943 { |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
944 const cmdline_options& options = m_app_context->options (); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
945 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
946 read_site_files = options.read_site_files (); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
947 read_init_files = options.read_init_files (); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
948 verbose = options.verbose_flag (); |
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
949 inhibit_startup_message = options.inhibit_startup_message (); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
950 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
951 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
952 verbose = (verbose && ! inhibit_startup_message); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
953 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
954 bool require_file = false; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
955 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
956 std::string context; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
957 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
958 int exit_status = 0; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
959 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
960 if (read_site_files) |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
961 { |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
962 // Execute commands from the site-wide configuration file. |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
963 // First from the file $(prefix)/lib/octave/site/m/octaverc |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
964 // (if it exists), then from the file |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
965 // $(prefix)/share/octave/$(version)/m/octaverc (if it exists). |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
966 |
23717
06579337237b
move configuration variables inside octave::config namespace
John W. Eaton <jwe@octave.org>
parents:
23712
diff
changeset
|
967 int status = safe_source_file (config::local_site_defaults_file (), |
06579337237b
move configuration variables inside octave::config namespace
John W. Eaton <jwe@octave.org>
parents:
23712
diff
changeset
|
968 context, verbose, require_file); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
969 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
970 if (status) |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
971 exit_status = status; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
972 |
23717
06579337237b
move configuration variables inside octave::config namespace
John W. Eaton <jwe@octave.org>
parents:
23712
diff
changeset
|
973 status = safe_source_file (config::site_defaults_file (), |
06579337237b
move configuration variables inside octave::config namespace
John W. Eaton <jwe@octave.org>
parents:
23712
diff
changeset
|
974 context, verbose, require_file); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
975 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
976 if (status) |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
977 exit_status = status; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
978 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
979 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
980 if (read_init_files) |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
981 { |
26722
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
982 // Try to execute commands from the Matlab compatible startup.m file |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
983 // if it exists anywhere in the load path when starting Octave. |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
984 std::string ff_startup_m = file_in_path ("startup.m", ""); |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
985 |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
986 if (! ff_startup_m.empty ()) |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
987 { |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
988 int parse_status = 0; |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
989 |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
990 try |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
991 { |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
992 eval_string (std::string ("startup"), false, parse_status, 0); |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
993 } |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
994 catch (const interrupt_exception&) |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
995 { |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
996 recover_from_exception (); |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
997 } |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
998 catch (const execution_exception& e) |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
999 { |
27471 | 1000 handle_exception (e); |
26722
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
1001 } |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
1002 } |
f51e8a7c33f4
run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents:
26661
diff
changeset
|
1003 |
27832
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1004 // Try to execute commands from $CONFIG/octave/octaverc, where |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1005 // $CONFIG is the platform-dependent location for user local |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1006 // configuration files. |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1007 |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1008 std::string user_config_dir = sys::env::get_user_config_directory (); |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1009 |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1010 std::string cfg_dir = user_config_dir + sys::file_ops::dir_sep_str () |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1011 + "octave"; |
27832
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1012 |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1013 std::string cfg_rc = sys::env::make_absolute ("octaverc", cfg_dir); |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1014 |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1015 if (! cfg_rc.empty ()) |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1016 { |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1017 int status = safe_source_file (cfg_rc, context, verbose, |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1018 require_file); |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1019 |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1020 if (status) |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1021 exit_status = status; |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1022 } |
8fd7d1d2a4ca
Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents:
27693
diff
changeset
|
1023 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1024 // Try to execute commands from $HOME/$OCTAVE_INITFILE and |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1025 // $OCTAVE_INITFILE. If $OCTAVE_INITFILE is not set, |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1026 // .octaverc is assumed. |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1027 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1028 bool home_rc_already_executed = false; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1029 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
1030 std::string initfile = sys::env::getenv ("OCTAVE_INITFILE"); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1031 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1032 if (initfile.empty ()) |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1033 initfile = ".octaverc"; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1034 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
1035 std::string home_dir = sys::env::get_home_directory (); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1036 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
1037 std::string home_rc = sys::env::make_absolute (initfile, home_dir); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1038 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1039 std::string local_rc; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1040 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1041 if (! home_rc.empty ()) |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1042 { |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1043 int status = safe_source_file (home_rc, context, verbose, |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1044 require_file); |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1045 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1046 if (status) |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1047 exit_status = status; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1048 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1049 // Names alone are not enough. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1050 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
1051 sys::file_stat fs_home_rc (home_rc); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1052 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1053 if (fs_home_rc) |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1054 { |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1055 // We want to check for curr_dir after executing home_rc |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1056 // because doing that may change the working directory. |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1057 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
1058 local_rc = sys::env::make_absolute (initfile); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1059 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1060 home_rc_already_executed = same_file (home_rc, local_rc); |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1061 } |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1062 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1063 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1064 if (! home_rc_already_executed) |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1065 { |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1066 if (local_rc.empty ()) |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
1067 local_rc = sys::env::make_absolute (initfile); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1068 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1069 int status = safe_source_file (local_rc, context, verbose, |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1070 require_file); |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1071 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1072 if (status) |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1073 exit_status = status; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1074 } |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1075 } |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1076 |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
1077 if (m_interactive && verbose) |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1078 std::cout << std::endl; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1079 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1080 return exit_status; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1081 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1082 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1083 // Execute any code specified with --eval 'CODE' |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1084 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1085 int interpreter::execute_eval_option_code (void) |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1086 { |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1087 if (! m_app_context) |
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1088 return 0; |
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1089 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1090 const cmdline_options& options = m_app_context->options (); |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1091 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1092 std::string code_to_eval = options.code_to_eval (); |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1093 |
27532
2af853f94b97
use unwind_protect_var instead of unwind_protect object for a single var
John W. Eaton <jwe@octave.org>
parents:
27531
diff
changeset
|
1094 unwind_protect_var<bool> upv (m_interactive, false); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1095 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1096 int parse_status = 0; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1097 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1098 try |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1099 { |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1100 eval_string (code_to_eval, false, parse_status, 0); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1101 } |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
1102 catch (const interrupt_exception&) |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1103 { |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1104 recover_from_exception (); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1105 |
23087
9f406f0b36da
rework clean_up_and_exit (bug #50068)
John W. Eaton <jwe@octave.org>
parents:
23084
diff
changeset
|
1106 return 1; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1107 } |
27471 | 1108 catch (const execution_exception& e) |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1109 { |
27471 | 1110 handle_exception (e); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1111 |
23087
9f406f0b36da
rework clean_up_and_exit (bug #50068)
John W. Eaton <jwe@octave.org>
parents:
23084
diff
changeset
|
1112 return 1; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1113 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1114 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1115 return parse_status; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1116 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1117 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1118 int interpreter::execute_command_line_file (void) |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1119 { |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1120 if (! m_app_context) |
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1121 return 0; |
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1122 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1123 const cmdline_options& options = m_app_context->options (); |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1124 |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
1125 unwind_protect frame; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1126 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1127 frame.add_method (this, &interpreter::interactive, m_interactive); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1128 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
1129 string_vector args = options.all_args (); |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
1130 |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
1131 frame.add_method (m_app_context, &application::intern_argv, args); |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
1132 |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
1133 frame.add_method (this, &interpreter::intern_nargin, args.numel () - 1); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1134 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1135 frame.add_method (m_app_context, |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1136 &application::program_invocation_name, |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1137 application::program_invocation_name ()); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1138 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1139 frame.add_method (m_app_context, |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1140 &application::program_name, |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1141 application::program_name ()); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1142 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1143 m_interactive = false; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1144 |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1145 // If we are running an executable script (#! /bin/octave) then |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1146 // we should only see the args passed to the script. |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1147 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1148 string_vector script_args = options.remaining_args (); |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1149 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1150 m_app_context->intern_argv (script_args); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
1151 intern_nargin (script_args.numel () - 1); |
23102
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1152 |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1153 std::string fname = script_args[0]; |
373771419d51
refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents:
23100
diff
changeset
|
1154 |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1155 m_app_context->set_program_names (fname); |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1156 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1157 std::string context; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1158 bool verbose = false; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1159 bool require_file = true; |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1160 |
27507
2d537a089e5d
eliminate warn_for argument for source_file and parse_fcn_file functions
John W. Eaton <jwe@octave.org>
parents:
27506
diff
changeset
|
1161 return safe_source_file (fname, context, verbose, require_file); |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1162 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1163 |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1164 int interpreter::main_loop (void) |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1165 { |
28266
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1166 // The big loop. Read, Eval, Print, Loop. Normally user |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1167 // interaction at the command line in a terminal session, but we may |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1168 // also end up here when reading from a pipe or when stdin is |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1169 // connected to a file by the magic of input redirection. |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1170 |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1171 int exit_status = 0; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1172 |
28266
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1173 // FIXME: should this choice be a command-line option? Note that we |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1174 // intend that the push parser interface only be used for |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1175 // interactive sessions. |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1176 |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1177 #if defined (OCTAVE_ENABLE_COMMAND_LINE_PUSH_PARSER) |
28266
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1178 static bool use_command_line_push_parser = true; |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1179 #else |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1180 static bool use_command_line_push_parser = false; |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1181 #endif |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1182 |
28266
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1183 // The following logic is written as it is to allow easy transition |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1184 // to setting USE_COMMAND_LINE_PUSH_PARSER at run time and to |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1185 // simplify the logic of the main loop below by using the same |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1186 // base_parser::run interface for both push and pull parsers. |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1187 |
28266
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1188 std::shared_ptr<base_parser> repl_parser; |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1189 |
28266
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1190 if (m_interactive) |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1191 { |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1192 if (use_command_line_push_parser) |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1193 { |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1194 push_parser *pp = new push_parser (*this, new input_reader (*this)); |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1195 repl_parser = std::shared_ptr<base_parser> (pp); |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1196 } |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1197 else |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1198 { |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1199 parser *pp = new parser (new lexer (*this)); |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1200 repl_parser = std::shared_ptr<base_parser> (pp); |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1201 } |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1202 } |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1203 else |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1204 { |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1205 parser *pp = new parser (new lexer (stdin, *this)); |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1206 repl_parser = std::shared_ptr<base_parser> (pp); |
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1207 } |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1208 |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1209 do |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1210 { |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1211 try |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1212 { |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1213 unwind_protect_var<bool> upv (m_in_top_level_repl, true); |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1214 |
28266
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1215 repl_parser->reset (); |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1216 |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1217 if (m_evaluator.at_top_level ()) |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1218 { |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1219 m_evaluator.dbstep_flag (0); |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1220 m_evaluator.reset_debug_state (); |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1221 } |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1222 |
28266
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1223 exit_status = repl_parser->run (); |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1224 |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1225 if (exit_status == 0) |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1226 { |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1227 std::shared_ptr<tree_statement_list> |
28266
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1228 stmt_list = repl_parser->statement_list (); |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1229 |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1230 if (stmt_list) |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1231 { |
27529
886df2049d81
only increment command number when complete block of code is parsed
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
1232 command_editor::increment_current_command_number (); |
886df2049d81
only increment command number when complete block of code is parsed
John W. Eaton <jwe@octave.org>
parents:
27528
diff
changeset
|
1233 |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1234 m_evaluator.eval (stmt_list, m_interactive); |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1235 } |
28266
ce7a5b60e102
restore pull parser interface when input is not interactive (bug #58198)
John W. Eaton <jwe@octave.org>
parents:
27971
diff
changeset
|
1236 else if (repl_parser->at_end_of_input ()) |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1237 { |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1238 exit_status = EOF; |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1239 break; |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1240 } |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1241 } |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1242 } |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1243 catch (const interrupt_exception&) |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1244 { |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1245 recover_from_exception (); |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1246 |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1247 // Required newline when the user does Ctrl+C at the prompt. |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1248 if (m_interactive) |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1249 octave_stdout << "\n"; |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1250 } |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1251 catch (const index_exception& e) |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1252 { |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1253 recover_from_exception (); |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1254 |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1255 std::cerr << "error: unhandled index exception: " |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1256 << e.message () << " -- trying to return to prompt" |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1257 << std::endl; |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1258 } |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1259 catch (const execution_exception& ee) |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1260 { |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1261 m_error_system.save_exception (ee); |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1262 m_error_system.display_exception (ee, std::cerr); |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1263 |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1264 if (m_interactive) |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1265 recover_from_exception (); |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1266 else |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1267 { |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1268 // We should exit with a nonzero status. |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1269 exit_status = 1; |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1270 break; |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1271 } |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1272 } |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1273 catch (const std::bad_alloc&) |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1274 { |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1275 recover_from_exception (); |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1276 |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1277 std::cerr << "error: out of memory -- trying to return to prompt" |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1278 << std::endl; |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1279 } |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1280 } |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1281 while (exit_status == 0); |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1282 |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1283 if (exit_status == EOF) |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1284 { |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1285 if (m_interactive) |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1286 octave_stdout << "\n"; |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1287 |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1288 exit_status = 0; |
27519
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1289 } |
804e5d42b728
move reader and parser from evaluator repl to interpreter main_loop
John W. Eaton <jwe@octave.org>
parents:
27517
diff
changeset
|
1290 |
27530
7a9d2b0e6da8
be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents:
27529
diff
changeset
|
1291 return exit_status; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1292 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1293 |
23532
084245f9bd03
pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents:
23511
diff
changeset
|
1294 tree_evaluator& interpreter::get_evaluator (void) |
084245f9bd03
pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents:
23511
diff
changeset
|
1295 { |
23630
8a47d4735655
avoid memory leak in interpreter
John W. Eaton <jwe@octave.org>
parents:
23627
diff
changeset
|
1296 return m_evaluator; |
23532
084245f9bd03
pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents:
23511
diff
changeset
|
1297 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1298 |
23738
8acd390d16c9
don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
1299 stream_list& interpreter::get_stream_list (void) |
8acd390d16c9
don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
1300 { |
8acd390d16c9
don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
1301 return m_stream_list; |
8acd390d16c9
don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
1302 } |
8acd390d16c9
don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
1303 |
23742
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23738
diff
changeset
|
1304 url_handle_manager& interpreter::get_url_handle_manager (void) |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23738
diff
changeset
|
1305 { |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23738
diff
changeset
|
1306 return m_url_handle_manager; |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23738
diff
changeset
|
1307 } |
1f0daaf81955
don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents:
23738
diff
changeset
|
1308 |
24361
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1309 symbol_scope |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1310 interpreter::get_top_scope (void) const |
23609
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1311 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1312 return m_evaluator.get_top_scope (); |
23609
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1313 } |
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1314 |
24361
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1315 symbol_scope |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1316 interpreter::get_current_scope (void) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1317 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1318 return m_evaluator.get_current_scope (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1319 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1320 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1321 symbol_scope |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1322 interpreter::require_current_scope (const std::string& who) const |
23609
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1323 { |
24361
8bcfddad15ec
use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1324 symbol_scope scope = get_current_scope (); |
23609
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1325 |
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1326 if (! scope) |
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1327 error ("%s: symbol table scope missing", who.c_str ()); |
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1328 |
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1329 return scope; |
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1330 } |
99989ab8f142
new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1331 |
23753
c3828bd031cd
move profiler inside evaluator and inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23742
diff
changeset
|
1332 profiler& interpreter::get_profiler (void) |
c3828bd031cd
move profiler inside evaluator and inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23742
diff
changeset
|
1333 { |
c3828bd031cd
move profiler inside evaluator and inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23742
diff
changeset
|
1334 return m_evaluator.get_profiler (); |
c3828bd031cd
move profiler inside evaluator and inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23742
diff
changeset
|
1335 } |
c3828bd031cd
move profiler inside evaluator and inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23742
diff
changeset
|
1336 |
27408
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1337 int interpreter::chdir (const std::string& dir) |
23703
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1338 { |
27408
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1339 std::string xdir = sys::file_ops::tilde_expand (dir); |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1340 |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1341 int cd_ok = sys::env::chdir (xdir); |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1342 |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1343 if (! cd_ok) |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1344 error ("%s: %s", dir.c_str (), std::strerror (errno)); |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1345 |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1346 Vlast_chdir_time.stamp (); |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1347 |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1348 // FIXME: should these actions be handled as a list of functions |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1349 // to call so users can add their own chdir handlers? |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1350 |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1351 m_load_path.update (); |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1352 |
27409
a0d49e55acae
rename change_directory to directory_changed in event manager
John W. Eaton <jwe@octave.org>
parents:
27408
diff
changeset
|
1353 m_event_manager.directory_changed (sys::env::get_current_directory ()); |
27408
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1354 |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1355 return cd_ok; |
9b19eec60931
move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27394
diff
changeset
|
1356 } |
23703
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1357 |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1358 void interpreter::mlock (bool skip_first) const |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1359 { |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1360 m_evaluator.mlock (skip_first); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1361 } |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1362 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1363 void interpreter::munlock (bool skip_first) const |
23703
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1364 { |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1365 m_evaluator.munlock (skip_first); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1366 } |
23703
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1367 |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1368 bool interpreter::mislocked (bool skip_first) const |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1369 { |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1370 return m_evaluator.mislocked (skip_first); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1371 } |
23703
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1372 |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1373 void interpreter::munlock (const char *nm) |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1374 { |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1375 if (! nm) |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1376 error ("munlock: invalid value for NAME"); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1377 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1378 munlock (std::string (nm)); |
23703
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1379 } |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1380 |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1381 void interpreter::munlock (const std::string& nm) |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1382 { |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1383 octave_value val = m_symbol_table.find_function (nm); |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1384 |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1385 if (val.is_defined ()) |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1386 { |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1387 octave_function *fcn = val.function_value (); |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1388 |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1389 if (fcn) |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1390 fcn->unlock (); |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1391 } |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1392 } |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1393 |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1394 bool interpreter::mislocked (const char *nm) |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1395 { |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1396 if (! nm) |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1397 error ("mislocked: invalid value for NAME"); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1398 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1399 return mislocked (std::string (nm)); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1400 } |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27832
diff
changeset
|
1401 |
23703
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1402 bool interpreter::mislocked (const std::string& nm) |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1403 { |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1404 bool retval = false; |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1405 |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1406 octave_value val = m_symbol_table.find_function (nm); |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1407 |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1408 if (val.is_defined ()) |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1409 { |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1410 octave_function *fcn = val.function_value (); |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1411 |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1412 if (fcn) |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1413 retval = fcn->islocked (); |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1414 } |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1415 |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1416 return retval; |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1417 } |
6eb5f6199a5a
move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents:
23699
diff
changeset
|
1418 |
27015
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
1419 std::string interpreter::mfilename (const std::string& opt) const |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
1420 { |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
1421 return m_evaluator.mfilename (opt); |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
1422 } |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
1423 |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1424 octave_value_list interpreter::eval_string (const std::string& eval_str, |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1425 bool silent, int& parse_status, |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1426 int nargout) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1427 { |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1428 return m_evaluator.eval_string (eval_str, silent, parse_status, nargout); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1429 } |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1430 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1431 octave_value interpreter::eval_string (const std::string& eval_str, |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1432 bool silent, int& parse_status) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1433 { |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1434 return m_evaluator.eval_string (eval_str, silent, parse_status); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1435 } |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1436 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1437 octave_value_list interpreter::eval_string (const octave_value& arg, |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1438 bool silent, int& parse_status, |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1439 int nargout) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1440 { |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1441 return m_evaluator.eval_string (arg, silent, parse_status, nargout); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1442 } |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
25994
diff
changeset
|
1443 |
27019
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1444 octave_value_list interpreter::eval (const std::string& try_code, |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1445 int nargout) |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1446 { |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1447 return m_evaluator.eval (try_code, nargout); |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1448 } |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1449 |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1450 octave_value_list interpreter::eval (const std::string& try_code, |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1451 const std::string& catch_code, |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1452 int nargout) |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1453 { |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1454 return m_evaluator.eval (try_code, catch_code, nargout); |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1455 } |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1456 |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1457 octave_value_list interpreter::evalin (const std::string& context, |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1458 const std::string& try_code, |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1459 int nargout) |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1460 { |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1461 return m_evaluator.evalin (context, try_code, nargout); |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1462 } |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1463 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1464 octave_value_list interpreter::evalin (const std::string& context, |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1465 const std::string& try_code, |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1466 const std::string& catch_code, |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1467 int nargout) |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1468 { |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1469 return m_evaluator.evalin (context, try_code, catch_code, nargout); |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1470 } |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1471 |
27020
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1472 //! Evaluate an Octave function (built-in or interpreted) and return |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1473 //! the list of result values. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1474 //! |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1475 //! @param name The name of the function to call. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1476 //! @param args The arguments to the function. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1477 //! @param nargout The number of output arguments expected. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1478 //! @return A list of output values. The length of the list is not |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1479 //! necessarily the same as @c nargout. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1480 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1481 octave_value_list interpreter::feval (const char *name, |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1482 const octave_value_list& args, |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1483 int nargout) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1484 { |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1485 return feval (std::string (name), args, nargout); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1486 } |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1487 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1488 octave_value_list interpreter::feval (const std::string& name, |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1489 const octave_value_list& args, |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1490 int nargout) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1491 { |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1492 octave_value fcn = m_symbol_table.find_function (name, args); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1493 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1494 if (fcn.is_undefined ()) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1495 error ("feval: function '%s' not found", name.c_str ()); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1496 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1497 octave_function *of = fcn.function_value (); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1498 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1499 return of->call (m_evaluator, nargout, args); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1500 } |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1501 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1502 octave_value_list interpreter::feval (octave_function *fcn, |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1503 const octave_value_list& args, |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1504 int nargout) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1505 { |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1506 if (fcn) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1507 return fcn->call (m_evaluator, nargout, args); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1508 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1509 return octave_value_list (); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1510 } |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1511 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1512 octave_value_list interpreter::feval (const octave_value& val, |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1513 const octave_value_list& args, |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1514 int nargout) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1515 { |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1516 // FIXME: do we really want to silently return an empty ovl if |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1517 // the function object is undefined? It's essentially what the |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1518 // version above that accepts a pointer to an octave_function |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1519 // object does and some code was apparently written to rely on it |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1520 // (for example, __ode15__). |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1521 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1522 if (val.is_undefined ()) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1523 return ovl (); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1524 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1525 if (val.is_function ()) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1526 { |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1527 return feval (val.function_value (), args, nargout); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1528 } |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1529 else if (val.is_function_handle ()) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1530 { |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1531 // This covers function handles, inline functions, and anonymous |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1532 // functions. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1533 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1534 std::list<octave_value_list> arg_list; |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1535 arg_list.push_back (args); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1536 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1537 // FIXME: could we make octave_value::subsref a const method? |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1538 // It would be difficult because there are instances of |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1539 // incrementing the reference count inside subsref methods, |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1540 // which means they can't be const with the current way of |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1541 // handling reference counting. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1542 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1543 octave_value xval = val; |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1544 return xval.subsref ("(", arg_list, nargout); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1545 } |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1546 else if (val.is_string ()) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1547 { |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1548 return feval (val.string_value (), args, nargout); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1549 } |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1550 else |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1551 error ("feval: first argument must be a string, inline function, or a function handle"); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1552 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1553 return ovl (); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1554 } |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1555 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1556 //! Evaluate an Octave function (built-in or interpreted) and return |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1557 //! the list of result values. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1558 //! |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1559 //! @param args The first element of @c args is the function to call. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1560 //! It may be the name of the function as a string, a function |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1561 //! handle, or an inline function. The remaining arguments are |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1562 //! passed to the function. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1563 //! @param nargout The number of output arguments expected. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1564 //! @return A list of output values. The length of the list is not |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1565 //! necessarily the same as @c nargout. |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1566 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1567 octave_value_list interpreter::feval (const octave_value_list& args, |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1568 int nargout) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1569 { |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1570 if (args.length () == 0) |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1571 error ("feval: first argument must be a string, inline function, or a function handle"); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1572 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1573 octave_value f_arg = args(0); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1574 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1575 octave_value_list tmp_args = args.slice (1, args.length () - 1, true); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1576 |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1577 return feval (f_arg, tmp_args, nargout); |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1578 } |
30e9204de313
move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1579 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1580 void interpreter::install_variable (const std::string& name, |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1581 const octave_value& value, bool global) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1582 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1583 m_evaluator.install_variable (name, value, global); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1584 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1585 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1586 octave_value interpreter::global_varval (const std::string& name) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1587 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1588 return m_evaluator.global_varval (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1589 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1590 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1591 void interpreter::global_assign (const std::string& name, |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1592 const octave_value& val) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1593 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1594 m_evaluator.global_assign (name, val); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1595 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1596 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1597 octave_value interpreter::top_level_varval (const std::string& name) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1598 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1599 return m_evaluator.top_level_varval (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1600 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1601 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1602 void interpreter::top_level_assign (const std::string& name, |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1603 const octave_value& val) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1604 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1605 m_evaluator.top_level_assign (name, val); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1606 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1607 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1608 bool interpreter::is_variable (const std::string& name) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1609 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1610 return m_evaluator.is_variable (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1611 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1612 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1613 bool interpreter::is_local_variable (const std::string& name) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1614 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1615 return m_evaluator.is_local_variable (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1616 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1617 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1618 octave_value interpreter::varval (const std::string& name) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1619 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1620 return m_evaluator.varval (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1621 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1622 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1623 void interpreter::assign (const std::string& name, |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1624 const octave_value& val) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1625 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1626 m_evaluator.assign (name, val); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1627 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1628 |
27014
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
26826
diff
changeset
|
1629 void interpreter::assignin (const std::string& context, |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
26826
diff
changeset
|
1630 const std::string& name, |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
26826
diff
changeset
|
1631 const octave_value& val) |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
26826
diff
changeset
|
1632 { |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
26826
diff
changeset
|
1633 m_evaluator.assignin (context, name, val); |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
26826
diff
changeset
|
1634 } |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
26826
diff
changeset
|
1635 |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1636 void interpreter::source_file (const std::string& file_name, |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1637 const std::string& context, bool verbose, |
27507
2d537a089e5d
eliminate warn_for argument for source_file and parse_fcn_file functions
John W. Eaton <jwe@octave.org>
parents:
27506
diff
changeset
|
1638 bool require_file) |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1639 { |
27507
2d537a089e5d
eliminate warn_for argument for source_file and parse_fcn_file functions
John W. Eaton <jwe@octave.org>
parents:
27506
diff
changeset
|
1640 m_evaluator.source_file (file_name, context, verbose, require_file); |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1641 } |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
1642 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1643 bool interpreter::at_top_level (void) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1644 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1645 return m_evaluator.at_top_level (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1646 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1647 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1648 bool interpreter::isglobal (const std::string& name) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1649 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1650 return m_evaluator.is_global (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1651 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1652 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1653 octave_value interpreter::find (const std::string& name) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1654 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1655 return m_evaluator.find (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1656 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1657 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1658 void interpreter::clear_all (bool force) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1659 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1660 m_evaluator.clear_all (force); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1661 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1662 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1663 void interpreter::clear_objects (void) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1664 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1665 m_evaluator.clear_objects (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1666 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1667 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1668 void interpreter::clear_variable (const std::string& name) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1669 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1670 m_evaluator.clear_variable (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1671 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1672 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1673 void interpreter::clear_variable_pattern (const std::string& pattern) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1674 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1675 m_evaluator.clear_variable_pattern (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1676 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1677 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1678 void interpreter::clear_variable_regexp (const std::string& pattern) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1679 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1680 m_evaluator.clear_variable_regexp (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1681 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1682 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1683 void interpreter::clear_variables (void) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1684 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1685 m_evaluator.clear_variables (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1686 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1687 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1688 void interpreter::clear_global_variable (const std::string& name) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1689 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1690 m_evaluator.clear_global_variable (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1691 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1692 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1693 void interpreter::clear_global_variable_pattern (const std::string& pattern) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1694 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1695 m_evaluator.clear_global_variable_pattern (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1696 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1697 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1698 void interpreter::clear_global_variable_regexp (const std::string& pattern) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1699 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1700 m_evaluator.clear_global_variable_regexp (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1701 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1702 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1703 void interpreter::clear_global_variables (void) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1704 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1705 m_evaluator.clear_global_variables (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1706 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1707 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1708 void interpreter::clear_functions (bool force) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1709 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1710 m_symbol_table.clear_functions (force); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1711 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1712 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1713 void interpreter::clear_function (const std::string& name) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1714 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1715 m_symbol_table.clear_function (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1716 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1717 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1718 void interpreter::clear_symbol (const std::string& name) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1719 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1720 m_evaluator.clear_symbol (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1721 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1722 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1723 void interpreter::clear_function_pattern (const std::string& pat) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1724 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1725 m_symbol_table.clear_function_pattern (pat); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1726 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1727 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1728 void interpreter::clear_function_regexp (const std::string& pat) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1729 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1730 m_symbol_table.clear_function_regexp (pat); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1731 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1732 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1733 void interpreter::clear_symbol_pattern (const std::string& pat) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1734 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1735 return m_evaluator.clear_symbol_pattern (pat); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1736 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1737 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1738 void interpreter::clear_symbol_regexp (const std::string& pat) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1739 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1740 return m_evaluator.clear_symbol_regexp (pat); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1741 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1742 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1743 std::list<std::string> interpreter::global_variable_names (void) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1744 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1745 return m_evaluator.global_variable_names (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1746 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1747 |
27594
e091e09d26f0
restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents:
27593
diff
changeset
|
1748 std::list<std::string> interpreter::top_level_variable_names (void) |
e091e09d26f0
restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents:
27593
diff
changeset
|
1749 { |
e091e09d26f0
restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents:
27593
diff
changeset
|
1750 return m_evaluator.top_level_variable_names (); |
e091e09d26f0
restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents:
27593
diff
changeset
|
1751 } |
e091e09d26f0
restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents:
27593
diff
changeset
|
1752 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1753 std::list<std::string> interpreter::variable_names (void) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1754 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1755 return m_evaluator.variable_names (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1756 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1757 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1758 std::list<std::string> interpreter::user_function_names (void) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1759 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1760 return m_symbol_table.user_function_names (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1761 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
1762 |
27016
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
1763 std::list<std::string> interpreter::autoloaded_functions (void) const |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
1764 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
1765 return m_evaluator.autoloaded_functions (); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
1766 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
1767 |
27471 | 1768 void interpreter::handle_exception (const execution_exception& e) |
1769 { | |
1770 m_error_system.save_exception (e); | |
1771 | |
27971
ec769a7ab9fb
fix more spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
27957
diff
changeset
|
1772 // FIXME: use a separate stream instead of std::cerr directly so that |
27471 | 1773 // error messages can be redirected more easily? Pass the message |
1774 // to an event manager function? | |
1775 m_error_system.display_exception (e, std::cerr); | |
1776 | |
1777 recover_from_exception (); | |
1778 } | |
1779 | |
23111
252975fdc444
more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
1780 void interpreter::recover_from_exception (void) |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1781 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
1782 can_interrupt = true; |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1783 octave_interrupt_state = 0; |
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1784 octave_signal_caught = 0; |
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1785 octave_restore_signal_mask (); |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23694
diff
changeset
|
1786 catch_interrupts (); |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1787 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1788 |
27542
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
1789 void interpreter::mark_for_deletion (const std::string& file) |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
1790 { |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
1791 m_tmp_files.insert (file); |
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
1792 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1793 |
27542
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
1794 void interpreter::cleanup_tmp_files (void) |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1795 { |
27542
b8aa62c1deb5
eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents:
27532
diff
changeset
|
1796 m_tmp_files.cleanup (); |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1797 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1798 |
27588
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27587
diff
changeset
|
1799 void interpreter::quit (int exit_status, bool force, bool confirm) |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1800 { |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1801 if (! force) |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1802 { |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1803 try |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1804 { |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1805 bool cancel = false; |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1806 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1807 if (symbol_exist ("finish.m", "file")) |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1808 { |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1809 unwind_protect_var<bool> upv1 (m_executing_finish_script, true); |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1810 unwind_protect_var<bool> upv2 (m_cancel_quit); |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1811 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1812 evalin ("base", "finish", 0); |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1813 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1814 cancel = m_cancel_quit; |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1815 } |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1816 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1817 if (cancel) |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1818 return; |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1819 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1820 // Check for confirmation. |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1821 |
27588
f0e3f3e28a8e
move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents:
27587
diff
changeset
|
1822 if (confirm && ! m_event_manager.confirm_shutdown ()) |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1823 return; |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1824 } |
27592
637279c8caba
* intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents:
27591
diff
changeset
|
1825 catch (const execution_exception&) |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1826 { |
27592
637279c8caba
* intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents:
27591
diff
changeset
|
1827 // Catch execution_exceptions so we don't throw an |
637279c8caba
* intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents:
27591
diff
changeset
|
1828 // exit_exception if there is an in finish.m. But throw it |
637279c8caba
* intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents:
27591
diff
changeset
|
1829 // again so that will be handled as any other |
637279c8caba
* intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents:
27591
diff
changeset
|
1830 // execution_exception by the evaluator. This way, errors |
637279c8caba
* intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents:
27591
diff
changeset
|
1831 // will be ignored properly and we won't exit if quit is |
637279c8caba
* intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents:
27591
diff
changeset
|
1832 // called recursively from finish.m. |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1833 |
27592
637279c8caba
* intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents:
27591
diff
changeset
|
1834 throw; |
27587
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1835 } |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1836 } |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1837 |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1838 throw exit_exception (exit_status); |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1839 } |
494d6243c188
improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents:
27545
diff
changeset
|
1840 |
27689
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1841 void interpreter::add_atexit_fcn (const std::string& fname) |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1842 { |
27690
c81139d8dcc3
prevent atexit functions from adding new atexit functions
John W. Eaton <jwe@octave.org>
parents:
27689
diff
changeset
|
1843 if (m_executing_atexit) |
c81139d8dcc3
prevent atexit functions from adding new atexit functions
John W. Eaton <jwe@octave.org>
parents:
27689
diff
changeset
|
1844 return; |
c81139d8dcc3
prevent atexit functions from adding new atexit functions
John W. Eaton <jwe@octave.org>
parents:
27689
diff
changeset
|
1845 |
27689
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1846 m_atexit_fcns.push_front (fname); |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1847 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1848 |
27689
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1849 bool interpreter::remove_atexit_fcn (const std::string& fname) |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1850 { |
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1851 bool found = false; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1852 |
27689
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1853 for (auto it = m_atexit_fcns.begin (); |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1854 it != m_atexit_fcns.end (); it++) |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1855 { |
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1856 if (*it == fname) |
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1857 { |
27689
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1858 m_atexit_fcns.erase (it); |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1859 found = true; |
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1860 break; |
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1861 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1862 } |
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1863 |
23110
af48d8be62b3
move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23109
diff
changeset
|
1864 return found; |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1865 } |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1866 |
27689
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1867 void interpreter::add_atexit_function (const std::string& fname) |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1868 { |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1869 interpreter& interp |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1870 = __get_interpreter__ ("interpreter::add_atexit_function"); |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1871 |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1872 interp.add_atexit_fcn (fname); |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1873 } |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1874 |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1875 bool interpreter::remove_atexit_function (const std::string& fname) |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1876 { |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1877 interpreter& interp |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1878 = __get_interpreter__ ("interpreter::remove_atexit_function"); |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1879 |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1880 return interp.remove_atexit_fcn (fname); |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1881 } |
4f32af6abd4b
don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents:
27594
diff
changeset
|
1882 |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1883 // What internal options get configured by --traditional. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1884 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1885 void interpreter::maximum_braindamage (void) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1886 { |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25404
diff
changeset
|
1887 m_input_system.PS1 (">> "); |
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25404
diff
changeset
|
1888 m_input_system.PS2 (""); |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1889 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1890 m_evaluator.PS4 (""); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1891 |
25993
f75bb9d659e0
eliminate global and file-scope static variables from load-save.cc (bug #54571)
John W. Eaton <jwe@octave.org>
parents:
25488
diff
changeset
|
1892 m_load_save_system.crash_dumps_octave_core (false); |
f75bb9d659e0
eliminate global and file-scope static variables from load-save.cc (bug #54571)
John W. Eaton <jwe@octave.org>
parents:
25488
diff
changeset
|
1893 m_load_save_system.save_default_options ("-mat-binary"); |
f75bb9d659e0
eliminate global and file-scope static variables from load-save.cc (bug #54571)
John W. Eaton <jwe@octave.org>
parents:
25488
diff
changeset
|
1894 |
25994
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25993
diff
changeset
|
1895 m_history_system.timestamp_format_string ("%%-- %D %I:%M %p --%%"); |
f881d3e271d2
eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents:
25993
diff
changeset
|
1896 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27102
diff
changeset
|
1897 m_error_system.beep_on_error (true); |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1898 Fconfirm_recursive_rmdir (octave_value (false)); |
25993
f75bb9d659e0
eliminate global and file-scope static variables from load-save.cc (bug #54571)
John W. Eaton <jwe@octave.org>
parents:
25488
diff
changeset
|
1899 |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1900 Fdisable_diagonal_matrix (octave_value (true)); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1901 Fdisable_permutation_matrix (octave_value (true)); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1902 Fdisable_range (octave_value (true)); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1903 Ffixed_point_format (octave_value (true)); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1904 Fprint_empty_dimensions (octave_value (false)); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1905 Fstruct_levels_to_print (octave_value (0)); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1906 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1907 disable_warning ("Octave:abbreviated-property-match"); |
27517
85ad4689aa05
Add warning when non-scalar argument presented to ':' range operator.
Rik <rik@octave.org>
parents:
27509
diff
changeset
|
1908 disable_warning ("Octave:colon-nonscalar-argument"); |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1909 disable_warning ("Octave:data-file-in-path"); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1910 disable_warning ("Octave:function-name-clash"); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1911 disable_warning ("Octave:possible-matlab-short-circuit-operator"); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23721
diff
changeset
|
1912 } |
25345
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1913 |
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1914 void interpreter::execute_pkg_add (const std::string& dir) |
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1915 { |
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1916 try |
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1917 { |
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1918 m_load_path.execute_pkg_add (dir); |
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1919 } |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27020
diff
changeset
|
1920 catch (const interrupt_exception&) |
25345
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1921 { |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
1922 recover_from_exception (); |
25345
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1923 } |
27471 | 1924 catch (const execution_exception& e) |
25345
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1925 { |
27471 | 1926 handle_exception (e); |
25345
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1927 } |
ce6f7a5cd68e
avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents:
25184
diff
changeset
|
1928 } |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1929 } |