annotate libinterp/corefcn/interpreter.cc @ 31605:e88a07dec498 stable

maint: Use macros to begin/end C++ namespaces. * oct-conf-post-public.in.h: Define two macros (OCTAVE_BEGIN_NAMESPACE, OCTAVE_END_NAMESPACE) that can be used to start/end a namespace. * mk-opts.pl, build-env.h, build-env.in.cc, __betainc__.cc, __contourc__.cc, __dsearchn__.cc, __eigs__.cc, __expint__.cc, __ftp__.cc, __gammainc__.cc, __ichol__.cc, __ilu__.cc, __isprimelarge__.cc, __lin_interpn__.cc, __magick_read__.cc, __pchip_deriv__.cc, __qp__.cc, amd.cc, auto-shlib.cc, auto-shlib.h, balance.cc, base-text-renderer.cc, base-text-renderer.h, besselj.cc, bitfcns.cc, bsxfun.cc, c-file-ptr-stream.cc, c-file-ptr-stream.h, call-stack.cc, call-stack.h, ccolamd.cc, cellfun.cc, chol.cc, colamd.cc, colloc.cc, conv2.cc, daspk.cc, dasrt.cc, dassl.cc, data.cc, data.h, debug.cc, defaults.cc, defaults.h, defun-int.h, defun.cc, det.cc, dirfns.cc, display.cc, display.h, dlmread.cc, dmperm.cc, dot.cc, dynamic-ld.cc, dynamic-ld.h, eig.cc, ellipj.cc, environment.cc, environment.h, error.cc, error.h, errwarn.h, event-manager.cc, event-manager.h, event-queue.cc, event-queue.h, fcn-info.cc, fcn-info.h, fft.cc, fft2.cc, fftn.cc, file-io.cc, filter.cc, find.cc, ft-text-renderer.cc, ft-text-renderer.h, gcd.cc, getgrent.cc, getpwent.cc, getrusage.cc, givens.cc, gl-render.cc, gl-render.h, gl2ps-print.cc, gl2ps-print.h, graphics-toolkit.cc, graphics-toolkit.h, graphics.cc, graphics.in.h, gsvd.cc, gtk-manager.cc, gtk-manager.h, hash.cc, help.cc, help.h, hess.cc, hex2num.cc, hook-fcn.cc, hook-fcn.h, input.cc, input.h, interpreter-private.cc, interpreter-private.h, interpreter.cc, interpreter.h, inv.cc, jsondecode.cc, jsonencode.cc, kron.cc, latex-text-renderer.cc, latex-text-renderer.h, load-path.cc, load-path.h, load-save.cc, load-save.h, lookup.cc, ls-ascii-helper.cc, ls-ascii-helper.h, ls-oct-text.cc, ls-utils.cc, ls-utils.h, lsode.cc, lu.cc, mappers.cc, matrix_type.cc, max.cc, mex-private.h, mex.cc, mgorth.cc, nproc.cc, oct-fstrm.cc, oct-fstrm.h, oct-hdf5-types.cc, oct-hdf5-types.h, oct-hist.cc, oct-hist.h, oct-iostrm.cc, oct-iostrm.h, oct-opengl.h, oct-prcstrm.cc, oct-prcstrm.h, oct-procbuf.cc, oct-procbuf.h, oct-process.cc, oct-process.h, oct-stdstrm.h, oct-stream.cc, oct-stream.h, oct-strstrm.cc, oct-strstrm.h, oct-tex-lexer.in.ll, oct-tex-parser.yy, ordqz.cc, ordschur.cc, pager.cc, pager.h, pinv.cc, pow2.cc, pr-flt-fmt.cc, pr-output.cc, procstream.cc, procstream.h, psi.cc, qr.cc, quad.cc, quadcc.cc, qz.cc, rand.cc, rcond.cc, regexp.cc, schur.cc, settings.cc, settings.h, sighandlers.cc, sighandlers.h, sparse-xdiv.cc, sparse-xdiv.h, sparse-xpow.cc, sparse-xpow.h, sparse.cc, spparms.cc, sqrtm.cc, stack-frame.cc, stack-frame.h, stream-euler.cc, strfind.cc, strfns.cc, sub2ind.cc, svd.cc, sylvester.cc, symbfact.cc, syminfo.cc, syminfo.h, symrcm.cc, symrec.cc, symrec.h, symscope.cc, symscope.h, symtab.cc, symtab.h, syscalls.cc, sysdep.cc, sysdep.h, text-engine.cc, text-engine.h, text-renderer.cc, text-renderer.h, time.cc, toplev.cc, tril.cc, tsearch.cc, typecast.cc, url-handle-manager.cc, url-handle-manager.h, urlwrite.cc, utils.cc, utils.h, variables.cc, variables.h, xdiv.cc, xdiv.h, xnorm.cc, xnorm.h, xpow.cc, xpow.h, __delaunayn__.cc, __fltk_uigetfile__.cc, __glpk__.cc, __init_fltk__.cc, __init_gnuplot__.cc, __ode15__.cc, __voronoi__.cc, audiodevinfo.cc, audioread.cc, convhulln.cc, fftw.cc, gzip.cc, mk-build-env-features.sh, mk-builtins.pl, cdef-class.cc, cdef-class.h, cdef-fwd.h, cdef-manager.cc, cdef-manager.h, cdef-method.cc, cdef-method.h, cdef-object.cc, cdef-object.h, cdef-package.cc, cdef-package.h, cdef-property.cc, cdef-property.h, cdef-utils.cc, cdef-utils.h, ov-base.cc, ov-base.h, ov-bool-mat.cc, ov-builtin.h, ov-cell.cc, ov-class.cc, ov-class.h, ov-classdef.cc, ov-classdef.h, ov-complex.cc, ov-fcn-handle.cc, ov-fcn-handle.h, ov-fcn.h, ov-java.cc, ov-java.h, ov-mex-fcn.h, ov-null-mat.cc, ov-oncleanup.cc, ov-struct.cc, ov-typeinfo.cc, ov-typeinfo.h, ov-usr-fcn.cc, ov-usr-fcn.h, ov.cc, ov.h, octave.cc, octave.h, mk-ops.sh, op-b-b.cc, op-b-bm.cc, op-b-sbm.cc, op-bm-b.cc, op-bm-bm.cc, op-bm-sbm.cc, op-cdm-cdm.cc, op-cell.cc, op-chm.cc, op-class.cc, op-cm-cm.cc, op-cm-cs.cc, op-cm-m.cc, op-cm-s.cc, op-cm-scm.cc, op-cm-sm.cc, op-cs-cm.cc, op-cs-cs.cc, op-cs-m.cc, op-cs-s.cc, op-cs-scm.cc, op-cs-sm.cc, op-dm-dm.cc, op-dm-scm.cc, op-dm-sm.cc, op-dm-template.cc, op-dms-template.cc, op-fcdm-fcdm.cc, op-fcm-fcm.cc, op-fcm-fcs.cc, op-fcm-fm.cc, op-fcm-fs.cc, op-fcn.cc, op-fcs-fcm.cc, op-fcs-fcs.cc, op-fcs-fm.cc, op-fcs-fs.cc, op-fdm-fdm.cc, op-fm-fcm.cc, op-fm-fcs.cc, op-fm-fm.cc, op-fm-fs.cc, op-fs-fcm.cc, op-fs-fcs.cc, op-fs-fm.cc, op-fs-fs.cc, op-i16-i16.cc, op-i32-i32.cc, op-i64-i64.cc, op-i8-i8.cc, op-int-concat.cc, op-m-cm.cc, op-m-cs.cc, op-m-m.cc, op-m-s.cc, op-m-scm.cc, op-m-sm.cc, op-mi.cc, op-pm-pm.cc, op-pm-scm.cc, op-pm-sm.cc, op-pm-template.cc, op-range.cc, op-s-cm.cc, op-s-cs.cc, op-s-m.cc, op-s-s.cc, op-s-scm.cc, op-s-sm.cc, op-sbm-b.cc, op-sbm-bm.cc, op-sbm-sbm.cc, op-scm-cm.cc, op-scm-cs.cc, op-scm-m.cc, op-scm-s.cc, op-scm-scm.cc, op-scm-sm.cc, op-sm-cm.cc, op-sm-cs.cc, op-sm-m.cc, op-sm-s.cc, op-sm-scm.cc, op-sm-sm.cc, op-str-m.cc, op-str-s.cc, op-str-str.cc, op-struct.cc, op-ui16-ui16.cc, op-ui32-ui32.cc, op-ui64-ui64.cc, op-ui8-ui8.cc, ops.h, anon-fcn-validator.cc, anon-fcn-validator.h, bp-table.cc, bp-table.h, comment-list.cc, comment-list.h, filepos.h, lex.h, lex.ll, oct-lvalue.cc, oct-lvalue.h, oct-parse.yy, parse.h, profiler.cc, profiler.h, pt-anon-scopes.cc, pt-anon-scopes.h, pt-arg-list.cc, pt-arg-list.h, pt-args-block.cc, pt-args-block.h, pt-array-list.cc, pt-array-list.h, pt-assign.cc, pt-assign.h, pt-binop.cc, pt-binop.h, pt-bp.cc, pt-bp.h, pt-cbinop.cc, pt-cbinop.h, pt-cell.cc, pt-cell.h, pt-check.cc, pt-check.h, pt-classdef.cc, pt-classdef.h, pt-cmd.h, pt-colon.cc, pt-colon.h, pt-const.cc, pt-const.h, pt-decl.cc, pt-decl.h, pt-eval.cc, pt-eval.h, pt-except.cc, pt-except.h, pt-exp.cc, pt-exp.h, pt-fcn-handle.cc, pt-fcn-handle.h, pt-id.cc, pt-id.h, pt-idx.cc, pt-idx.h, pt-jump.h, pt-loop.cc, pt-loop.h, pt-mat.cc, pt-mat.h, pt-misc.cc, pt-misc.h, pt-pr-code.cc, pt-pr-code.h, pt-select.cc, pt-select.h, pt-spmd.cc, pt-spmd.h, pt-stmt.cc, pt-stmt.h, pt-tm-const.cc, pt-tm-const.h, pt-unop.cc, pt-unop.h, pt-vm-eval.cc, pt-walk.cc, pt-walk.h, pt.cc, pt.h, token.cc, token.h, Range.cc, Range.h, idx-vector.cc, idx-vector.h, range-fwd.h, CollocWt.cc, CollocWt.h, aepbalance.cc, aepbalance.h, chol.cc, chol.h, gepbalance.cc, gepbalance.h, gsvd.cc, gsvd.h, hess.cc, hess.h, lo-mappers.cc, lo-mappers.h, lo-specfun.cc, lo-specfun.h, lu.cc, lu.h, oct-convn.cc, oct-convn.h, oct-fftw.cc, oct-fftw.h, oct-norm.cc, oct-norm.h, oct-rand.cc, oct-rand.h, oct-spparms.cc, oct-spparms.h, qr.cc, qr.h, qrp.cc, qrp.h, randgamma.cc, randgamma.h, randmtzig.cc, randmtzig.h, randpoisson.cc, randpoisson.h, schur.cc, schur.h, sparse-chol.cc, sparse-chol.h, sparse-lu.cc, sparse-lu.h, sparse-qr.cc, sparse-qr.h, svd.cc, svd.h, child-list.cc, child-list.h, dir-ops.cc, dir-ops.h, file-ops.cc, file-ops.h, file-stat.cc, file-stat.h, lo-sysdep.cc, lo-sysdep.h, lo-sysinfo.cc, lo-sysinfo.h, mach-info.cc, mach-info.h, oct-env.cc, oct-env.h, oct-group.cc, oct-group.h, oct-password.cc, oct-password.h, oct-syscalls.cc, oct-syscalls.h, oct-time.cc, oct-time.h, oct-uname.cc, oct-uname.h, action-container.cc, action-container.h, base-list.h, cmd-edit.cc, cmd-edit.h, cmd-hist.cc, cmd-hist.h, f77-fcn.h, file-info.cc, file-info.h, lo-array-errwarn.cc, lo-array-errwarn.h, lo-hash.cc, lo-hash.h, lo-ieee.h, lo-regexp.cc, lo-regexp.h, lo-utils.cc, lo-utils.h, oct-base64.cc, oct-base64.h, oct-glob.cc, oct-glob.h, oct-inttypes.h, oct-mutex.cc, oct-mutex.h, oct-refcount.h, oct-shlib.cc, oct-shlib.h, oct-sparse.cc, oct-sparse.h, oct-string.h, octave-preserve-stream-state.h, pathsearch.cc, pathsearch.h, quit.cc, quit.h, unwind-prot.cc, unwind-prot.h, url-transfer.cc, url-transfer.h : Use new macros to begin/end C++ namespaces.
author Rik <rik@octave.org>
date Thu, 01 Dec 2022 14:23:45 -0800
parents 0f93c3a756f7
children aac27ad79be6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 //
30564
796f54d4ddbf update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 30310
diff changeset
3 // Copyright (C) 1993-2022 The Octave Project Developers
27923
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>
30310
efaaf58c8d07 interpreter.cc: Include missing header <clocale>.
Markus Mützel <markus.muetzel@gmx.de>
parents: 30309
diff changeset
31 #include <clocale>
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
32
29619
5cf985f5760a move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents: 29618
diff changeset
33 #include <iostream>
27542
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
34 #include <set>
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
35 #include <string>
29503
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
36 #include <thread>
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
37
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
38 #include "cmd-edit.h"
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
39 #include "cmd-hist.h"
27408
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
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 "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
42 #include "file-ops.h"
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
43 #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
44 #include "lo-blas-proto.h"
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
45 #include "lo-error.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
46 #include "oct-env.h"
29292
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
47 #include "quit.h"
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
48 #include "str-vec.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
49 #include "signal-wrappers.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
50 #include "unistd-wrappers.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
51
23711
5a97aafb12a9 don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents: 23703
diff changeset
52 #include "builtin-defun-decls.h"
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
53 #include "defaults.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
54 #include "Cell.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
55 #include "defun.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
56 #include "display.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
57 #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
58 #include "event-manager.h"
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
59 #include "graphics.h"
23721
b2d55b52ee51 new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents: 23719
diff changeset
60 #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
61 #include "input.h"
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents: 23435
diff changeset
62 #include "interpreter-private.h"
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
63 #include "interpreter.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
64 #include "load-path.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
65 #include "load-save.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
66 #include "octave.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
67 #include "oct-hist.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
68 #include "oct-map.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
69 #include "oct-mutex.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
70 #include "ovl.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
71 #include "ov.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
72 #include "ov-classdef.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
73 #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
74 #include "pt-classdef.h"
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
75 #include "pt-eval.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
76 #include "pt-jump.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
77 #include "pt-stmt.h"
25443
2fa7cd178c4a new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents: 25440
diff changeset
78 #include "settings.h"
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
79 #include "sighandlers.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
80 #include "sysdep.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
81 #include "unwind-prot.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
82 #include "utils.h"
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
83 #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
84 #include "version.h"
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
85
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
86 // TRUE means the quit() call is allowed.
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
87 bool quit_allowed = true;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
88
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
89 // 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
90 // is ready for interactive use.
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
91 bool octave_interpreter_ready = false;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
92
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
93 // 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
94 bool octave_initialized = false;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
95
31605
e88a07dec498 maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents: 31593
diff changeset
96 OCTAVE_BEGIN_NAMESPACE(octave)
29958
32c3a5805893 move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29956
diff changeset
97
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
98 DEFUN (__version_info__, args, ,
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
99 doc: /* -*- texinfo -*-
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
100 @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
101 Undocumented internal function.
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
102 @end deftypefn */)
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 static octave_map vinfo;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
105
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
106 int nargin = args.length ();
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
107
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
108 if (nargin != 0 && nargin != 4)
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
109 print_usage ();
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
110
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
111 octave_value retval;
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 (nargin == 0)
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
114 retval = vinfo;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
115 else if (nargin == 4)
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
116 {
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
117 if (vinfo.nfields () == 0)
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
118 {
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
119 vinfo.assign ("Name", args(0));
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
120 vinfo.assign ("Version", args(1));
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
121 vinfo.assign ("Release", args(2));
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
122 vinfo.assign ("Date", args(3));
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 else
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_idx_type n = vinfo.numel () + 1;
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.resize (dim_vector (n, 1));
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
129
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
130 octave_value idx (n);
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
131
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
132 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
133 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
134 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
135 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
136 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
137 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
138
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
139 return retval;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
140 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
141
27261
dccdc3b001a2 eliminate static functions from octave_link class
John W. Eaton <jwe@octave.org>
parents: 27214
diff changeset
142 DEFMETHOD (quit, interp, args, ,
dccdc3b001a2 eliminate static functions from octave_link class
John W. Eaton <jwe@octave.org>
parents: 27214
diff changeset
143 doc: /* -*- texinfo -*-
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
144 @deftypefn {} {} quit
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
145 @deftypefnx {} {} quit cancel
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
146 @deftypefnx {} {} quit force
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
147 @deftypefnx {} {} quit ("cancel")
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
148 @deftypefnx {} {} quit ("force")
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
149 @deftypefnx {} {} quit (@var{status})
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
150 @deftypefnx {} {} quit (@var{status}, "force")
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
151 Quit the current Octave session.
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
152
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
153 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
154
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
155 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
156 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
157
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
158 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
159 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
160 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
161 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
162 @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
163 the command prompt.
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 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
166 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
167 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
168
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
169 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
170 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
171 process.
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
172
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
173 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
174 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
175 @seealso{atexit}
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
176 @end deftypefn */)
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
177 {
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
178 int numel = args.length ();
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
179
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
180 if (numel > 2)
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
181 print_usage ();
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
182
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
183 int exit_status = 0;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
184
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
185 bool force = false;
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
186 bool cancel = false;
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
187
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
188 if (numel == 2)
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 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
191 std::string frc
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
192 = 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
193
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
194 if (frc == "force")
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
195 force = true;
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
196 else
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
197 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
198 }
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
199 else if (numel == 1)
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
200 {
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
201 if (args(0).is_string ())
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
202 {
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
203 const char *msg
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
204 = 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
205
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
206 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
207
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
208 if (opt == "cancel")
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
209 cancel = true;
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
210 else if (opt == "force")
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
211 force = true;
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
212 else
27593
a2db1e36e9b2 Silence compiler warning about use of error() without format string.
Rik <rik@octave.org>
parents: 27592
diff changeset
213 error ("%s", msg);
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
214 }
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
215 else
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
216 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
217 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
218
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
219 if (cancel)
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
220 {
27591
b54d6ac62fbf make "quit cancel" a no-op outside of finish script
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
221 // 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
222
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
223 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
224 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
225
b54d6ac62fbf make "quit cancel" a no-op outside of finish script
John W. Eaton <jwe@octave.org>
parents: 27588
diff changeset
226 return ovl ();
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
227 }
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
228
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
229 interp.quit (exit_status, force);
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
230
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
231 return ovl ();
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
232 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
233
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
234 DEFALIAS (exit, quit);
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
235
27474
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
236 DEFMETHOD (atexit, interp, args, nargout,
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
237 doc: /* -*- texinfo -*-
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
238 @deftypefn {} {} atexit (@var{fcn})
30888
32d2b6604a9f doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents: 30752
diff changeset
239 @deftypefnx {} {} atexit (@var{fcn}, true)
32d2b6604a9f doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents: 30752
diff changeset
240 @deftypefnx {} {} atexit (@var{fcn}, false)
32d2b6604a9f doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents: 30752
diff changeset
241 @deftypefnx {} {@var{status} =} atexit (@var{fcn}, false)
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
242 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
243
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
244 For example,
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
245
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
246 @example
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
247 @group
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
248 function last_words ()
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
249 disp ("Bye bye");
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
250 endfunction
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
251 atexit ("last_words");
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
252 @end group
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
253 @end example
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
254
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
255 @noindent
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
256 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
257
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
258 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
259 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
260 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
261 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
262 above,
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
263
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
264 @example
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
265 atexit ("last_words", false);
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
266 @end example
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
267
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
268 @noindent
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
269 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
270 @code{last_words} when it exits.
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
271
30888
32d2b6604a9f doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents: 30752
diff changeset
272 The optional output @var{status} is only available when unregistering a
31376
ad8a4102f910 doc: Spellcheck documentation for 8.1 release.
Rik <rik@octave.org>
parents: 31105
diff changeset
273 function. The value is true if the unregistering was successful and false
30888
32d2b6604a9f doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents: 30752
diff changeset
274 otherwise.
32d2b6604a9f doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents: 30752
diff changeset
275
31376
ad8a4102f910 doc: Spellcheck documentation for 8.1 release.
Rik <rik@octave.org>
parents: 31105
diff changeset
276 Programming Note: @code{atexit} only removes the first occurrence of a function
30888
32d2b6604a9f doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents: 30752
diff changeset
277 from the list; if a function was placed in the list multiple times with
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
278 @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
279 @seealso{quit}
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
280 @end deftypefn */)
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
281 {
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
282 int nargin = args.length ();
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
283
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
284 if (nargin < 1 || nargin > 2)
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
285 print_usage ();
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
286
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
287 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
288
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
289 bool add_mode = (nargin == 2)
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
290 ? 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
291 : true;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
292
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
293 octave_value_list retval;
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 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
296 interp.add_atexit_fcn (arg);
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
297 else
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
298 {
27689
4f32af6abd4b don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents: 27594
diff changeset
299 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
300
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
301 if (nargout > 0)
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
302 retval = ovl (found);
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
303 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
304
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
305 return retval;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
306 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
307
28380
548556e78bdf make --traditional option easily accessible to the interpreter
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
308 DEFMETHOD (__traditional__, interp, , ,
548556e78bdf make --traditional option easily accessible to the interpreter
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
309 doc: /* -*- texinfo -*-
30888
32d2b6604a9f doc: Ensure documentation lists output argument when it exists for functions in libinterp/
Rik <rik@octave.org>
parents: 30752
diff changeset
310 @deftypefn {} {@var{tf} =} __traditional__ ()
31593
0f93c3a756f7 doc: grammarcheck documentation ahead of 8.1 release.
Rik <rik@octave.org>
parents: 31555
diff changeset
311 Return true if Octave was invoked with the @w{@env{--traditional}} option.
28380
548556e78bdf make --traditional option easily accessible to the interpreter
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
312 @end deftypefn */)
548556e78bdf make --traditional option easily accessible to the interpreter
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
313 {
548556e78bdf make --traditional option easily accessible to the interpreter
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
314 return ovl (interp.traditional ());
548556e78bdf make --traditional option easily accessible to the interpreter
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
315 }
548556e78bdf make --traditional option easily accessible to the interpreter
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
316
27542
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
317 temporary_file_list::~temporary_file_list (void)
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
318 {
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
319 cleanup ();
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
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
322 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
323 {
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
324 m_files.insert (file);
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
325 }
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
326
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
327 void temporary_file_list::cleanup (void)
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
328 {
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
329 while (! m_files.empty ())
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
330 {
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
331 auto it = m_files.begin ();
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
332
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
333 octave_unlink_wrapper (it->c_str ());
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
334
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
335 m_files.erase (it);
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
336 }
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
337 }
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
338
27408
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
339 // 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
340 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
341
25487
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
342 // 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
343 // 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
344 // 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
345 // toplev.cc.
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 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
348 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
349 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
350 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
351 {
31105
670a0d878af1 eliminate WHO arguments from interpreter-private functions
John W. Eaton <jwe@octave.org>
parents: 31040
diff changeset
352 interpreter& interp = __get_interpreter__ ();
27474
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
353
25487
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
354 try
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
355 {
27507
2d537a089e5d eliminate warn_for argument for source_file and parse_fcn_file functions
John W. Eaton <jwe@octave.org>
parents: 27506
diff changeset
356 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
357 }
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
358 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
359 {
27474
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
360 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
361
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
362 return 1;
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
363 }
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 28953
diff changeset
364 catch (const execution_exception& ee)
25487
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
365 {
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 28953
diff changeset
366 interp.handle_exception (ee);
25487
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 return 1;
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
369 }
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 return 0;
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_version_info (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 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
377
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
378 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
379 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
380 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
381 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
382
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
383 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
384 }
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 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
387 {
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
388 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
389 }
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
390
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
391 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
392 {
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
393 // 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
394 // 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
395 // 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
396 // 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
397 // 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
398 // 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
399
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
400 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
401 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
402
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
403 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
404
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
405 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
406
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
407 dynamic_library libs ("");
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
408
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
409 if (libs)
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
410 {
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
411 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
412 = reinterpret_cast<octave_set_xerbla_handler_ptr>
27932
b018f553fd85 maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents: 27923
diff changeset
413 (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
414
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
415 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
416 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
417 }
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
418 }
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
419
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
420 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
421 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
422 {
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
423 va_list args;
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
424 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
425 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
426 va_end (args);
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
427
27480
63b417917f5e remove some obsolete signal handling functions
John W. Eaton <jwe@octave.org>
parents: 27474
diff changeset
428 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
429 }
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
430
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
431 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
432 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
433 {
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
434 va_list args;
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
435 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
436 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
437 va_end (args);
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
438
27480
63b417917f5e remove some obsolete signal handling functions
John W. Eaton <jwe@octave.org>
parents: 27474
diff changeset
439 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
440 }
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
441
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
442 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
443 {
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
444 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
445 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
446 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
447 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
448 }
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
449
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
450 // 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
451 // 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
452 // path.
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22186
diff changeset
453
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
454 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
455 : m_app_context (app_context),
27542
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
456 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
457 m_atexit_fcns (),
27266
596312d4f25d don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
458 m_display_info (),
23719
69a111259a2c eliminate some global variables
John W. Eaton <jwe@octave.org>
parents: 23717
diff changeset
459 m_environment (),
25443
2fa7cd178c4a new class for miscellaneous interpreter settings
John W. Eaton <jwe@octave.org>
parents: 25440
diff changeset
460 m_settings (),
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
461 m_error_system (*this),
31555
9d0d37acafbe delete m_evaluator after m_output_system (bug #63416)
John W. Eaton <jwe@octave.org>
parents: 31376
diff changeset
462 m_evaluator (*this),
23721
b2d55b52ee51 new class to manage help system and associated variables
John W. Eaton <jwe@octave.org>
parents: 23719
diff changeset
463 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
464 m_input_system (*this),
25435
a52e6fb674b1 eliminate some singletons and static & global variables
John W. Eaton <jwe@octave.org>
parents: 25407
diff changeset
465 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
466 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
467 m_dynamic_loader (*this),
27394
489c74ac36da store reference to interpreter in load_path object
John W. Eaton <jwe@octave.org>
parents: 27335
diff changeset
468 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
469 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
470 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
471 m_symbol_table (*this),
23738
8acd390d16c9 don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents: 23723
diff changeset
472 m_stream_list (*this),
24734
5d8c4cbc56d7 don't use singleton pattern for child_list
John W. Eaton <jwe@octave.org>
parents: 24727
diff changeset
473 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
474 m_url_handle_manager (),
23651
5c6cceef132b don't use singleton for cdef_manager object
John W. Eaton <jwe@octave.org>
parents: 23630
diff changeset
475 m_cdef_manager (*this),
23774
41795b504a8b don't use singleton for gtk_manager
John W. Eaton <jwe@octave.org>
parents: 23753
diff changeset
476 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
477 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
478 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
479 m_interactive (false),
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23611
diff changeset
480 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
481 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
482 m_verbose (false),
28380
548556e78bdf make --traditional option easily accessible to the interpreter
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
483 m_traditional (false),
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23611
diff changeset
484 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
485 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
486 m_history_initialized (false),
29295
b73ddb964093 allow interrupts to be sent to all processes in process group or just octave
John W. Eaton <jwe@octave.org>
parents: 29293
diff changeset
487 m_interrupt_all_in_process_group (true),
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
488 m_cancel_quit (false),
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
489 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
490 m_executing_atexit (false),
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23552
diff changeset
491 m_initialized (false)
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
492 {
24538
2b273df71aa0 allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
493 // 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
494 // should change to say something like
2b273df71aa0 allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
495 //
2b273df71aa0 allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
496 // 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
497
30156
c8d5ec1f5618 maint: use "m_" prefix for member variable "instance" in class interpreter.
Rik <rik@octave.org>
parents: 29982
diff changeset
498 if (m_instance)
23511
232c8d69d934 manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
499 throw std::runtime_error
24538
2b273df71aa0 allow experimenting with thread_local storage
John W. Eaton <jwe@octave.org>
parents: 24534
diff changeset
500 ("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
501
30156
c8d5ec1f5618 maint: use "m_" prefix for member variable "instance" in class interpreter.
Rik <rik@octave.org>
parents: 29982
diff changeset
502 m_instance = this;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
503
30309
bf619727bf6c interpreter: Use UTF-8 locale on Windows if possible.
Markus Mützel <markus.muetzel@gmx.de>
parents: 30156
diff changeset
504 #if defined (OCTAVE_HAVE_WINDOWS_UTF8_LOCALE)
bf619727bf6c interpreter: Use UTF-8 locale on Windows if possible.
Markus Mützel <markus.muetzel@gmx.de>
parents: 30156
diff changeset
505 // Force a UTF-8 locale on Windows if possible
bf619727bf6c interpreter: Use UTF-8 locale on Windows if possible.
Markus Mützel <markus.muetzel@gmx.de>
parents: 30156
diff changeset
506 std::setlocale (LC_ALL, ".UTF8");
bf619727bf6c interpreter: Use UTF-8 locale on Windows if possible.
Markus Mützel <markus.muetzel@gmx.de>
parents: 30156
diff changeset
507 #else
bf619727bf6c interpreter: Use UTF-8 locale on Windows if possible.
Markus Mützel <markus.muetzel@gmx.de>
parents: 30156
diff changeset
508 std::setlocale (LC_ALL, "");
bf619727bf6c interpreter: Use UTF-8 locale on Windows if possible.
Markus Mützel <markus.muetzel@gmx.de>
parents: 30156
diff changeset
509 #endif
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
510 // Matlab uses "C" locale for LC_NUMERIC class regardless of local setting
30309
bf619727bf6c interpreter: Use UTF-8 locale on Windows if possible.
Markus Mützel <markus.muetzel@gmx.de>
parents: 30156
diff changeset
511 std::setlocale (LC_NUMERIC, "C");
bf619727bf6c interpreter: Use UTF-8 locale on Windows if possible.
Markus Mützel <markus.muetzel@gmx.de>
parents: 30156
diff changeset
512 std::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
513 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
514 sys::env::putenv ("LC_TIME", "C");
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
515
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
516 // 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
517 octave_set_default_fpucw ();
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
518
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
519 thread::init ();
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
520
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
521 octave_ieee_init ();
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
522
25487
fbc270aeb55d * interpreter.cc (intialize_xerbla_error_handler, xerbla_abort): New functions.
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
523 initialize_xerbla_error_handler ();
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
524
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
525 initialize_error_handlers ();
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
526
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
527 if (m_app_context)
26826
20881d195d20 fix handling of SIGTSTP (bug #51903)
John W. Eaton <jwe@octave.org>
parents: 26722
diff changeset
528 {
20881d195d20 fix handling of SIGTSTP (bug #51903)
John W. Eaton <jwe@octave.org>
parents: 26722
diff changeset
529 install_signal_handlers ();
20881d195d20 fix handling of SIGTSTP (bug #51903)
John W. Eaton <jwe@octave.org>
parents: 26722
diff changeset
530 octave_unblock_signal_by_name ("SIGTSTP");
20881d195d20 fix handling of SIGTSTP (bug #51903)
John W. Eaton <jwe@octave.org>
parents: 26722
diff changeset
531 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
532 else
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
533 quit_allowed = false;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
534
27266
596312d4f25d don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
535 if (! m_app_context)
596312d4f25d don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
536 m_display_info.initialize ();
596312d4f25d don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
537
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
538 bool line_editing = false;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
539
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
540 if (m_app_context)
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
541 {
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
542 // 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
543 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
544
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
545 // 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
546 // including PKG_ADD files.
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
547
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
548 string_vector args = options.all_args ();
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
549
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
550 m_app_context->intern_argv (args);
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
551 intern_nargin (args.numel () - 1);
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
552
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
553 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
554
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
555 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
556
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
557 for (const auto& pth : command_line_path)
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents: 23435
diff changeset
558 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
559
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
560 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
561 if (! exec_path.empty ())
23719
69a111259a2c eliminate some global variables
John W. Eaton <jwe@octave.org>
parents: 23717
diff changeset
562 m_environment.exec_path (exec_path);
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
563
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
564 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
565 if (! image_path.empty ())
23719
69a111259a2c eliminate some global variables
John W. Eaton <jwe@octave.org>
parents: 23717
diff changeset
566 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
567
27266
596312d4f25d don't use singleton pattern for display_info class
John W. Eaton <jwe@octave.org>
parents: 27263
diff changeset
568 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
569 m_display_info.initialize ();
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
570
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
571 // 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
572 // interactive.
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
573
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
574 // 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
575 // pipe or a redirected file.
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
576 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
577
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
578 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
579 && octave_isatty_wrapper (fileno (stdout)));
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
580
29912
da5cc930ff10 Change startup so that '--interactive' does not always force '--no-line-editing' (bug #60696).
Rik <rik@octave.org>
parents: 29848
diff changeset
581 // Don't force interactive if we're already interactive (bug #60696).
da5cc930ff10 Change startup so that '--interactive' does not always force '--no-line-editing' (bug #60696).
Rik <rik@octave.org>
parents: 29848
diff changeset
582 bool forced_interactive = options.forced_interactive ();
da5cc930ff10 Change startup so that '--interactive' does not always force '--no-line-editing' (bug #60696).
Rik <rik@octave.org>
parents: 29848
diff changeset
583 if (m_interactive)
da5cc930ff10 Change startup so that '--interactive' does not always force '--no-line-editing' (bug #60696).
Rik <rik@octave.org>
parents: 29848
diff changeset
584 {
da5cc930ff10 Change startup so that '--interactive' does not always force '--no-line-editing' (bug #60696).
Rik <rik@octave.org>
parents: 29848
diff changeset
585 m_app_context->forced_interactive (false);
da5cc930ff10 Change startup so that '--interactive' does not always force '--no-line-editing' (bug #60696).
Rik <rik@octave.org>
parents: 29848
diff changeset
586 forced_interactive = false;
da5cc930ff10 Change startup so that '--interactive' does not always force '--no-line-editing' (bug #60696).
Rik <rik@octave.org>
parents: 29848
diff changeset
587 }
da5cc930ff10 Change startup so that '--interactive' does not always force '--no-line-editing' (bug #60696).
Rik <rik@octave.org>
parents: 29848
diff changeset
588
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
589 // Check if the user forced an interactive session.
29912
da5cc930ff10 Change startup so that '--interactive' does not always force '--no-line-editing' (bug #60696).
Rik <rik@octave.org>
parents: 29848
diff changeset
590 if (forced_interactive)
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
591 m_interactive = true;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
592
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
593 line_editing = options.line_editing ();
29912
da5cc930ff10 Change startup so that '--interactive' does not always force '--no-line-editing' (bug #60696).
Rik <rik@octave.org>
parents: 29848
diff changeset
594 if ((! m_interactive || forced_interactive)
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
595 && ! options.forced_line_editing ())
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
596 line_editing = false;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
597
28380
548556e78bdf make --traditional option easily accessible to the interpreter
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
598 m_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
599
5a97aafb12a9 don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents: 23703
diff changeset
600 // 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
601 // 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
602
5a97aafb12a9 don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents: 23703
diff changeset
603 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
604 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
605 (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
606 | 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
607
5a97aafb12a9 don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents: 23703
diff changeset
608 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
609 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
610 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
611
5a97aafb12a9 don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents: 23703
diff changeset
612 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
613 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
614 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
615
5a97aafb12a9 don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents: 23703
diff changeset
616 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
617 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
618 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
619
5a97aafb12a9 don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents: 23703
diff changeset
620 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
621 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
622 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
623
5a97aafb12a9 don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents: 23703
diff changeset
624 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
625 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
626 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
627 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
628
27322
cb92168e48f6 defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents: 27321
diff changeset
629 // 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
630 // 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
631 // 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
632 // 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
633 // 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
634 // 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
635 // 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
636 // 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
637 // 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
638 // 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
639 // it is actually needed.
cb92168e48f6 defer gh_manager creation until after display_info initialization
John W. Eaton <jwe@octave.org>
parents: 27321
diff changeset
640 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
641
25407
ab10403a0b50 new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents: 25404
diff changeset
642 m_input_system.initialize (line_editing);
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
643
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
644 // 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
645 // 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
646
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
647 initialize_version_info ();
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
648
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
649 // 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
650 // 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
651
28380
548556e78bdf make --traditional option easily accessible to the interpreter
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
652 if (m_traditional)
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
653 maximum_braindamage ();
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
654
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
655 octave_interpreter_ready = true;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
656 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
657
30156
c8d5ec1f5618 maint: use "m_" prefix for member variable "instance" in class interpreter.
Rik <rik@octave.org>
parents: 29982
diff changeset
658 OCTAVE_THREAD_LOCAL interpreter *interpreter::m_instance = nullptr;
23511
232c8d69d934 manage interpreter instance in interpreter object
John W. Eaton <jwe@octave.org>
parents: 23466
diff changeset
659
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22186
diff changeset
660 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
661 {
31039
ecb867dfc8eb Don't shut down interpreter immediately on "execute" (bug #62308).
Markus Mützel <markus.muetzel@gmx.de>
parents: 30749
diff changeset
662 if (! m_app_context)
ecb867dfc8eb Don't shut down interpreter immediately on "execute" (bug #62308).
Markus Mützel <markus.muetzel@gmx.de>
parents: 30749
diff changeset
663 shutdown ();
ecb867dfc8eb Don't shut down interpreter immediately on "execute" (bug #62308).
Markus Mützel <markus.muetzel@gmx.de>
parents: 30749
diff changeset
664
27335
50216d7a2f6b eliminate static wrapper functions in gh_manager class
John W. Eaton <jwe@octave.org>
parents: 27322
diff changeset
665 delete m_gh_manager;
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
666 }
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22186
diff changeset
667
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
668 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
669 {
26661
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
670 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
671 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22186
diff changeset
672
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
673 // 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
674
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
675 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
676 {
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
677 if (! m_history_initialized)
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
678 {
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
679 // Allow command-line option to override.
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
680
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
681 if (m_app_context)
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
682 {
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
683 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
684
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
685 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
686
5a97aafb12a9 don't call built-in interpreter functions from the application context
John W. Eaton <jwe@octave.org>
parents: 23703
diff changeset
687 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
688 command_history::ignore_entries ();
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
689 }
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
690
25994
f881d3e271d2 eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents: 25993
diff changeset
691 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
692
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
693 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
694 command_history::ignore_entries ();
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
695
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
696 m_history_initialized = true;
23092
0fed4c678795 additional restructuring of startup and shutdown
John W. Eaton <jwe@octave.org>
parents: 23087
diff changeset
697 }
0fed4c678795 additional restructuring of startup and shutdown
John W. Eaton <jwe@octave.org>
parents: 23087
diff changeset
698 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
699
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
700 // 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
701 // option says to leave it empty.
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
702
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
703 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
704 {
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
705 if (! m_load_path_initialized)
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
706 {
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
707 // Allow command-line option to override.
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
708
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
709 if (m_app_context)
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
710 {
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
711 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
712
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
713 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
714 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
715
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
716 // 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
717 // 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
718 // 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
719 // 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
720 // 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
721 // 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
722 // 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
723 // are already handled.
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
724
29253
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
725 unwind_action restore_add_hook (&load_path::set_add_hook, &m_load_path,
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
726 m_load_path.get_add_hook ());
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
727
28851
1ac5a76ae91d use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents: 28623
diff changeset
728 m_load_path.set_add_hook ([=] (const std::string& dir)
25345
ce6f7a5cd68e avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
729 { this->execute_pkg_add (dir); });
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
730
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents: 23435
diff changeset
731 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
732
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
733 m_load_path_initialized = true;
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
734 }
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
735 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
736
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
737 // 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
738
23819
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
739 void interpreter::initialize (void)
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
740 {
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
741 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
742 return;
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
743
29543
97238418c028 avoid accessing invalid app context during interpreter initialization
John W. Eaton <jwe@octave.org>
parents: 29527
diff changeset
744 if (m_app_context)
97238418c028 avoid accessing invalid app context during interpreter initialization
John W. Eaton <jwe@octave.org>
parents: 29527
diff changeset
745 {
97238418c028 avoid accessing invalid app context during interpreter initialization
John W. Eaton <jwe@octave.org>
parents: 29527
diff changeset
746 const cmdline_options& options = m_app_context->options ();
29503
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
747
29543
97238418c028 avoid accessing invalid app context during interpreter initialization
John W. Eaton <jwe@octave.org>
parents: 29527
diff changeset
748 if (options.experimental_terminal_widget ())
97238418c028 avoid accessing invalid app context during interpreter initialization
John W. Eaton <jwe@octave.org>
parents: 29527
diff changeset
749 {
97238418c028 avoid accessing invalid app context during interpreter initialization
John W. Eaton <jwe@octave.org>
parents: 29527
diff changeset
750 if (! options.gui ())
97238418c028 avoid accessing invalid app context during interpreter initialization
John W. Eaton <jwe@octave.org>
parents: 29527
diff changeset
751 display_startup_message ();
97238418c028 avoid accessing invalid app context during interpreter initialization
John W. Eaton <jwe@octave.org>
parents: 29527
diff changeset
752 }
97238418c028 avoid accessing invalid app context during interpreter initialization
John W. Eaton <jwe@octave.org>
parents: 29527
diff changeset
753 else
29503
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
754 display_startup_message ();
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
755 }
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
756 else
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
757 display_startup_message ();
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
758
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
759 // 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
760 // files and begins evaluating commands.
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
761
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
762 initialize_history ();
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
763
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
764 // 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
765 // 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
766
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
767 // 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
768 // 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
769 // 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
770
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
771 initialize_load_path ();
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
772
27531
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
773 octave_save_signal_mask ();
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
774
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
775 can_interrupt = true;
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
776
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
777 octave_signal_hook = respond_to_pending_signals;
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
778 octave_interrupt_hook = nullptr;
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
779
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
780 catch_interrupts ();
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
781
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
782 // 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
783 // Global used to communicate with signal handler.
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
784 octave_initialized = true;
478150691336 consolidate initialization code
John W. Eaton <jwe@octave.org>
parents: 27530
diff changeset
785
23819
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
786 m_initialized = true;
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
787 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
788
29503
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
789 // Note: this function is currently only used with the new
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
790 // experimental terminal widget.
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
791
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
792 void interpreter::get_line_and_eval (void)
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
793 {
29619
5cf985f5760a move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents: 29618
diff changeset
794 m_evaluator.get_line_and_eval ();
29503
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
795 }
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
796
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
797 // Note: the following class is currently only used with the new
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
798 // experimental terminal widget.
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
799
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
800 class cli_input_reader
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
801 {
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
802 public:
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
803
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
804 cli_input_reader (interpreter& interp)
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
805 : m_interpreter (interp), m_thread () { }
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
806
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
807 cli_input_reader (const cli_input_reader&) = delete;
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
808
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
809 cli_input_reader& operator = (const cli_input_reader&) = delete;
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
810
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
811 ~cli_input_reader (void)
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
812 {
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
813 // FIXME: Would it be better to ensure that
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
814 // interpreter::get_line_and_eval exits and then call
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
815 // m_thread.join () here?
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
816
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
817 m_thread.detach ();
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
818 }
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
819
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
820 void start (void)
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
821 {
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
822 m_thread = std::thread (&interpreter::get_line_and_eval, &m_interpreter);
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
823 }
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
824
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
825 private:
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
826
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
827 interpreter& m_interpreter;
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
828
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
829 std::thread m_thread;
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
830 };
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
831
29254
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
832 void interpreter::parse_and_execute (const std::string& input,
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
833 bool& incomplete_parse)
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
834 {
29281
6dd456257d81 move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 29254
diff changeset
835 m_evaluator.parse_and_execute (input, incomplete_parse);
29254
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
836 }
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
837
23819
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
838 // 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
839 // we enforce that restriction?
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
840
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
841 int interpreter::execute (void)
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
842 {
27530
7a9d2b0e6da8 be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents: 27529
diff changeset
843 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
844
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
845 try
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
846 {
23819
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
847 initialize ();
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
848
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
849 execute_startup_files ();
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
850
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
851 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
852 {
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
853 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
854
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
855 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
856 {
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
857 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
858
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
859 if (status )
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
860 exit_status = status;
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
861
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
862 if (! options.persist ())
30736
dadbfe6fddd6 don't perform interpreter shutdown actions in destructor (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30564
diff changeset
863 {
dadbfe6fddd6 don't perform interpreter shutdown actions in destructor (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30564
diff changeset
864 shutdown ();
dadbfe6fddd6 don't perform interpreter shutdown actions in destructor (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30564
diff changeset
865
dadbfe6fddd6 don't perform interpreter shutdown actions in destructor (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30564
diff changeset
866 return exit_status;
dadbfe6fddd6 don't perform interpreter shutdown actions in destructor (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30564
diff changeset
867 }
23819
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
868 }
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
869
23819
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
870 // 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
871 // 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
872 // for the script.
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
873
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
874 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
875 {
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
876 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
877
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
878 if (status)
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
879 exit_status = status;
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
880
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
881 if (! options.persist ())
30736
dadbfe6fddd6 don't perform interpreter shutdown actions in destructor (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30564
diff changeset
882 {
dadbfe6fddd6 don't perform interpreter shutdown actions in destructor (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30564
diff changeset
883 shutdown ();
dadbfe6fddd6 don't perform interpreter shutdown actions in destructor (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30564
diff changeset
884
dadbfe6fddd6 don't perform interpreter shutdown actions in destructor (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30564
diff changeset
885 return exit_status;
dadbfe6fddd6 don't perform interpreter shutdown actions in destructor (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30564
diff changeset
886 }
23819
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
887 }
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
888
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
889 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
890 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
891
29254
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
892 if (options.server ())
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
893 exit_status = server_loop ();
29503
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
894 else if (options.experimental_terminal_widget ())
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
895 {
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
896 if (options.gui ())
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
897 {
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
898 m_event_manager.start_gui (true);
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
899
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
900 exit_status = server_loop ();
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
901 }
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
902 else
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
903 {
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
904 // Use an object so that the thread started for the
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
905 // reader will be cleaned up no matter how we exit
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
906 // this function.
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
907
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
908 cli_input_reader reader (*this);
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
909
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
910 reader.start ();
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
911
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
912 exit_status = server_loop ();
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
913 }
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
914 }
29254
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
915 else
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
916 exit_status = main_loop ();
31039
ecb867dfc8eb Don't shut down interpreter immediately on "execute" (bug #62308).
Markus Mützel <markus.muetzel@gmx.de>
parents: 30749
diff changeset
917
ecb867dfc8eb Don't shut down interpreter immediately on "execute" (bug #62308).
Markus Mützel <markus.muetzel@gmx.de>
parents: 30749
diff changeset
918 shutdown ();
23819
5d8ef9b859f8 defer execution of user code to interpreter::execute (bug #51631)
John W. Eaton <jwe@octave.org>
parents: 23795
diff changeset
919 }
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
920 }
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 28953
diff changeset
921 catch (const exit_exception& xe)
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
922 {
29503
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
923 exit_status = xe.exit_status ();
31039
ecb867dfc8eb Don't shut down interpreter immediately on "execute" (bug #62308).
Markus Mützel <markus.muetzel@gmx.de>
parents: 30749
diff changeset
924
ecb867dfc8eb Don't shut down interpreter immediately on "execute" (bug #62308).
Markus Mützel <markus.muetzel@gmx.de>
parents: 30749
diff changeset
925 shutdown ();
23117
17a3567a7b01 separate final interpreter initialization from execution
John W. Eaton <jwe@octave.org>
parents: 23111
diff changeset
926 }
27530
7a9d2b0e6da8 be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents: 27529
diff changeset
927
7a9d2b0e6da8 be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents: 27529
diff changeset
928 return exit_status;
23102
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
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
931 // 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
932 // errors while shutting down.
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
933
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
934 #define OCTAVE_IGNORE_EXCEPTION(E) \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
935 catch (E) \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
936 { \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
937 recover_from_exception (); \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
938 \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
939 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
940 << std::endl; \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
941 }
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
942
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
943 #define OCTAVE_SAFE_CALL(F, ARGS) \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
944 do \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
945 { \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
946 try \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
947 { \
29253
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
948 unwind_action restore_debug_on_error \
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
949 (&error_system::set_debug_on_error, &m_error_system, \
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
950 m_error_system.debug_on_error ()); \
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
951 \
29253
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
952 unwind_action restore_debug_on_warning \
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
953 (&error_system::set_debug_on_warning, &m_error_system, \
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
954 m_error_system.debug_on_warning ()); \
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
955 \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
956 m_error_system.debug_on_error (false); \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
957 m_error_system.debug_on_warning (false); \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
958 \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
959 F ARGS; \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
960 } \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
961 OCTAVE_IGNORE_EXCEPTION (const exit_exception&) \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
962 OCTAVE_IGNORE_EXCEPTION (const interrupt_exception&) \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
963 OCTAVE_IGNORE_EXCEPTION (const execution_exception&) \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
964 OCTAVE_IGNORE_EXCEPTION (const std::bad_alloc&) \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
965 } \
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
966 while (0)
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
967
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
968 void interpreter::shutdown (void)
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
969 {
29545
841ca9987302 perform shutdown actions in interpreter destructor (bug #60334)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
970 // Attempt to prevent more than one call to shutdown.
841ca9987302 perform shutdown actions in interpreter destructor (bug #60334)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
971
841ca9987302 perform shutdown actions in interpreter destructor (bug #60334)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
972 if (! m_initialized)
841ca9987302 perform shutdown actions in interpreter destructor (bug #60334)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
973 return;
841ca9987302 perform shutdown actions in interpreter destructor (bug #60334)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
974
841ca9987302 perform shutdown actions in interpreter destructor (bug #60334)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
975 m_initialized = false;
841ca9987302 perform shutdown actions in interpreter destructor (bug #60334)
John W. Eaton <jwe@octave.org>
parents: 29358
diff changeset
976
28616
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
977 OCTAVE_SAFE_CALL (feval, ("close", ovl ("all"), 0));
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
978
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
979 // Any atexit functions added after this function call won't be
28616
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
980 // executed. Each atexit function is executed with
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
981 // OCTAVE_SAFE_CALL, so we don't need that here.
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
982
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
983 execute_atexit_fcns ();
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
984
30738
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
985 // Clear all functions and variables while the event manager is
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
986 // still processing events and notify the event manager. This way,
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
987 // the workspace model will be cleared before the GUI exits.
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
988
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
989 // FIXME: This approach seems a bit fragile since there could be
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
990 // other places in the GUI that have references to interpreter
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
991 // objects. How can we reliably ensure that they are all removed
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
992 // before the interpreter exits? Maybe the best solution is to
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
993 // always start the GUI from the interpreter and close it when the
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
994 // interpreter exits? However, the workspace model is owned by the
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
995 // base_qobject object not the workspace viewer or the main window,
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
996 // so simply closing the GUI window(s) is not sufficient. See also
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
997 // bug #61994.
28616
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
998
28622
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
999 // Note that we don't force symbols to be cleared, so we will
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1000 // respect mlock at this point. Later, we'll force all variables
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1001 // and functions to be cleared.
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1002
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1003 OCTAVE_SAFE_CALL (clear_all, ());
30747
311a8fb8b127 use clear_workspace instead of set_workspace with no arguments
John W. Eaton <jwe@octave.org>
parents: 30738
diff changeset
1004 OCTAVE_SAFE_CALL (m_event_manager.clear_workspace, ());
30738
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
1005
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
1006 // If we are attached to a GUI, queue and event to close it (only
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
1007 // works with the new terminal widget), process pending events and
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
1008 // disable the link.
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
1009
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
1010 OCTAVE_SAFE_CALL (m_event_manager.close_gui, ());
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
1011 OCTAVE_SAFE_CALL (m_event_manager.process_events, (true));
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
1012 OCTAVE_SAFE_CALL (m_event_manager.disable, ());
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
1013
3c4368f0a4ab clear workspace model before exit (bug #61994)
John W. Eaton <jwe@octave.org>
parents: 30736
diff changeset
1014 OCTAVE_SAFE_CALL (m_input_system.clear_input_event_hooks, ());
28616
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1015
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1016 // We may still have some figures. Close them.
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1017
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1018 OCTAVE_SAFE_CALL (feval, ("close", ovl ("all"), 0));
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1019
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1020 // What is supposed to happen if a figure has a closerequestfcn or
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1021 // deletefcn callback registered that creates other figures or
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1022 // variables? What if those variables are classdef objects with
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1023 // destructors that can create figures? The possibilities are
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1024 // endless. At some point, we have to give up and force execution
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1025 // to end.
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1026
28622
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1027 // Note that we again don't force symbols to be cleared, so we
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1028 // continue to respect mlock here. Later, we'll force all variables
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1029 // and functions to be cleared.
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1030
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1031 OCTAVE_SAFE_CALL (clear_all, ());
28616
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1032
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1033 // 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
1034 // 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
1035 // called.
28616
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1036
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1037 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
1038
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1039 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
1040
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1041 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
1042
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1043 if (! command_history::ignoring_entries ())
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1044 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
1045
28622
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1046 OCTAVE_SAFE_CALL (m_gtk_manager.unload_all_toolkits, ());
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1047
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1048 // Now that the graphics toolkits have been unloaded, force all
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1049 // symbols to be cleared.
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1050
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1051 OCTAVE_SAFE_CALL (clear_all, (true));
d075c2f26d1d reorder shutdown steps (bug #57591)
John W. Eaton <jwe@octave.org>
parents: 28616
diff changeset
1052
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1053 // 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
1054 // 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
1055 // done earlier? Before or after atexit functions are executed?
28616
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1056 // What will happen if the destructor for an obect attempts to
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1057 // display a figure?
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1058
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1059 OCTAVE_SAFE_CALL (m_symbol_table.cleanup, ());
c315a866dbe9 attempt to avoid apparent graphics-related crash at shutdown (bug #58814)
John W. Eaton <jwe@octave.org>
parents: 28433
diff changeset
1060
28347
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1061 OCTAVE_SAFE_CALL (sysdep_cleanup, ());
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1062
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1063 OCTAVE_SAFE_CALL (flush_stdout, ());
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1064
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1065 // 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
1066 // 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
1067 // 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
1068 // 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
1069 // 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
1070 // 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
1071 // 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
1072 // .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
1073 // is unloaded.
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1074 //
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1075 // OCTAVE_SAFE_CALL (singleton_cleanup_list::cleanup, ());
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1076 }
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1077
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1078 void interpreter::execute_atexit_fcns (void)
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1079 {
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1080 // 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
1081 m_executing_atexit = true;
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1082
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1083 while (! m_atexit_fcns.empty ())
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1084 {
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1085 std::string fcn = m_atexit_fcns.front ();
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1086
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1087 m_atexit_fcns.pop_front ();
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1088
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1089 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
1090
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1091 OCTAVE_SAFE_CALL (flush_stdout, ());
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1092 }
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1093 }
00a9a49c7670 improve interpreter shutdown process (bug #56952)
John W. Eaton <jwe@octave.org>
parents: 28266
diff changeset
1094
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1095 void interpreter::display_startup_message (void) const
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1096 {
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1097 bool inhibit_startup_message = false;
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1098
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1099 if (m_app_context)
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1100 {
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1101 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
1102
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1103 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
1104 }
23396
945b53af4655 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 23220
diff changeset
1105
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1106 if (m_interactive && ! inhibit_startup_message)
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1107 std::cout << octave_startup_message () << "\n" << std::endl;
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1108 }
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1109
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1110 // 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
1111 // 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
1112 // exception.
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1113
26722
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1114 int interpreter::execute_startup_files (void)
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1115 {
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1116 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
1117 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
1118 bool verbose = m_verbose;
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1119 bool inhibit_startup_message = m_inhibit_startup_message;
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1120
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1121 if (m_app_context)
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1122 {
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1123 const cmdline_options& options = m_app_context->options ();
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1124
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1125 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
1126 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
1127 verbose = options.verbose_flag ();
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1128 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
1129 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1130
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1131 verbose = (verbose && ! inhibit_startup_message);
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1132
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1133 bool require_file = false;
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 std::string context;
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1136
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1137 int exit_status = 0;
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1138
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1139 if (read_site_files)
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1140 {
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1141 // Execute commands from the site-wide configuration file.
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1142 // First from the file $(prefix)/lib/octave/site/m/octaverc
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1143 // (if it exists), then from the file
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1144 // $(prefix)/share/octave/$(version)/m/octaverc (if it exists).
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1145
23717
06579337237b move configuration variables inside octave::config namespace
John W. Eaton <jwe@octave.org>
parents: 23712
diff changeset
1146 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
1147 context, verbose, require_file);
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1148
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1149 if (status)
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1150 exit_status = status;
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1151
23717
06579337237b move configuration variables inside octave::config namespace
John W. Eaton <jwe@octave.org>
parents: 23712
diff changeset
1152 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
1153 context, verbose, require_file);
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1154
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1155 if (status)
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1156 exit_status = status;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1157 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1158
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1159 if (read_init_files)
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1160 {
26722
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1161 // 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
1162 // 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
1163 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
1164
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1165 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
1166 {
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1167 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
1168
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1169 try
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1170 {
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1171 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
1172 }
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1173 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
1174 {
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1175 recover_from_exception ();
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1176 }
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 28953
diff changeset
1177 catch (const execution_exception& ee)
26722
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1178 {
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 28953
diff changeset
1179 handle_exception (ee);
26722
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1180 }
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1181 }
f51e8a7c33f4 run Matlab user files from interpreter, not startup scripts (bug #55681)
Mike Miller <mtmiller@octave.org>
parents: 26661
diff changeset
1182
27832
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1183 // 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
1184 // $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
1185 // configuration files.
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1186
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1187 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
1188
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1189 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
1190 + "octave";
27832
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1191
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1192 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
1193
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1194 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
1195 {
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1196 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
1197 require_file);
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1198
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1199 if (status)
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1200 exit_status = status;
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1201 }
8fd7d1d2a4ca Read startup files from XDG_CONFIG_HOME or LOCALAPPDATA (bug #36477).
Mike Miller <mtmiller@octave.org>
parents: 27693
diff changeset
1202
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1203 // Try to execute commands from $HOME/$OCTAVE_INITFILE and
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1204 // $OCTAVE_INITFILE. If $OCTAVE_INITFILE is not set,
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1205 // .octaverc is assumed.
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1206
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1207 bool home_rc_already_executed = false;
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1208
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
1209 std::string initfile = sys::env::getenv ("OCTAVE_INITFILE");
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1210
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1211 if (initfile.empty ())
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1212 initfile = ".octaverc";
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1213
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
1214 std::string home_dir = sys::env::get_home_directory ();
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1215
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
1216 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
1217
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1218 std::string local_rc;
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1219
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1220 if (! home_rc.empty ())
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1221 {
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1222 int status = safe_source_file (home_rc, context, verbose,
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1223 require_file);
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1224
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1225 if (status)
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1226 exit_status = status;
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1227
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1228 // Names alone are not enough.
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1229
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
1230 sys::file_stat fs_home_rc (home_rc);
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1231
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1232 if (fs_home_rc)
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1233 {
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1234 // 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
1235 // because doing that may change the working directory.
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1236
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
1237 local_rc = sys::env::make_absolute (initfile);
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1238
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1239 home_rc_already_executed = same_file (home_rc, local_rc);
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1240 }
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1241 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1242
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1243 if (! home_rc_already_executed)
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1244 {
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1245 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
1246 local_rc = sys::env::make_absolute (initfile);
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1247
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1248 int status = safe_source_file (local_rc, context, verbose,
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1249 require_file);
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1250
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1251 if (status)
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1252 exit_status = status;
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1253 }
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1254 }
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1255
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1256 if (m_interactive && verbose)
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1257 std::cout << std::endl;
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1258
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1259 return exit_status;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1260 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1261
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1262 // Execute any code specified with --eval 'CODE'
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1263
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1264 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
1265 {
27530
7a9d2b0e6da8 be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents: 27529
diff changeset
1266 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
1267 return 0;
7a9d2b0e6da8 be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents: 27529
diff changeset
1268
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1269 const cmdline_options& options = m_app_context->options ();
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1270
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1271 std::string code_to_eval = options.code_to_eval ();
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1272
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
1273 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
1274
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1275 int parse_status = 0;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1276
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1277 try
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1278 {
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1279 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
1280 }
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
1281 catch (const interrupt_exception&)
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1282 {
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1283 recover_from_exception ();
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1284
23087
9f406f0b36da rework clean_up_and_exit (bug #50068)
John W. Eaton <jwe@octave.org>
parents: 23084
diff changeset
1285 return 1;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1286 }
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 28953
diff changeset
1287 catch (const execution_exception& ee)
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1288 {
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 28953
diff changeset
1289 handle_exception (ee);
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1290
23087
9f406f0b36da rework clean_up_and_exit (bug #50068)
John W. Eaton <jwe@octave.org>
parents: 23084
diff changeset
1291 return 1;
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
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1294 return parse_status;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1295 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1296
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1297 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
1298 {
27530
7a9d2b0e6da8 be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents: 27529
diff changeset
1299 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
1300 return 0;
7a9d2b0e6da8 be more defensive about using m_app_context in interpreter code
John W. Eaton <jwe@octave.org>
parents: 27529
diff changeset
1301
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1302 const cmdline_options& options = m_app_context->options ();
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1303
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
1304 string_vector args = options.all_args ();
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
1305
29253
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1306 void (interpreter::*interactive_fptr) (bool) = &interpreter::interactive;
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1307 unwind_action restore_interactive (interactive_fptr, this, m_interactive);
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23553
diff changeset
1308
29253
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1309 unwind_action restore_argv (&application::intern_argv, m_app_context, args);
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1310
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1311 unwind_action restore_nargin (&interpreter::intern_nargin, this,
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1312 args.numel () - 1);
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1313
29253
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1314 void (application::*program_invocation_name_fptr) (const std::string&)
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1315 = &application::program_invocation_name;
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1316 unwind_action restore_program_invocation_name
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1317 (program_invocation_name_fptr, m_app_context,
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1318 application::program_invocation_name ());
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1319
29253
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1320 void (application::*program_name_fptr) (const std::string&)
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1321 = &application::program_name;
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1322 unwind_action restore_program_name
28913793f678 prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents: 29171
diff changeset
1323 (program_name_fptr, m_app_context, application::program_name ());
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1324
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1325 m_interactive = false;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1326
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1327 // If we are running an executable script (#! /bin/octave) then
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1328 // we should only see the args passed to the script.
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1329
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1330 string_vector script_args = options.remaining_args ();
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1331
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1332 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
1333 intern_nargin (script_args.numel () - 1);
23102
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1334
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1335 std::string fname = script_args[0];
373771419d51 refactor interpreter::execute
John W. Eaton <jwe@octave.org>
parents: 23100
diff changeset
1336
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1337 m_app_context->set_program_names (fname);
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1338
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1339 std::string context;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1340 bool verbose = false;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1341 bool require_file = true;
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1342
27507
2d537a089e5d eliminate warn_for argument for source_file and parse_fcn_file functions
John W. Eaton <jwe@octave.org>
parents: 27506
diff changeset
1343 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
1344 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1345
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1346 int interpreter::main_loop (void)
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1347 {
30749
076e19eac74a allow deletion of dynamic_library objects to be delayed
John W. Eaton <jwe@octave.org>
parents: 30747
diff changeset
1348 command_editor::add_event_hook (release_unreferenced_dynamic_libraries);
076e19eac74a allow deletion of dynamic_library objects to be delayed
John W. Eaton <jwe@octave.org>
parents: 30747
diff changeset
1349
29846
78cb255c78a4 move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents: 29545
diff changeset
1350 return m_evaluator.repl ();
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1351 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1352
29254
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
1353 int interpreter::server_loop (void)
11343ca3c125 allow Octave to operate as a server, executing commands from a queue
John W. Eaton <jwe@octave.org>
parents: 29253
diff changeset
1354 {
29281
6dd456257d81 move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 29254
diff changeset
1355 return m_evaluator.server_loop ();
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1356 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1357
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
1358 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
1359 {
23630
8a47d4735655 avoid memory leak in interpreter
John W. Eaton <jwe@octave.org>
parents: 23627
diff changeset
1360 return m_evaluator;
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23511
diff changeset
1361 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1362
23738
8acd390d16c9 don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents: 23723
diff changeset
1363 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
1364 {
8acd390d16c9 don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents: 23723
diff changeset
1365 return m_stream_list;
8acd390d16c9 don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents: 23723
diff changeset
1366 }
8acd390d16c9 don't use singleton for stream_list object
John W. Eaton <jwe@octave.org>
parents: 23723
diff changeset
1367
23742
1f0daaf81955 don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents: 23738
diff changeset
1368 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
1369 {
1f0daaf81955 don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents: 23738
diff changeset
1370 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
1371 }
1f0daaf81955 don't use singleton for ch_manager, rename to url_handle_manager
John W. Eaton <jwe@octave.org>
parents: 23738
diff changeset
1372
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
1373 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
1374 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
1375 {
26661
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1376 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
1377 }
99989ab8f142 new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
1378
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
1379 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
1380 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
1381 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1382 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
1383 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1384
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1385 symbol_scope
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1386 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
1387 {
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
1388 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
1389
99989ab8f142 new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
1390 if (! scope)
99989ab8f142 new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
1391 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
1392
99989ab8f142 new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
1393 return scope;
99989ab8f142 new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
1394 }
99989ab8f142 new convenience functions for accessing current scope
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
1395
23753
c3828bd031cd move profiler inside evaluator and inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23742
diff changeset
1396 profiler& interpreter::get_profiler (void)
c3828bd031cd move profiler inside evaluator and inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23742
diff changeset
1397 {
c3828bd031cd move profiler inside evaluator and inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23742
diff changeset
1398 return m_evaluator.get_profiler ();
c3828bd031cd move profiler inside evaluator and inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23742
diff changeset
1399 }
c3828bd031cd move profiler inside evaluator and inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23742
diff changeset
1400
27408
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1401 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
1402 {
27408
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1403 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
1404
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1405 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
1406
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1407 if (! cd_ok)
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1408 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
1409
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1410 Vlast_chdir_time.stamp ();
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1411
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1412 // 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
1413 // 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
1414
28953
dff830c84726 Add function "dir_encoding" to set a file encoding per directory (bug #49685).
Markus Mützel <markus.muetzel@gmx.de>
parents: 28851
diff changeset
1415 m_load_path.read_dir_config (".");
27408
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1416 m_load_path.update ();
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1417
27409
a0d49e55acae rename change_directory to directory_changed in event manager
John W. Eaton <jwe@octave.org>
parents: 27408
diff changeset
1418 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
1419
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1420 return cd_ok;
9b19eec60931 move change directory function to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27394
diff changeset
1421 }
23703
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1422
27873
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1423 void interpreter::mlock (bool skip_first) const
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1424 {
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1425 m_evaluator.mlock (skip_first);
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1426 }
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1427
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1428 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
1429 {
27873
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1430 m_evaluator.munlock (skip_first);
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1431 }
23703
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1432
27873
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1433 bool interpreter::mislocked (bool skip_first) const
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1434 {
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1435 return m_evaluator.mislocked (skip_first);
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1436 }
23703
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1437
27873
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1438 void interpreter::munlock (const char *nm)
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1439 {
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1440 if (! nm)
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1441 error ("munlock: invalid value for NAME");
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1442
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1443 munlock (std::string (nm));
23703
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1444 }
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1445
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1446 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
1447 {
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1448 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
1449
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1450 if (val.is_defined ())
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1451 {
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1452 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
1453
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1454 if (fcn)
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1455 fcn->unlock ();
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1456 }
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1457 }
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1458
27873
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1459 bool interpreter::mislocked (const char *nm)
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1460 {
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1461 if (! nm)
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1462 error ("mislocked: invalid value for NAME");
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1463
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1464 return mislocked (std::string (nm));
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1465 }
020d0e8f7ac6 reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents: 27832
diff changeset
1466
23703
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1467 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
1468 {
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1469 bool retval = false;
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1470
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1471 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
1472
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1473 if (val.is_defined ())
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1474 {
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1475 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
1476
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1477 if (fcn)
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1478 retval = fcn->islocked ();
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1479 }
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1480
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1481 return retval;
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1482 }
6eb5f6199a5a move mlock, munlock, and mislocked to interpreter class
John W. Eaton <jwe@octave.org>
parents: 23699
diff changeset
1483
27015
4d9e1a832a55 move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27014
diff changeset
1484 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
1485 {
4d9e1a832a55 move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27014
diff changeset
1486 return m_evaluator.mfilename (opt);
4d9e1a832a55 move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27014
diff changeset
1487 }
4d9e1a832a55 move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27014
diff changeset
1488
26113
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1489 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
1490 bool silent, int& parse_status,
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1491 int nargout)
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1492 {
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1493 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
1494 }
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1495
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1496 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
1497 bool silent, int& parse_status)
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1498 {
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1499 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
1500 }
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1501
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1502 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
1503 bool silent, int& parse_status,
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1504 int nargout)
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1505 {
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1506 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
1507 }
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 25994
diff changeset
1508
27019
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
1509 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
1510 int nargout)
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
1511 {
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
1512 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
1513 }
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
1514
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
1515 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
1516 const std::string& catch_code,
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
1517 int nargout)
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
1518 {
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
1519 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
1520 }
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
1521
27018
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1522 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
1523 const std::string& try_code,
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1524 int nargout)
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1525 {
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1526 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
1527 }
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1528
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1529 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
1530 const std::string& try_code,
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1531 const std::string& catch_code,
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1532 int nargout)
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1533 {
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1534 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
1535 }
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
1536
27020
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1537 //! 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
1538 //! the list of result values.
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1539 //!
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1540 //! @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
1541 //! @param args The arguments to the function.
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1542 //! @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
1543 //! @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
1544 //! necessarily the same as @c 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 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
1547 const octave_value_list& args,
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1548 int 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 return feval (std::string (name), args, nargout);
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1551 }
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 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
1554 const octave_value_list& args,
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1555 int nargout)
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1556 {
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1557 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
1558
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1559 if (fcn.is_undefined ())
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1560 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
1561
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1562 octave_function *of = fcn.function_value ();
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1563
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1564 return of->call (m_evaluator, nargout, args);
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1565 }
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 (octave_function *fcn,
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1568 const octave_value_list& args,
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1569 int nargout)
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1570 {
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1571 if (fcn)
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1572 return fcn->call (m_evaluator, nargout, args);
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1573
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1574 return octave_value_list ();
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1575 }
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 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
1578 const octave_value_list& args,
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1579 int nargout)
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1580 {
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1581 // 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
1582 // 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
1583 // 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
1584 // 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
1585 // (for example, __ode15__).
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1586
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1587 if (val.is_undefined ())
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1588 return ovl ();
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1589
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1590 if (val.is_function ())
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1591 {
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1592 return feval (val.function_value (), args, nargout);
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1593 }
28427
7a8c69c4eb55 convert obsolete octave_fcn_inline object to @inline class
John W. Eaton <jwe@octave.org>
parents: 28347
diff changeset
1594 else if (val.is_function_handle () || val.is_inline_function ())
27020
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1595 {
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1596 // 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
1597 // functions.
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1598
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1599 std::list<octave_value_list> arg_list;
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1600 arg_list.push_back (args);
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1601
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1602 // 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
1603 // 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
1604 // incrementing the reference count inside subsref methods,
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1605 // 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
1606 // handling reference counting.
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1607
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1608 octave_value xval = val;
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1609 return xval.subsref ("(", arg_list, nargout);
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1610 }
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1611 else if (val.is_string ())
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1612 {
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1613 return feval (val.string_value (), args, nargout);
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1614 }
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1615 else
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1616 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
1617
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1618 return ovl ();
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1619 }
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1620
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1621 //! 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
1622 //! the list of result values.
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1623 //!
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1624 //! @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
1625 //! 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
1626 //! 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
1627 //! passed to the function.
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1628 //! @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
1629 //! @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
1630 //! necessarily the same as @c nargout.
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1631
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1632 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
1633 int nargout)
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1634 {
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1635 if (args.length () == 0)
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1636 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
1637
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1638 octave_value f_arg = args(0);
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1639
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1640 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
1641
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1642 return feval (f_arg, tmp_args, nargout);
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1643 }
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
1644
28433
d05a4194f1ad move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 28427
diff changeset
1645 octave_value interpreter::make_function_handle (const std::string& name)
d05a4194f1ad move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 28427
diff changeset
1646 {
d05a4194f1ad move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 28427
diff changeset
1647 return m_evaluator.make_fcn_handle (name);
d05a4194f1ad move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 28427
diff changeset
1648 }
d05a4194f1ad move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 28427
diff changeset
1649
26661
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1650 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
1651 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
1652 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1653 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
1654 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1655
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1656 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
1657 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1658 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
1659 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1660
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1661 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
1662 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
1663 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1664 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
1665 }
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 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
1668 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1669 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
1670 }
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 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
1673 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
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.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
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 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
1679 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1680 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
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 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
1684 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1685 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
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 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
1689 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1690 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
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::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
1694 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
1695 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1696 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
1697 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1698
27014
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26826
diff changeset
1699 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
1700 const std::string& name,
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26826
diff changeset
1701 const octave_value& val)
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26826
diff changeset
1702 {
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26826
diff changeset
1703 m_evaluator.assignin (context, name, val);
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26826
diff changeset
1704 }
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26826
diff changeset
1705
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
1706 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
1707 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
1708 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
1709 {
27507
2d537a089e5d eliminate warn_for argument for source_file and parse_fcn_file functions
John W. Eaton <jwe@octave.org>
parents: 27506
diff changeset
1710 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
1711 }
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
1712
26661
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1713 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
1714 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1715 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
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 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
1719 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1720 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
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 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
1724 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1725 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
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_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
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_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
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_objects (void)
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 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
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_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
1739 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1740 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
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 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
1744 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1745 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
1746 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1747
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1748 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
1749 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1750 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
1751 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1752
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1753 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
1754 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1755 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
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 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
1759 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1760 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
1761 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1762
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1763 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
1764 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1765 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
1766 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1767
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1768 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
1769 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1770 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
1771 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1772
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1773 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
1774 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1775 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
1776 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1777
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1778 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
1779 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1780 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
1781 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1782
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1783 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
1784 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1785 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
1786 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1787
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1788 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
1789 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1790 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
1791 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1792
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1793 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
1794 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1795 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
1796 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1797
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1798 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
1799 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1800 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
1801 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1802
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1803 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
1804 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1805 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
1806 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1807
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1808 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
1809 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1810 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
1811 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1812
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1813 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
1814 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1815 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
1816 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1817
27594
e091e09d26f0 restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents: 27593
diff changeset
1818 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
1819 {
e091e09d26f0 restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents: 27593
diff changeset
1820 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
1821 }
e091e09d26f0 restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents: 27593
diff changeset
1822
26661
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1823 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
1824 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1825 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
1826 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1827
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1828 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
1829 {
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1830 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
1831 }
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
1832
27016
9b261300a001 move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents: 27015
diff changeset
1833 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
1834 {
9b261300a001 move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents: 27015
diff changeset
1835 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
1836 }
9b261300a001 move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents: 27015
diff changeset
1837
29292
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1838 // May be used to send an interrupt signal to the the interpreter from
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1839 // another thread (for example, the GUI).
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1840
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1841 void interpreter::interrupt (void)
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1842 {
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1843 static int sigint = 0;
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1844 static bool first = true;
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1845
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1846 if (first)
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1847 {
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1848 octave_get_sig_number ("SIGINT", &sigint);
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1849 first = false;
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1850 }
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1851
29306
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1852 // Send SIGINT to Octave and (optionally) all other processes in its
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1853 // process group. The signal handler for SIGINT will set a global
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1854 // variable indicating an interrupt has happened. That variable is
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1855 // checked in many places in the Octave interpreter and eventually
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1856 // results in an interrupt_exception being thrown. Finally, that
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1857 // exception is caught and returns control to one of the
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1858 // read-eval-print loops or to the server loop. We use a signal
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1859 // instead of just setting the global variables here so that we will
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1860 // probably send interrupt signals to any subprocesses as well as
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1861 // interrupt execution of the interpreter.
29292
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1862
29306
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1863 pid_t pid
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1864 = m_interrupt_all_in_process_group ? 0 : octave_getpid_wrapper ();
29295
b73ddb964093 allow interrupts to be sent to all processes in process group or just octave
John W. Eaton <jwe@octave.org>
parents: 29293
diff changeset
1865
b73ddb964093 allow interrupts to be sent to all processes in process group or just octave
John W. Eaton <jwe@octave.org>
parents: 29293
diff changeset
1866 octave_kill_wrapper (pid, sigint);
29292
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1867 }
eb1e10abe9d5 use method in interpreter class to interrupt interpreter execution in GUI
John W. Eaton <jwe@octave.org>
parents: 29281
diff changeset
1868
29306
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1869 void interpreter::pause (void)
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27409
diff changeset
1870 {
29306
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1871 // FIXME: To be reliable, these tree_evaluator functions must be
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1872 // made thread safe.
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1873
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1874 m_evaluator.break_on_next_statement (true);
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1875 m_evaluator.reset_debug_state ();
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1876 }
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1877
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1878 void interpreter::stop (void)
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27409
diff changeset
1879 {
29306
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1880 // FIXME: To be reliable, these tree_evaluator functions must be
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1881 // made thread safe.
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1882
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1883 if (m_evaluator.in_debug_repl ())
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1884 m_evaluator.dbquit (true);
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1885 else
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1886 interrupt ();
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1887 }
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1888
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1889 void interpreter::resume (void)
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1890 {
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1891 // FIXME: To be reliable, these tree_evaluator functions must be
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1892 // made thread safe.
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1893
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1894 // FIXME: Should there be any feeback about not doing anything if
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1895 // not in debug mode?
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1896
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1897 if (m_evaluator.in_debug_repl ())
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1898 m_evaluator.dbcont ();
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1899 }
0231189f630d provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents: 29295
diff changeset
1900
29503
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1901 // Provided for convenience. Will be removed once we eliminate the
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1902 // old terminal widget.
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1903 bool interpreter::experimental_terminal_widget (void) const
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1904 {
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1905 if (! m_app_context)
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1906 return false;
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1907
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1908 // Embedded interpreters don't execute command line options.
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1909 const cmdline_options& options = m_app_context->options ();
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1910
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1911 return options.experimental_terminal_widget ();
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1912 }
3bfec185c9e2 experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents: 29501
diff changeset
1913
29446
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1914 void interpreter::add_debug_watch_expression (const std::string& expr)
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1915 {
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1916 m_evaluator.add_debug_watch_expression (expr);
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1917 }
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1918
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1919 void interpreter::remove_debug_watch_expression (const std::string& expr)
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1920 {
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1921 m_evaluator.remove_debug_watch_expression (expr);
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1922 }
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1923
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1924 void interpreter::clear_debug_watch_expressions (void)
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1925 {
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1926 m_evaluator.clear_debug_watch_expressions ();
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1927 }
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1928
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1929 std::set<std::string> interpreter::debug_watch_expressions (void) const
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1930 {
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1931 return m_evaluator.debug_watch_expressions ();
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1932 }
435fc29162c0 maintain a set of watch expressions for possible use in tracing/debugging
John W. Eaton <jwe@octave.org>
parents: 29359
diff changeset
1933
29171
254ee9af5014 maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents: 29163
diff changeset
1934 void interpreter::handle_exception (const execution_exception& ee)
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27409
diff changeset
1935 {
29171
254ee9af5014 maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents: 29163
diff changeset
1936 m_error_system.save_exception (ee);
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27409
diff changeset
1937
27971
ec769a7ab9fb fix more spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 27957
diff changeset
1938 // FIXME: use a separate stream instead of std::cerr directly so that
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27409
diff changeset
1939 // error messages can be redirected more easily? Pass the message
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27409
diff changeset
1940 // to an event manager function?
29501
220c6c4a3533 leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents: 29446
diff changeset
1941 m_error_system.display_exception (ee);
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27409
diff changeset
1942
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27409
diff changeset
1943 recover_from_exception ();
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27409
diff changeset
1944 }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27409
diff changeset
1945
23111
252975fdc444 more refactoring of interpreter and application classes
John W. Eaton <jwe@octave.org>
parents: 23110
diff changeset
1946 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
1947 {
29293
8784f20b9b8c new interpreter_event to signal that interpreter was interrupted
John W. Eaton <jwe@octave.org>
parents: 29292
diff changeset
1948 if (octave_interrupt_state)
8784f20b9b8c new interpreter_event to signal that interpreter was interrupted
John W. Eaton <jwe@octave.org>
parents: 29292
diff changeset
1949 m_event_manager.interpreter_interrupted ();
8784f20b9b8c new interpreter_event to signal that interpreter was interrupted
John W. Eaton <jwe@octave.org>
parents: 29292
diff changeset
1950
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
1951 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
1952 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
1953 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
1954 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
1955 catch_interrupts ();
23110
af48d8be62b3 move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23109
diff changeset
1956 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1957
27542
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
1958 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
1959 {
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
1960 m_tmp_files.insert (file);
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
1961 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1962
27542
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
1963 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
1964 {
27542
b8aa62c1deb5 eliminate global tmp_files variable
John W. Eaton <jwe@octave.org>
parents: 27532
diff changeset
1965 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
1966 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
1967
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27587
diff changeset
1968 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
1969 {
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1970 if (! force)
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1971 {
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1972 try
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1973 {
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1974 bool cancel = false;
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1975
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1976 if (symbol_exist ("finish.m", "file"))
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1977 {
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1978 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
1979 unwind_protect_var<bool> upv2 (m_cancel_quit);
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1980
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1981 evalin ("base", "finish", 0);
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1982
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1983 cancel = m_cancel_quit;
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1984 }
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1985
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1986 if (cancel)
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1987 return;
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1988
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1989 // Check for confirmation.
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1990
27588
f0e3f3e28a8e move qt_interpreter_events object from interpreter_qobject to octave_qobject
John W. Eaton <jwe@octave.org>
parents: 27587
diff changeset
1991 if (confirm && ! m_event_manager.confirm_shutdown ())
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1992 return;
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1993 }
27592
637279c8caba * intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents: 27591
diff changeset
1994 catch (const execution_exception&)
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
1995 {
27592
637279c8caba * intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents: 27591
diff changeset
1996 // 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
1997 // 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
1998 // 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
1999 // 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
2000 // 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
2001 // called recursively from finish.m.
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
2002
27592
637279c8caba * intepreter.cc (interpreter::quit): Fix exception handling logic.
John W. Eaton <jwe@octave.org>
parents: 27591
diff changeset
2003 throw;
27587
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
2004 }
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
2005 }
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
2006
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
2007 throw exit_exception (exit_status);
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
2008 }
494d6243c188 improve compatibility of quit function
John W. Eaton <jwe@octave.org>
parents: 27545
diff changeset
2009
27689
4f32af6abd4b don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents: 27594
diff changeset
2010 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
2011 {
27690
c81139d8dcc3 prevent atexit functions from adding new atexit functions
John W. Eaton <jwe@octave.org>
parents: 27689
diff changeset
2012 if (m_executing_atexit)
c81139d8dcc3 prevent atexit functions from adding new atexit functions
John W. Eaton <jwe@octave.org>
parents: 27689
diff changeset
2013 return;
c81139d8dcc3 prevent atexit functions from adding new atexit functions
John W. Eaton <jwe@octave.org>
parents: 27689
diff changeset
2014
27689
4f32af6abd4b don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents: 27594
diff changeset
2015 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
2016 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2017
27689
4f32af6abd4b don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents: 27594
diff changeset
2018 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
2019 {
af48d8be62b3 move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23109
diff changeset
2020 bool found = false;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2021
27689
4f32af6abd4b don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents: 27594
diff changeset
2022 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
2023 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
2024 {
af48d8be62b3 move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23109
diff changeset
2025 if (*it == fname)
af48d8be62b3 move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23109
diff changeset
2026 {
27689
4f32af6abd4b don't use static variable for list of interpreter atexit functions
John W. Eaton <jwe@octave.org>
parents: 27594
diff changeset
2027 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
2028 found = true;
af48d8be62b3 move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23109
diff changeset
2029 break;
af48d8be62b3 move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23109
diff changeset
2030 }
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2031 }
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2032
23110
af48d8be62b3 move recover_from_exception and atexit functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23109
diff changeset
2033 return found;
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
diff changeset
2034 }
23723
ab8831d346c1 revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
2035
ab8831d346c1 revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
2036 // 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
2037
ab8831d346c1 revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
2038 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
2039 {
25407
ab10403a0b50 new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents: 25404
diff changeset
2040 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
2041 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
2042
ab8831d346c1 revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
2043 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
2044
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
2045 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
2046 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
2047
25994
f881d3e271d2 eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents: 25993
diff changeset
2048 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
2049
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
2050 m_error_system.beep_on_error (true);
29932
b39203a44db2 Call print_struct_array_contents(1) when '--traditional' option used.
Rik <rik@octave.org>
parents: 29912
diff changeset
2051
23723
ab8831d346c1 revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
2052 Fconfirm_recursive_rmdir (octave_value (false));
29982
605275522c37 Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents: 29960
diff changeset
2053 Foptimize_diagonal_matrix (octave_value (false));
605275522c37 Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents: 29960
diff changeset
2054 Foptimize_permutation_matrix (octave_value (false));
605275522c37 Deprecate disable_range, disable_diagonal_matrix, disable_permutation_matrix.
Rik <rik@octave.org>
parents: 29960
diff changeset
2055 Foptimize_range (octave_value (false));
23723
ab8831d346c1 revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
2056 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
2057 Fprint_empty_dimensions (octave_value (false));
29932
b39203a44db2 Call print_struct_array_contents(1) when '--traditional' option used.
Rik <rik@octave.org>
parents: 29912
diff changeset
2058 Fprint_struct_array_contents (octave_value (true));
23723
ab8831d346c1 revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
2059 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
2060
29956
a956ca6698d2 move some error handling functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29954
diff changeset
2061 m_error_system.disable_warning ("Octave:abbreviated-property-match");
a956ca6698d2 move some error handling functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29954
diff changeset
2062 m_error_system.disable_warning ("Octave:colon-nonscalar-argument");
a956ca6698d2 move some error handling functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29954
diff changeset
2063 m_error_system.disable_warning ("Octave:data-file-in-path");
a956ca6698d2 move some error handling functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29954
diff changeset
2064 m_error_system.disable_warning ("Octave:empty-index");
a956ca6698d2 move some error handling functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29954
diff changeset
2065 m_error_system.disable_warning ("Octave:function-name-clash");
a956ca6698d2 move some error handling functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 29954
diff changeset
2066 m_error_system.disable_warning ("Octave:possible-matlab-short-circuit-operator");
23723
ab8831d346c1 revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents: 23721
diff changeset
2067 }
25345
ce6f7a5cd68e avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
2068
ce6f7a5cd68e avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
2069 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
2070 {
ce6f7a5cd68e avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
2071 try
ce6f7a5cd68e avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
2072 {
ce6f7a5cd68e avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
2073 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
2074 }
27102
84ff9953faa1 where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
2075 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
2076 {
27474
3fec8e9fa2aa make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents: 27471
diff changeset
2077 recover_from_exception ();
25345
ce6f7a5cd68e avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
2078 }
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 28953
diff changeset
2079 catch (const execution_exception& ee)
25345
ce6f7a5cd68e avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
2080 {
29163
8f67ad8b3103 maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents: 28953
diff changeset
2081 handle_exception (ee);
25345
ce6f7a5cd68e avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
2082 }
ce6f7a5cd68e avoid global access of load path in interpreter class
John W. Eaton <jwe@octave.org>
parents: 25184
diff changeset
2083 }
29960
939bef0b66e0 merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents: 29958
diff changeset
2084
31605
e88a07dec498 maint: Use macros to begin/end C++ namespaces.
Rik <rik@octave.org>
parents: 31593
diff changeset
2085 OCTAVE_END_NAMESPACE(octave)