Mercurial > octave
annotate libinterp/parse-tree/pt-eval.cc @ 29968:7aa4d8c049e5
eliminate obsolete DEFCONSTFUN and DEFCONSTMETHOD macros
For some time now, DEFCONSTFUN and DEFCONSTMETHOD have been equivalent
to DEFUN and DEFMETHOD so we might as well eliminate them. For now we
will eliminate all handling of them in Octave but leave them as
aliases in defun.h.
* macros.dox: Don't mention DEFCONSTFUN or DEFCONSTMETHOD.
* defun.h (DEFCONSTFUN, DEFCONSTMETHOD): Define as direct aliases of
DEFUN and DEFMETHOD but eliminate documentation for them.
* mk-builtins.pl, mk-doc.pl: Don't handle DEFCONSTFUN or DEFCONSTMETHOD.
* pt-eval.cc (Fend): Define with DEFMETHOD instead of DEFCONSTMETHOD.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Sun, 15 Aug 2021 15:15:55 -0400 |
parents | 7d6709900da7 |
children | 75fb18f0469a |
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 // |
29358
0a5b15007766
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
29064
diff
changeset
|
3 // Copyright (C) 2009-2021 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 //////////////////////////////////////////////////////////////////////// |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
25 |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21542
diff
changeset
|
26 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21211
diff
changeset
|
27 # include "config.h" |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
28 #endif |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
29 |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
30 #include <cctype> |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
31 |
29619
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
32 #include <condition_variable> |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
33 #include <iostream> |
25438
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25407
diff
changeset
|
34 #include <list> |
29619
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
35 #include <mutex> |
25438
cb1606f78f6b
prefer <istream>, <ostream>, or <iosfwd> to <iostream> where possible
John W. Eaton <jwe@octave.org>
parents:
25407
diff
changeset
|
36 #include <string> |
29619
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
37 #include <thread> |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
38 |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
39 #include "cmd-edit.h" |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
40 #include "file-ops.h" |
27016
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
41 #include "file-stat.h" |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
42 #include "lo-array-errwarn.h" |
27100
b453b586da16
improve error message when indexing undefined object with "end" (bug #33637)
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
43 #include "lo-ieee.h" |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
44 #include "oct-env.h" |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
45 |
23137
334119c390b3
move bp_table class to separate file
John W. Eaton <jwe@octave.org>
parents:
23110
diff
changeset
|
46 #include "bp-table.h" |
22091
0f6fc2ec3b1a
move call_stack class to a separate file
John W. Eaton <jwe@octave.org>
parents:
21966
diff
changeset
|
47 #include "call-stack.h" |
26975
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
48 #include "cdef-manager.h" |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
49 #include "defun.h" |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
50 #include "error.h" |
21100
e39e05d90788
Switch gripe_XXX to either err_XXX or warn_XXX naming scheme.
Rik <rik@octave.org>
parents:
20962
diff
changeset
|
51 #include "errwarn.h" |
27263
99aa1bcb8848
rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27261
diff
changeset
|
52 #include "event-manager.h" |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
53 #include "input.h" |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
54 #include "interpreter-private.h" |
22094
9203833cab7d
move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents:
22091
diff
changeset
|
55 #include "interpreter.h" |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
56 #include "octave.h" |
26769
2f847e3e8d6b
split classdef into multiple smaller source files
John W. Eaton <jwe@octave.org>
parents:
26718
diff
changeset
|
57 #include "ov-classdef.h" |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
58 #include "ov-fcn-handle.h" |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
59 #include "ov-usr-fcn.h" |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
60 #include "ov-re-sparse.h" |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
61 #include "ov-cx-sparse.h" |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
62 #include "parse.h" |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
63 #include "profiler.h" |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
64 #include "pt-all.h" |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
65 #include "pt-anon-scopes.h" |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
66 #include "pt-eval.h" |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
67 #include "pt-tm-const.h" |
28430
5bfa8e018704
store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
68 #include "stack-frame.h" |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
69 #include "symtab.h" |
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
70 #include "unwind-prot.h" |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
71 #include "utils.h" |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
72 #include "variables.h" |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
73 |
29960
939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
74 OCTAVE_NAMESPACE_BEGIN |
939bef0b66e0
merge "namespace octave" and OCTAVE_NAMESPACE_BEGIN/END blocks
John W. Eaton <jwe@octave.org>
parents:
29958
diff
changeset
|
75 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
76 // Normal evaluator. |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
77 |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
78 class quit_debug_exception |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
79 { |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
80 public: |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
81 |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
82 quit_debug_exception (bool all = false) : m_all (all) { } |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
83 |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
84 quit_debug_exception (const quit_debug_exception&) = default; |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
85 |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
86 quit_debug_exception& operator = (const quit_debug_exception&) = default; |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
87 |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
88 ~quit_debug_exception (void) = default; |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
89 |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
90 bool all (void) const { return m_all; } |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
91 |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
92 private: |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
93 |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
94 bool m_all; |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
95 }; |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
96 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
97 class debugger |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
98 { |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
99 public: |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
100 |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
101 enum execution_mode |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
102 { |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
103 EX_NORMAL = 0, |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
104 EX_CONTINUE = 1, |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
105 EX_QUIT = 2, |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
106 EX_QUIT_ALL = 3 |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
107 }; |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
108 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
109 debugger (interpreter& interp, std::size_t level) |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
110 : m_interpreter (interp), m_level (level), m_debug_frame (0), |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
111 m_execution_mode (EX_NORMAL), m_in_debug_repl (false) |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
112 { } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
113 |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
114 int server_loop (void); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
115 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
116 void repl (const std::string& prompt = "debug> "); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
117 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
118 bool in_debug_repl (void) const { return m_in_debug_repl; } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
119 |
29306
0231189f630d
provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents:
29305
diff
changeset
|
120 void dbcont (void) { m_execution_mode = EX_CONTINUE; } |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
121 |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
122 void dbquit (bool all = false) |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
123 { |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
124 if (all) |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
125 m_execution_mode = EX_QUIT_ALL; |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
126 else |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
127 m_execution_mode = EX_QUIT; |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
128 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
129 |
27402
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
130 bool quitting_debugger (void) const; |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
131 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
132 private: |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
133 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
134 interpreter& m_interpreter; |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
135 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
136 std::size_t m_level; |
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
137 std::size_t m_debug_frame; |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
138 execution_mode m_execution_mode; |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
139 bool m_in_debug_repl; |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
140 }; |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
141 |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
142 // FIXME: Could the debugger server_loop and repl functions be merged |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
143 // with the corresponding tree_evaluator functions or do they need to |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
144 // remain separate? They perform nearly the same functions. |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
145 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
146 int debugger::server_loop (void) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
147 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
148 // Process events from the event queue. |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
149 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
150 tree_evaluator& tw = m_interpreter.get_evaluator (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
151 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
152 void (tree_evaluator::*server_mode_fptr) (bool) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
153 = &tree_evaluator::server_mode; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
154 unwind_action act (server_mode_fptr, &tw, true); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
155 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
156 int exit_status = 0; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
157 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
158 do |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
159 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
160 if (m_execution_mode == EX_CONTINUE || tw.dbstep_flag ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
161 break; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
162 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
163 if (quitting_debugger ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
164 break; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
165 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
166 try |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
167 { |
29294
6867e1e12815
respond to interrupt signals when idle in the server loop
John W. Eaton <jwe@octave.org>
parents:
29282
diff
changeset
|
168 // FIXME: Should we call octave_quit in the octave::sleep |
6867e1e12815
respond to interrupt signals when idle in the server loop
John W. Eaton <jwe@octave.org>
parents:
29282
diff
changeset
|
169 // and/or command_editor::run_event_hooks functions? |
6867e1e12815
respond to interrupt signals when idle in the server loop
John W. Eaton <jwe@octave.org>
parents:
29282
diff
changeset
|
170 |
6867e1e12815
respond to interrupt signals when idle in the server loop
John W. Eaton <jwe@octave.org>
parents:
29282
diff
changeset
|
171 octave_quit (); |
6867e1e12815
respond to interrupt signals when idle in the server loop
John W. Eaton <jwe@octave.org>
parents:
29282
diff
changeset
|
172 |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
173 // FIXME: Running the event queue should be decoupled from |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
174 // the command_editor. |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
175 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
176 // FIXME: Is it OK to use command_editor::run_event_hooks |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
177 // here? It may run more than one queued function per call, |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
178 // and it seems that the checks at the top of the loop |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
179 // probably need to be done after each individual event |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
180 // function is executed. For now, maybe the simplest thing |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
181 // would be to pass a predicate function (lambda expression) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
182 // to the command_editor::run_event_hooks and have it check |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
183 // that and break out of the eval loop(s) if the condition |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
184 // is met? |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
185 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
186 // FIXME: We should also use a condition variable to manage |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
187 // the execution of entries in the queue and eliminate the |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
188 // need for the busy-wait loop. |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
189 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
190 command_editor::run_event_hooks (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
191 |
29950
6549fa7558ba
eliminate some unnecessary octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents:
29949
diff
changeset
|
192 sleep (0.1); |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
193 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
194 catch (const interrupt_exception&) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
195 { |
29420
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
196 octave_interrupt_state = 1; |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
197 m_interpreter.recover_from_exception (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
198 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
199 // Required newline when the user does Ctrl+C at the prompt. |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
200 if (m_interpreter.interactive ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
201 octave_stdout << "\n"; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
202 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
203 catch (const index_exception& e) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
204 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
205 m_interpreter.recover_from_exception (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
206 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
207 std::cerr << "error: unhandled index exception: " |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
208 << e.message () << " -- trying to return to prompt" |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
209 << std::endl; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
210 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
211 catch (const execution_exception& ee) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
212 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
213 error_system& es = m_interpreter.get_error_system (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
214 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
215 es.save_exception (ee); |
29501
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29493
diff
changeset
|
216 es.display_exception (ee); |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
217 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
218 if (m_interpreter.interactive ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
219 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
220 m_interpreter.recover_from_exception (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
221 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
222 else |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
223 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
224 // We should exit with a nonzero status. |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
225 exit_status = 1; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
226 break; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
227 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
228 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
229 catch (const quit_debug_exception& qde) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
230 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
231 if (qde.all ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
232 throw; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
233 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
234 // Continue in this debug level. |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
235 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
236 catch (const std::bad_alloc&) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
237 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
238 m_interpreter.recover_from_exception (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
239 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
240 std::cerr << "error: out of memory -- trying to return to prompt" |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
241 << std::endl; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
242 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
243 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
244 while (exit_status == 0); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
245 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
246 if (exit_status == EOF) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
247 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
248 if (m_interpreter.interactive ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
249 octave_stdout << "\n"; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
250 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
251 exit_status = 0; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
252 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
253 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
254 return exit_status; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
255 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
256 |
27533
0abe70896e34
use push parser in debug repl if enabled
John W. Eaton <jwe@octave.org>
parents:
27519
diff
changeset
|
257 void debugger::repl (const std::string& prompt_arg) |
25404
e37d857716c3
move core of interpreter::main_loop to evaluator
John W. Eaton <jwe@octave.org>
parents:
25403
diff
changeset
|
258 { |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
259 unwind_protect frame; |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
260 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
261 frame.protect_var (m_in_debug_repl); |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
262 frame.protect_var (m_execution_mode); |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
263 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
264 m_in_debug_repl = true; |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
265 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
266 tree_evaluator& tw = m_interpreter.get_evaluator (); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
267 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
268 bool silent = tw.quiet_breakpoint_flag (false); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
269 |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
270 frame.add (&tree_evaluator::restore_frame, &tw, |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
271 tw.current_call_stack_frame_number ()); |
27200
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
272 |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
273 tw.goto_frame (tw.debug_frame ()); |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
274 |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
275 octave_user_code *caller = tw.current_user_code (); |
27392
820a87b87c01
clean up use of interpreter in qt_interpreter_events::enter_debugger_event
John W. Eaton <jwe@octave.org>
parents:
27374
diff
changeset
|
276 std::string fcn_file_nm, fcn_nm; |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
277 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
278 if (caller) |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
279 { |
27392
820a87b87c01
clean up use of interpreter in qt_interpreter_events::enter_debugger_event
John W. Eaton <jwe@octave.org>
parents:
27374
diff
changeset
|
280 fcn_file_nm = caller->fcn_file_name (); |
820a87b87c01
clean up use of interpreter in qt_interpreter_events::enter_debugger_event
John W. Eaton <jwe@octave.org>
parents:
27374
diff
changeset
|
281 fcn_nm = fcn_file_nm.empty () ? caller->name () : fcn_file_nm; |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
282 } |
27200
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
283 |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
284 int curr_debug_line = tw.current_line (); |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
285 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
286 std::ostringstream buf; |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
287 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
288 input_system& input_sys = m_interpreter.get_input_system (); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
289 |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
290 event_manager& evmgr = m_interpreter.get_event_manager (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
291 |
27392
820a87b87c01
clean up use of interpreter in qt_interpreter_events::enter_debugger_event
John W. Eaton <jwe@octave.org>
parents:
27374
diff
changeset
|
292 if (! fcn_nm.empty ()) |
25404
e37d857716c3
move core of interpreter::main_loop to evaluator
John W. Eaton <jwe@octave.org>
parents:
25403
diff
changeset
|
293 { |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
294 if (input_sys.gud_mode ()) |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
295 { |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
296 static char ctrl_z = 'Z' & 0x1f; |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
297 |
27392
820a87b87c01
clean up use of interpreter in qt_interpreter_events::enter_debugger_event
John W. Eaton <jwe@octave.org>
parents:
27374
diff
changeset
|
298 buf << ctrl_z << ctrl_z << fcn_nm << ':' << curr_debug_line; |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
299 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
300 else |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
301 { |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
302 // FIXME: we should come up with a clean way to detect |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
303 // that we are stopped on the no-op command that marks the |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
304 // end of a function or script. |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
305 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
306 if (! silent) |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
307 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
308 std::shared_ptr<stack_frame> frm = tw.current_user_frame (); |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
309 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
310 frm->display_stopped_in_message (buf); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
311 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
312 |
27392
820a87b87c01
clean up use of interpreter in qt_interpreter_events::enter_debugger_event
John W. Eaton <jwe@octave.org>
parents:
27374
diff
changeset
|
313 evmgr.enter_debugger_event (fcn_nm, fcn_file_nm, curr_debug_line); |
27263
99aa1bcb8848
rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27261
diff
changeset
|
314 |
99aa1bcb8848
rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27261
diff
changeset
|
315 evmgr.set_workspace (); |
99aa1bcb8848
rename octave_link and octave_link_events classes, move inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27261
diff
changeset
|
316 |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
317 frame.add (&event_manager::execute_in_debugger_event, &evmgr, |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
318 fcn_nm, curr_debug_line); |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
319 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
320 if (! silent) |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
321 { |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
322 std::string line_buf; |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
323 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
324 if (caller) |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
325 line_buf = caller->get_code_line (curr_debug_line); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
326 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
327 if (! line_buf.empty ()) |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
328 buf << curr_debug_line << ": " << line_buf; |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
329 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
330 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
331 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
332 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
333 if (silent) |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
334 command_editor::erase_empty_line (true); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
335 |
27471 | 336 std::string stopped_in_msg = buf.str (); |
337 | |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
338 if (m_interpreter.server_mode ()) |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
339 { |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
340 if (! stopped_in_msg.empty ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
341 octave_stdout << stopped_in_msg << std::endl; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
342 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
343 evmgr.push_event_queue (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
344 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
345 frame.add (&event_manager::pop_event_queue, &evmgr); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
346 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
347 frame.add (&tree_evaluator::set_parser, &tw, tw.get_parser ()); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
348 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
349 std::shared_ptr<push_parser> |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
350 debug_parser (new push_parser (m_interpreter)); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
351 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
352 tw.set_parser (debug_parser); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
353 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
354 server_loop (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
355 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
356 else |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
357 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
358 if (! stopped_in_msg.empty ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
359 std::cerr << stopped_in_msg << std::endl; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
360 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
361 std::string tmp_prompt = prompt_arg; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
362 if (m_level > 0) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
363 tmp_prompt = "[" + std::to_string (m_level) + "]" + prompt_arg; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
364 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
365 frame.add (&input_system::set_PS1, &input_sys, input_sys.PS1 ()); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
366 input_sys.PS1 (tmp_prompt); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
367 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
368 if (! m_interpreter.interactive ()) |
27301
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27290
diff
changeset
|
369 { |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
370 void (interpreter::*interactive_fptr) (bool) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
371 = &interpreter::interactive; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
372 frame.add (interactive_fptr, &m_interpreter, |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
373 m_interpreter.interactive ()); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
374 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
375 m_interpreter.interactive (true); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
376 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
377 // FIXME: should debugging be possible in an embedded |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
378 // interpreter? |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
379 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
380 application *app = application::app (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
381 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
382 if (app) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
383 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
384 void (application::*forced_interactive_fptr) (bool) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
385 = &application::forced_interactive; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
386 frame.add (forced_interactive_fptr, app, |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
387 app->forced_interactive ()); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
388 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
389 app->forced_interactive (true); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
390 } |
27301
a2b1ba6c92d5
eliminate unnecessary application::interative function
John W. Eaton <jwe@octave.org>
parents:
27290
diff
changeset
|
391 } |
27533
0abe70896e34
use push parser in debug repl if enabled
John W. Eaton <jwe@octave.org>
parents:
27519
diff
changeset
|
392 |
0abe70896e34
use push parser in debug repl if enabled
John W. Eaton <jwe@octave.org>
parents:
27519
diff
changeset
|
393 #if defined (OCTAVE_ENABLE_COMMAND_LINE_PUSH_PARSER) |
0abe70896e34
use push parser in debug repl if enabled
John W. Eaton <jwe@octave.org>
parents:
27519
diff
changeset
|
394 |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
395 input_reader reader (m_interpreter); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
396 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
397 push_parser debug_parser (m_interpreter); |
27533
0abe70896e34
use push parser in debug repl if enabled
John W. Eaton <jwe@octave.org>
parents:
27519
diff
changeset
|
398 |
0abe70896e34
use push parser in debug repl if enabled
John W. Eaton <jwe@octave.org>
parents:
27519
diff
changeset
|
399 #else |
0abe70896e34
use push parser in debug repl if enabled
John W. Eaton <jwe@octave.org>
parents:
27519
diff
changeset
|
400 |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
401 parser debug_parser (m_interpreter); |
27533
0abe70896e34
use push parser in debug repl if enabled
John W. Eaton <jwe@octave.org>
parents:
27519
diff
changeset
|
402 |
0abe70896e34
use push parser in debug repl if enabled
John W. Eaton <jwe@octave.org>
parents:
27519
diff
changeset
|
403 #endif |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
404 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
405 error_system& es = m_interpreter.get_error_system (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
406 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
407 while (m_in_debug_repl) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
408 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
409 if (m_execution_mode == EX_CONTINUE || tw.dbstep_flag ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
410 break; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
411 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
412 if (quitting_debugger ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
413 break; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
414 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
415 try |
27402
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
416 { |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
417 debug_parser.reset (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
418 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
419 #if defined (OCTAVE_ENABLE_COMMAND_LINE_PUSH_PARSER) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
420 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
421 int retval = 0; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
422 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
423 std::string prompt |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
424 = command_editor::decode_prompt_string (tmp_prompt); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
425 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
426 do |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
427 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
428 bool eof = false; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
429 std::string input_line = reader.get_input (prompt, eof); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
430 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
431 if (eof) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
432 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
433 retval = EOF; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
434 break; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
435 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
436 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
437 retval = debug_parser.run (input_line, false); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
438 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
439 prompt = command_editor::decode_prompt_string (input_sys.PS2 ()); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
440 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
441 while (retval < 0); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
442 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
443 #else |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
444 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
445 int retval = debug_parser.run (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
446 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
447 #endif |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
448 if (command_editor::interrupt (false)) |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
449 { |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
450 // Break regardless of m_execution_mode value. |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
451 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
452 quitting_debugger (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
453 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
454 break; |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
455 } |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
456 else |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
457 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
458 if (retval == 0) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
459 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
460 std::shared_ptr<tree_statement_list> stmt_list |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
461 = debug_parser.statement_list (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
462 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
463 if (stmt_list) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
464 stmt_list->accept (tw); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
465 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
466 if (octave_completion_matches_called) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
467 octave_completion_matches_called = false; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
468 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
469 // FIXME: the following statement is here because |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
470 // the last command may have been a dbup, dbdown, or |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
471 // dbstep command that changed the current debug |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
472 // frame. If so, we need to reset the current frame |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
473 // for the call stack. But is this right way to do |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
474 // this job? What if the statement list was |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
475 // something like "dbup; dbstack"? Will the call to |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
476 // dbstack use the right frame? If not, how can we |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
477 // fix this problem? |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
478 tw.goto_frame (tw.debug_frame ()); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
479 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
480 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
481 octave_quit (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
482 } |
25404
e37d857716c3
move core of interpreter::main_loop to evaluator
John W. Eaton <jwe@octave.org>
parents:
25403
diff
changeset
|
483 } |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
484 catch (const execution_exception& ee) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
485 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
486 es.save_exception (ee); |
29501
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29493
diff
changeset
|
487 es.display_exception (ee); |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
488 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
489 // Ignore errors when in debugging mode; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
490 m_interpreter.recover_from_exception (); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
491 } |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
492 catch (const quit_debug_exception& qde) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
493 { |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
494 if (qde.all ()) |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
495 throw; |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
496 |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
497 // Continue in this debug level. |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
498 } |
25404
e37d857716c3
move core of interpreter::main_loop to evaluator
John W. Eaton <jwe@octave.org>
parents:
25403
diff
changeset
|
499 } |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
500 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
501 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
502 |
27402
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
503 bool debugger::quitting_debugger (void) const |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
504 { |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
505 if (m_execution_mode == EX_QUIT) |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
506 { |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
507 // If there is no enclosing debug level or the top-level |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
508 // repl is not active, handle dbquit the same as dbcont. |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
509 |
29420
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
510 if (m_level > 0 || m_interpreter.server_mode () |
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
511 || m_interpreter.in_top_level_repl ()) |
27402
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
512 throw quit_debug_exception (); |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
513 else |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
514 return true; |
25404
e37d857716c3
move core of interpreter::main_loop to evaluator
John W. Eaton <jwe@octave.org>
parents:
25403
diff
changeset
|
515 } |
27402
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
516 |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
517 if (m_execution_mode == EX_QUIT_ALL) |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
518 { |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
519 // If the top-level repl is not active, handle "dbquit all" |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
520 // the same as dbcont. |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
521 |
29420
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
522 if (m_interpreter.server_mode () || m_interpreter.in_top_level_repl ()) |
27402
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
523 throw quit_debug_exception (true); |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
524 else |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
525 return true; |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
526 } |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
527 |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
528 return false; |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
529 } |
84d11fcb2f91
also check debugger execution mode after command editor interrupt
John W. Eaton <jwe@octave.org>
parents:
27392
diff
changeset
|
530 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
531 bool tree_evaluator::at_top_level (void) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
532 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
533 return m_call_stack.at_top_level (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
534 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
535 |
27015
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
536 std::string |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
537 tree_evaluator::mfilename (const std::string& opt) const |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
538 { |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
539 std::string fname; |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
540 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
541 octave_user_code *fcn = m_call_stack.current_user_code (); |
27015
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
542 |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
543 if (fcn) |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
544 { |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
545 fname = fcn->fcn_file_name (); |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
546 |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
547 if (fname.empty ()) |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
548 fname = fcn->name (); |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
549 } |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
550 |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
551 if (opt == "fullpathext") |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
552 return fname; |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
553 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
554 std::size_t dpos = fname.rfind (sys::file_ops::dir_sep_char ()); |
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
555 std::size_t epos = fname.rfind ('.'); |
27015
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
556 |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
557 if (epos <= dpos+1) |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
558 epos = std::string::npos; |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
559 |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
560 if (epos != std::string::npos) |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
561 fname = fname.substr (0, epos); |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
562 |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
563 if (opt == "fullpath") |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
564 return fname; |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
565 |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
566 if (dpos != std::string::npos) |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
567 fname = fname.substr (dpos+1); |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
568 |
4d9e1a832a55
move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27014
diff
changeset
|
569 return fname; |
25404
e37d857716c3
move core of interpreter::main_loop to evaluator
John W. Eaton <jwe@octave.org>
parents:
25403
diff
changeset
|
570 } |
e37d857716c3
move core of interpreter::main_loop to evaluator
John W. Eaton <jwe@octave.org>
parents:
25403
diff
changeset
|
571 |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
572 void tree_evaluator::parse_and_execute (const std::string& input, |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
573 bool& incomplete_parse) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
574 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
575 incomplete_parse = false; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
576 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
577 unwind_protect_var<bool> upv (m_in_top_level_repl, true); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
578 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
579 if (at_top_level ()) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
580 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
581 dbstep_flag (0); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
582 reset_debug_state (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
583 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
584 |
29307
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
585 // FIXME: OK to do this job here, or should it be in the functions |
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
586 // that do the actual prompting? |
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
587 |
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
588 // Update the time stamp for the "prompt" so that automatically |
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
589 // finding modified files based on file modification times will |
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
590 // work. In the future, we may do something completely different to |
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
591 // check for changes to files but for now, we rely on the prompt |
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
592 // time stamp to limit the checks for file modification times. |
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
593 |
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
594 Vlast_prompt_time.stamp (); |
b2d62cfac9e6
update last prompt time stamp when parsing files in server loop
John W. Eaton <jwe@octave.org>
parents:
29306
diff
changeset
|
595 |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
596 bool eof = false; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
597 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
598 event_manager& evmgr = m_interpreter.get_event_manager (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
599 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
600 if (command_history::add (input)) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
601 evmgr.append_history (input); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
602 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
603 m_exit_status = m_parser->run (input, eof); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
604 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
605 if (m_exit_status == 0) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
606 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
607 std::shared_ptr<tree_statement_list> |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
608 stmt_list = m_parser->statement_list (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
609 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
610 if (stmt_list) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
611 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
612 command_editor::increment_current_command_number (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
613 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
614 eval (stmt_list, m_interpreter.interactive ()); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
615 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
616 evmgr.set_workspace (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
617 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
618 else if (m_parser->at_end_of_input ()) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
619 m_exit_status = EOF; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
620 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
621 else |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
622 incomplete_parse = true; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
623 |
29526
b65824235c7f
also reset parser when interpreter recovers from exception
John W. Eaton <jwe@octave.org>
parents:
29503
diff
changeset
|
624 // FIXME: Should we be checking m_exit_status or incomplete_parse or |
b65824235c7f
also reset parser when interpreter recovers from exception
John W. Eaton <jwe@octave.org>
parents:
29503
diff
changeset
|
625 // both here? Could EOF have a value other than -1, and is there |
b65824235c7f
also reset parser when interpreter recovers from exception
John W. Eaton <jwe@octave.org>
parents:
29503
diff
changeset
|
626 // possible confusion between that state and the parser returning -1? |
b65824235c7f
also reset parser when interpreter recovers from exception
John W. Eaton <jwe@octave.org>
parents:
29503
diff
changeset
|
627 |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
628 if (m_exit_status == -1) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
629 m_exit_status = 0; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
630 else |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
631 m_parser->reset (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
632 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
633 evmgr.pre_input_event (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
634 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
635 |
29619
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
636 void tree_evaluator::get_line_and_eval (void) |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
637 { |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
638 std::mutex mtx; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
639 std::unique_lock<std::mutex> lock (mtx); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
640 std::condition_variable cv; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
641 bool incomplete_parse = false; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
642 bool evaluation_pending = false; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
643 bool exiting = false; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
644 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
645 input_system& input_sys = m_interpreter.get_input_system (); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
646 event_manager& evmgr = m_interpreter.get_event_manager (); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
647 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
648 while (true) |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
649 { |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
650 // FIXME: Detect EOF? Use readline? If |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
651 // so, then we need to disable idle event loop hook function |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
652 // execution. |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
653 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
654 std::string ps = incomplete_parse ? input_sys.PS2 () : input_sys.PS1 (); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
655 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
656 std::cout << command_editor::decode_prompt_string (ps); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
657 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
658 std::string input; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
659 std::getline (std::cin, input); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
660 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
661 if (input.empty ()) |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
662 continue; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
663 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
664 incomplete_parse = false; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
665 evaluation_pending = true; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
666 exiting = false; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
667 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
668 evmgr.post_event |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
669 ([&] (interpreter& interp) |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
670 { |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
671 // INTERPRETER THREAD |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
672 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
673 std::lock_guard<std::mutex> local_lock (mtx); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
674 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
675 try |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
676 { |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
677 interp.parse_and_execute (input, incomplete_parse); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
678 } |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
679 catch (const exit_exception&) |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
680 { |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
681 evaluation_pending = false; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
682 exiting = true; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
683 cv.notify_all (); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
684 throw; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
685 } |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
686 catch (const execution_exception& ee) |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
687 { |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
688 error_system& es = m_interpreter.get_error_system (); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
689 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
690 es.save_exception (ee); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
691 es.display_exception (ee); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
692 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
693 if (m_interpreter.interactive ()) |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
694 { |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
695 m_interpreter.recover_from_exception (); |
29620
ad720f9c12b3
reset parser if parse error occurs parsing code in get_line_and_eval
John W. Eaton <jwe@octave.org>
parents:
29619
diff
changeset
|
696 m_parser->reset (); |
29619
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
697 evaluation_pending = false; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
698 cv.notify_all (); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
699 } |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
700 else |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
701 { |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
702 evaluation_pending = false; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
703 cv.notify_all (); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
704 throw exit_exception (1); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
705 } |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
706 } |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
707 catch (...) |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
708 { |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
709 evaluation_pending = false; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
710 cv.notify_all (); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
711 throw; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
712 } |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
713 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
714 evaluation_pending = false; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
715 cv.notify_all (); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
716 }); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
717 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
718 // Wait until evaluation is finished before prompting for input |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
719 // again. |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
720 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
721 cv.wait (lock, [&] { return ! evaluation_pending; }); |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
722 |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
723 if (exiting) |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
724 break; |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
725 } |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
726 } |
5cf985f5760a
move get_line_and_eval to parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
29572
diff
changeset
|
727 |
29846
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
728 int tree_evaluator::repl (void) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
729 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
730 // The big loop. Read, Eval, Print, Loop. Normally user |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
731 // interaction at the command line in a terminal session, but we may |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
732 // also end up here when reading from a pipe or when stdin is |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
733 // connected to a file by the magic of input redirection. |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
734 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
735 int exit_status = 0; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
736 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
737 // FIXME: should this choice be a command-line option? Note that we |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
738 // intend that the push parser interface only be used for |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
739 // interactive sessions. |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
740 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
741 #if defined (OCTAVE_ENABLE_COMMAND_LINE_PUSH_PARSER) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
742 static bool use_command_line_push_parser = true; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
743 #else |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
744 static bool use_command_line_push_parser = false; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
745 #endif |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
746 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
747 // The following logic is written as it is to allow easy transition |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
748 // to setting USE_COMMAND_LINE_PUSH_PARSER at run time and to |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
749 // simplify the logic of the main loop below by using the same |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
750 // base_parser::run interface for both push and pull parsers. |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
751 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
752 std::shared_ptr<base_parser> repl_parser; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
753 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
754 if (m_interpreter.interactive ()) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
755 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
756 if (use_command_line_push_parser) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
757 { |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
758 push_parser *pp |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
759 = new push_parser (m_interpreter, |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
760 new input_reader (m_interpreter)); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
761 |
29846
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
762 repl_parser = std::shared_ptr<base_parser> (pp); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
763 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
764 else |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
765 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
766 parser *pp = new parser (new lexer (m_interpreter)); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
767 repl_parser = std::shared_ptr<base_parser> (pp); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
768 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
769 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
770 else |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
771 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
772 parser *pp = new parser (new lexer (stdin, m_interpreter)); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
773 repl_parser = std::shared_ptr<base_parser> (pp); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
774 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
775 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
776 do |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
777 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
778 try |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
779 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
780 unwind_protect_var<bool> upv (m_in_top_level_repl, true); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
781 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
782 repl_parser->reset (); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
783 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
784 if (at_top_level ()) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
785 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
786 dbstep_flag (0); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
787 reset_debug_state (); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
788 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
789 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
790 exit_status = repl_parser->run (); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
791 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
792 if (exit_status == 0) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
793 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
794 std::shared_ptr<tree_statement_list> |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
795 stmt_list = repl_parser->statement_list (); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
796 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
797 if (stmt_list) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
798 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
799 command_editor::increment_current_command_number (); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
800 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
801 eval (stmt_list, m_interpreter.interactive ()); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
802 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
803 else if (repl_parser->at_end_of_input ()) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
804 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
805 exit_status = EOF; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
806 break; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
807 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
808 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
809 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
810 catch (const interrupt_exception&) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
811 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
812 m_interpreter.recover_from_exception (); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
813 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
814 // Required newline when the user does Ctrl+C at the prompt. |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
815 if (m_interpreter.interactive ()) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
816 octave_stdout << "\n"; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
817 } |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
818 catch (const index_exception& ie) |
29846
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
819 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
820 m_interpreter.recover_from_exception (); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
821 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
822 std::cerr << "error: unhandled index exception: " |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
823 << ie.message () << " -- trying to return to prompt" |
29846
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
824 << std::endl; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
825 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
826 catch (const execution_exception& ee) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
827 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
828 error_system& es = m_interpreter.get_error_system (); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
829 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
830 es.save_exception (ee); |
29501
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29493
diff
changeset
|
831 es.display_exception (ee); |
29846
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
832 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
833 if (m_interpreter.interactive ()) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
834 m_interpreter.recover_from_exception (); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
835 else |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
836 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
837 // We should exit with a nonzero status. |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
838 exit_status = 1; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
839 break; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
840 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
841 } |
29847
c517a55a14ad
avoid crash with dbquit when executing command in terminal from gui (bug #60813)
John W. Eaton <jwe@octave.org>
parents:
29846
diff
changeset
|
842 catch (const quit_debug_exception&) |
c517a55a14ad
avoid crash with dbquit when executing command in terminal from gui (bug #60813)
John W. Eaton <jwe@octave.org>
parents:
29846
diff
changeset
|
843 { |
c517a55a14ad
avoid crash with dbquit when executing command in terminal from gui (bug #60813)
John W. Eaton <jwe@octave.org>
parents:
29846
diff
changeset
|
844 m_interpreter.recover_from_exception (); |
c517a55a14ad
avoid crash with dbquit when executing command in terminal from gui (bug #60813)
John W. Eaton <jwe@octave.org>
parents:
29846
diff
changeset
|
845 |
c517a55a14ad
avoid crash with dbquit when executing command in terminal from gui (bug #60813)
John W. Eaton <jwe@octave.org>
parents:
29846
diff
changeset
|
846 // FIXME: Does anything else need to happen here? |
c517a55a14ad
avoid crash with dbquit when executing command in terminal from gui (bug #60813)
John W. Eaton <jwe@octave.org>
parents:
29846
diff
changeset
|
847 } |
29846
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
848 catch (const std::bad_alloc&) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
849 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
850 m_interpreter.recover_from_exception (); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
851 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
852 std::cerr << "error: out of memory -- trying to return to prompt" |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
853 << std::endl; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
854 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
855 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
856 while (exit_status == 0); |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
857 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
858 if (exit_status == EOF) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
859 { |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
860 if (m_interpreter.interactive ()) |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
861 octave_stdout << "\n"; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
862 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
863 exit_status = 0; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
864 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
865 |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
866 return exit_status; |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
867 } |
78cb255c78a4
move top-level REPL from interpreter to evaluator
John W. Eaton <jwe@octave.org>
parents:
29832
diff
changeset
|
868 |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
869 int tree_evaluator::server_loop (void) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
870 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
871 // Process events from the event queue. |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
872 |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
873 unwind_protect_var<bool> upv1 (m_server_mode, true); |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
874 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
875 m_exit_status = 0; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
876 |
29282
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
877 std::shared_ptr<push_parser> parser (new push_parser (m_interpreter)); |
0280fd549502
make debugging possible in server mode
John W. Eaton <jwe@octave.org>
parents:
29281
diff
changeset
|
878 unwind_protect_var<std::shared_ptr<push_parser>> upv2 (m_parser, parser); |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
879 |
29527
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
880 // FIXME: We are currently resetting the parser after every call to |
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
881 // recover_from_exception. This action should probably be handled |
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
882 // in a more consistent way, but resetting the parser in every call |
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
883 // to interpreter::recover_from_exception appears to cause |
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
884 // segfaults in the test suite. |
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
885 |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
886 do |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
887 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
888 try |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
889 { |
29294
6867e1e12815
respond to interrupt signals when idle in the server loop
John W. Eaton <jwe@octave.org>
parents:
29282
diff
changeset
|
890 // FIXME: Should we call octave_quit in the octave::sleep |
6867e1e12815
respond to interrupt signals when idle in the server loop
John W. Eaton <jwe@octave.org>
parents:
29282
diff
changeset
|
891 // and/or command_editor::run_event_hooks functions? |
6867e1e12815
respond to interrupt signals when idle in the server loop
John W. Eaton <jwe@octave.org>
parents:
29282
diff
changeset
|
892 |
6867e1e12815
respond to interrupt signals when idle in the server loop
John W. Eaton <jwe@octave.org>
parents:
29282
diff
changeset
|
893 octave_quit (); |
6867e1e12815
respond to interrupt signals when idle in the server loop
John W. Eaton <jwe@octave.org>
parents:
29282
diff
changeset
|
894 |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
895 // FIXME: Running the event queue should be decoupled from |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
896 // the command_editor. We should also use a condition |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
897 // variable to manage the execution of entries in the queue |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
898 // and eliminate the need for the busy-wait loop. |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
899 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
900 command_editor::run_event_hooks (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
901 |
29950
6549fa7558ba
eliminate some unnecessary octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents:
29949
diff
changeset
|
902 sleep (0.1); |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
903 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
904 catch (const interrupt_exception&) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
905 { |
29420
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
906 octave_interrupt_state = 1; |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
907 m_interpreter.recover_from_exception (); |
29527
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
908 m_parser->reset (); |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
909 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
910 // Required newline when the user does Ctrl+C at the prompt. |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
911 if (m_interpreter.interactive ()) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
912 octave_stdout << "\n"; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
913 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
914 catch (const index_exception& e) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
915 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
916 m_interpreter.recover_from_exception (); |
29527
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
917 m_parser->reset (); |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
918 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
919 std::cerr << "error: unhandled index exception: " |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
920 << e.message () << " -- trying to return to prompt" |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
921 << std::endl; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
922 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
923 catch (const execution_exception& ee) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
924 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
925 error_system& es = m_interpreter.get_error_system (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
926 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
927 es.save_exception (ee); |
29501
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29493
diff
changeset
|
928 es.display_exception (ee); |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
929 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
930 if (m_interpreter.interactive ()) |
29527
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
931 { |
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
932 m_interpreter.recover_from_exception (); |
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
933 m_parser->reset (); |
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
934 } |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
935 else |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
936 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
937 // We should exit with a nonzero status. |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
938 m_exit_status = 1; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
939 break; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
940 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
941 } |
29420
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
942 catch (const quit_debug_exception&) |
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
943 { |
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
944 octave_interrupt_state = 1; |
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
945 m_interpreter.recover_from_exception (); |
29527
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
946 m_parser->reset (); |
29503
3bfec185c9e2
experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents:
29501
diff
changeset
|
947 } |
3bfec185c9e2
experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents:
29501
diff
changeset
|
948 catch (const exit_exception& xe) |
3bfec185c9e2
experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents:
29501
diff
changeset
|
949 { |
3bfec185c9e2
experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents:
29501
diff
changeset
|
950 m_exit_status = xe.exit_status (); |
3bfec185c9e2
experimental command window widget with server loop
John W. Eaton <jwe@octave.org>
parents:
29501
diff
changeset
|
951 break; |
29420
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
952 } |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
953 catch (const std::bad_alloc&) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
954 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
955 m_interpreter.recover_from_exception (); |
29527
c7569a4224bd
undo previous change; reset parser in server loop
John W. Eaton <jwe@octave.org>
parents:
29526
diff
changeset
|
956 m_parser->reset (); |
29281
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
957 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
958 std::cerr << "error: out of memory -- trying to return to prompt" |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
959 << std::endl; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
960 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
961 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
962 while (m_exit_status == 0); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
963 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
964 if (m_exit_status == EOF) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
965 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
966 if (m_interpreter.interactive ()) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
967 octave_stdout << "\n"; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
968 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
969 m_exit_status = 0; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
970 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
971 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
972 return m_exit_status; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
973 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
974 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
975 void tree_evaluator::eval (std::shared_ptr<tree_statement_list>& stmt_list, |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
976 bool interactive) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
977 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
978 try |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
979 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
980 stmt_list->accept (*this); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
981 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
982 octave_quit (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
983 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
984 if (! interactive) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
985 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
986 bool quit = (m_returning || m_breaking); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
987 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
988 if (m_returning) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
989 m_returning = 0; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
990 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
991 if (m_breaking) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
992 m_breaking--; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
993 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
994 if (quit) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
995 return; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
996 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
997 |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
998 if (octave_completion_matches_called) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
999 octave_completion_matches_called = false; |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
1000 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
1001 catch (const quit_debug_exception&) |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
1002 { |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
1003 m_interpreter.recover_from_exception (); |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
1004 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
1005 } |
6dd456257d81
move some eval-related functions from interpreter to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
29253
diff
changeset
|
1006 |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1007 octave_value_list |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1008 tree_evaluator::eval_string (const std::string& eval_str, bool silent, |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1009 int& parse_status, int nargout) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1010 { |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1011 octave_value_list retval; |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1012 |
26512
4d6392c879d7
avoid double free of lexer on exit (bug #55347)
John W. Eaton <jwe@octave.org>
parents:
26509
diff
changeset
|
1013 parser eval_parser (eval_str, m_interpreter); |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1014 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1015 do |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1016 { |
26512
4d6392c879d7
avoid double free of lexer on exit (bug #55347)
John W. Eaton <jwe@octave.org>
parents:
26509
diff
changeset
|
1017 eval_parser.reset (); |
4d6392c879d7
avoid double free of lexer on exit (bug #55347)
John W. Eaton <jwe@octave.org>
parents:
26509
diff
changeset
|
1018 |
26662
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
1019 // If we are looking at |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
1020 // |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
1021 // val = eval ("code"); |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
1022 // |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
1023 // then don't allow code to be parsed as a command. |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
1024 |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
1025 if (nargout > 0) |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
1026 eval_parser.disallow_command_syntax (); |
05fc703b419a
update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents:
26661
diff
changeset
|
1027 |
26512
4d6392c879d7
avoid double free of lexer on exit (bug #55347)
John W. Eaton <jwe@octave.org>
parents:
26509
diff
changeset
|
1028 parse_status = eval_parser.run (); |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1029 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1030 if (parse_status == 0) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1031 { |
27504
7a31b25e3252
use shared_ptr for storing classdef and statement_list objects in parser
John W. Eaton <jwe@octave.org>
parents:
27480
diff
changeset
|
1032 std::shared_ptr<tree_statement_list> stmt_list |
7a31b25e3252
use shared_ptr for storing classdef and statement_list objects in parser
John W. Eaton <jwe@octave.org>
parents:
27480
diff
changeset
|
1033 = eval_parser.statement_list (); |
7a31b25e3252
use shared_ptr for storing classdef and statement_list objects in parser
John W. Eaton <jwe@octave.org>
parents:
27480
diff
changeset
|
1034 |
7a31b25e3252
use shared_ptr for storing classdef and statement_list objects in parser
John W. Eaton <jwe@octave.org>
parents:
27480
diff
changeset
|
1035 if (stmt_list) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1036 { |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1037 tree_statement *stmt = nullptr; |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1038 |
27504
7a31b25e3252
use shared_ptr for storing classdef and statement_list objects in parser
John W. Eaton <jwe@octave.org>
parents:
27480
diff
changeset
|
1039 if (stmt_list->length () == 1 |
7a31b25e3252
use shared_ptr for storing classdef and statement_list objects in parser
John W. Eaton <jwe@octave.org>
parents:
27480
diff
changeset
|
1040 && (stmt = stmt_list->front ()) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1041 && stmt->is_expression ()) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1042 { |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1043 tree_expression *expr = stmt->expression (); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1044 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1045 if (silent) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1046 expr->set_print_flag (false); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1047 |
27374
d171d356767b
don't apply std::move to temporary values
John W. Eaton <jwe@octave.org>
parents:
27373
diff
changeset
|
1048 retval = expr->evaluate_n (*this, nargout); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1049 |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1050 bool do_bind_ans = false; |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1051 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1052 if (expr->is_identifier ()) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1053 do_bind_ans = ! is_variable (expr); |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1054 else |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1055 do_bind_ans = ! expr->is_assignment_expression (); |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1056 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1057 if (do_bind_ans && ! retval.empty ()) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1058 bind_ans (retval(0), expr->print_result ()); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1059 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1060 if (nargout == 0) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1061 retval = octave_value_list (); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1062 } |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1063 else if (nargout == 0) |
27504
7a31b25e3252
use shared_ptr for storing classdef and statement_list objects in parser
John W. Eaton <jwe@octave.org>
parents:
27480
diff
changeset
|
1064 stmt_list->accept (*this); |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1065 else |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1066 error ("eval: invalid use of statement list"); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1067 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1068 if (returning () || breaking () || continuing ()) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1069 break; |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1070 } |
27510
5438a82a18fb
declare base_parser class data protected
John W. Eaton <jwe@octave.org>
parents:
27509
diff
changeset
|
1071 else if (eval_parser.at_end_of_input ()) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1072 break; |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1073 } |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1074 } |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1075 while (parse_status == 0); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1076 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1077 return retval; |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1078 } |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1079 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1080 octave_value tree_evaluator::eval_string (const std::string& eval_str, |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1081 bool silent, int& parse_status) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1082 { |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1083 octave_value retval; |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1084 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1085 octave_value_list tmp = eval_string (eval_str, silent, parse_status, 1); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1086 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1087 if (! tmp.empty ()) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1088 retval = tmp(0); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1089 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1090 return retval; |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1091 } |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1092 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1093 octave_value_list tree_evaluator::eval_string (const octave_value& arg, |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1094 bool silent, int& parse_status, |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1095 int nargout) |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1096 { |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1097 std::string s = arg.xstring_value ("eval: expecting string argument"); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1098 |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1099 return eval_string (s, silent, parse_status, nargout); |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1100 } |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1101 |
27019
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1102 octave_value_list tree_evaluator::eval (const std::string& try_code, |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1103 int nargout) |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1104 { |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1105 int parse_status = 0; |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1106 |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1107 return eval_string (try_code, nargout > 0, parse_status, nargout); |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1108 } |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1109 |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1110 octave_value_list tree_evaluator::eval (const std::string& try_code, |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1111 const std::string& catch_code, |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1112 int nargout) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1113 { |
27019
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1114 octave_value_list retval; |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1115 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27123
diff
changeset
|
1116 error_system& es = m_interpreter.get_error_system (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27123
diff
changeset
|
1117 |
27019
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1118 int parse_status = 0; |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1119 |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1120 bool execution_error = false; |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1121 |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1122 octave_value_list tmp; |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1123 |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1124 try |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1125 { |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1126 tmp = eval_string (try_code, nargout > 0, parse_status, nargout); |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1127 } |
27471 | 1128 catch (const execution_exception& ee) |
27019
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1129 { |
27471 | 1130 es.save_exception (ee); |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27472
diff
changeset
|
1131 m_interpreter.recover_from_exception (); |
27019
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1132 |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1133 execution_error = true; |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1134 } |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1135 |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1136 if (parse_status != 0 || execution_error) |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1137 { |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1138 tmp = eval_string (catch_code, nargout > 0, parse_status, nargout); |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1139 |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1140 retval = (nargout > 0) ? tmp : octave_value_list (); |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1141 } |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1142 else |
23600
db947ba52118
explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1143 { |
27019
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1144 if (nargout > 0) |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1145 retval = tmp; |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1146 |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1147 // FIXME: we should really be rethrowing whatever |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1148 // exception occurred, not just throwing an |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1149 // execution exception. |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1150 if (execution_error) |
27480
63b417917f5e
remove some obsolete signal handling functions
John W. Eaton <jwe@octave.org>
parents:
27474
diff
changeset
|
1151 throw execution_exception (); |
23600
db947ba52118
explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1152 } |
db947ba52118
explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
1153 |
27019
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1154 return retval; |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1155 } |
6cb675912f2b
move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27018
diff
changeset
|
1156 |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1157 octave_value_list tree_evaluator::evalin (const std::string& context, |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1158 const std::string& try_code, |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1159 int nargout) |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1160 { |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29527
diff
changeset
|
1161 unwind_action act ([=] (std::size_t frm) |
27373
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
1162 { |
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
1163 m_call_stack.restore_frame (frm); |
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
1164 }, m_call_stack.current_frame ()); |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1165 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1166 if (context == "caller") |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1167 m_call_stack.goto_caller_frame (); |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1168 else if (context == "base") |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1169 m_call_stack.goto_base_frame (); |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1170 else |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28727
diff
changeset
|
1171 error (R"(evalin: CONTEXT must be "caller" or "base")"); |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1172 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1173 int parse_status = 0; |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1174 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1175 return eval_string (try_code, nargout > 0, parse_status, nargout); |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1176 } |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1177 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1178 octave_value_list tree_evaluator::evalin (const std::string& context, |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1179 const std::string& try_code, |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1180 const std::string& catch_code, |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1181 int nargout) |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1182 { |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1183 octave_value_list retval; |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1184 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29527
diff
changeset
|
1185 unwind_action act1 ([=] (std::size_t frm) |
27373
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
1186 { |
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
1187 m_call_stack.restore_frame (frm); |
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
1188 }, m_call_stack.current_frame ()); |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1189 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1190 if (context == "caller") |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1191 m_call_stack.goto_caller_frame (); |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1192 else if (context == "base") |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1193 m_call_stack.goto_base_frame (); |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1194 else |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28727
diff
changeset
|
1195 error (R"(evalin: CONTEXT must be "caller" or "base")"); |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1196 |
27160
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27123
diff
changeset
|
1197 error_system& es = m_interpreter.get_error_system (); |
6b0c61a5a0f0
move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents:
27123
diff
changeset
|
1198 |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1199 int parse_status = 0; |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1200 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1201 bool execution_error = false; |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1202 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1203 octave_value_list tmp; |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1204 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1205 try |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1206 { |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1207 tmp = eval_string (try_code, nargout > 0, parse_status, nargout); |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1208 } |
27471 | 1209 catch (const execution_exception& ee) |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1210 { |
27471 | 1211 es.save_exception (ee); |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27472
diff
changeset
|
1212 m_interpreter.recover_from_exception (); |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1213 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1214 execution_error = true; |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1215 } |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1216 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1217 if (parse_status != 0 || execution_error) |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1218 { |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1219 tmp = eval_string (catch_code, nargout > 0, parse_status, nargout); |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1220 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1221 retval = (nargout > 0) ? tmp : octave_value_list (); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1222 } |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1223 else |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1224 { |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1225 if (nargout > 0) |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1226 retval = tmp; |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1227 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1228 // FIXME: we should really be rethrowing whatever |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1229 // exception occurred, not just throwing an |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1230 // execution exception. |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1231 if (execution_error) |
27480
63b417917f5e
remove some obsolete signal handling functions
John W. Eaton <jwe@octave.org>
parents:
27474
diff
changeset
|
1232 throw execution_exception (); |
27018
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1233 } |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1234 |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1235 return retval; |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1236 } |
a20ead51515d
move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27017
diff
changeset
|
1237 |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1238 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1239 tree_evaluator::visit_anon_fcn_handle (tree_anon_fcn_handle&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1240 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1241 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1242 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1243 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1244 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1245 tree_evaluator::visit_argument_list (tree_argument_list&) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1246 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1247 panic_impossible (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1248 } |
8845
5a6db6bd1a02
eigs.cc (Feigs): fix handling of sigma arg
John W. Eaton <jwe@octave.org>
parents:
8679
diff
changeset
|
1249 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1250 void |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1251 tree_evaluator::visit_arguments_block (tree_arguments_block&) |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1252 { |
29729
d0ce7260978d
also accept validation syntax for classdef properties
John W. Eaton <jwe@octave.org>
parents:
29724
diff
changeset
|
1253 warning ("function arguments validation blocks are not supported; INCORRECT RESULTS ARE POSSIBLE"); |
29724
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1254 } |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1255 |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1256 void |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1257 tree_evaluator::visit_args_block_attribute_list (tree_args_block_attribute_list&) |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1258 { |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1259 panic_impossible (); |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1260 } |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1261 |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1262 void |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1263 tree_evaluator::visit_args_block_validation_list (tree_args_block_validation_list&) |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1264 { |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1265 panic_impossible (); |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1266 } |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1267 |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1268 void |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1269 tree_evaluator::visit_arg_validation (tree_arg_validation&) |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1270 { |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1271 panic_impossible (); |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1272 } |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1273 |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1274 void |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1275 tree_evaluator::visit_arg_size_spec (tree_arg_size_spec&) |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1276 { |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1277 panic_impossible (); |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1278 } |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1279 |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1280 void |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1281 tree_evaluator::visit_arg_validation_fcns (tree_arg_validation_fcns&) |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1282 { |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1283 panic_impossible (); |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1284 } |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1285 |
c19f8cbe0fd5
initial implementation of parsing for arguments validaton block (bug #59405)
John W. Eaton <jwe@octave.org>
parents:
29657
diff
changeset
|
1286 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1287 tree_evaluator::visit_binary_expression (tree_binary_expression&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1288 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1289 panic_impossible (); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1290 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1291 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1292 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1293 tree_evaluator::visit_boolean_expression (tree_boolean_expression&) |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1294 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1295 panic_impossible (); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1296 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1297 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1298 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1299 tree_evaluator::visit_compound_binary_expression (tree_compound_binary_expression&) |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1300 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1301 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1302 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1303 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1304 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1305 tree_evaluator::visit_break_command (tree_break_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1306 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1307 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1308 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
1309 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
1310 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
1311 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1312 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1313 m_echo_file_pos = line + 1; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1314 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1315 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
1316 if (m_debug_mode) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1317 do_breakpoint (cmd.is_active_breakpoint (*this)); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1318 |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
1319 if (m_in_loop_command) |
25403
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
1320 m_breaking = 1; |
22785
9c6661004167
error if break statement is in script file separate from loop (bug #39168)
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1321 else |
9c6661004167
error if break statement is in script file separate from loop (bug #39168)
John W. Eaton <jwe@octave.org>
parents:
22755
diff
changeset
|
1322 error ("break must appear in a loop in the same file as loop command"); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1323 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1324 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1325 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1326 tree_evaluator::visit_colon_expression (tree_colon_expression&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1327 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1328 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1329 } |
10188
97ae300aa73a
improve implementation of break, continue, and return commands
John W. Eaton <jwe@octave.org>
parents:
10186
diff
changeset
|
1330 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1331 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1332 tree_evaluator::visit_continue_command (tree_continue_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1333 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1334 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1335 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
1336 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
1337 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
1338 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1339 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1340 m_echo_file_pos = line + 1; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1341 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
1342 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
1343 if (m_debug_mode) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
1344 do_breakpoint (cmd.is_active_breakpoint (*this)); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1345 |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
1346 if (m_in_loop_command) |
25403
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
1347 m_continuing = 1; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1348 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
1349 |
23705
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
1350 bool |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
1351 tree_evaluator::statement_printing_enabled (void) |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
1352 { |
25401
6f6479125d80
eliminate some globals from tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
25400
diff
changeset
|
1353 return ! (m_silent_functions && (m_statement_context == SC_FUNCTION |
6f6479125d80
eliminate some globals from tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
25400
diff
changeset
|
1354 || m_statement_context == SC_SCRIPT)); |
23705
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
1355 } |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
1356 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1357 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1358 tree_evaluator::reset_debug_state (void) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1359 { |
29306
0231189f630d
provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents:
29305
diff
changeset
|
1360 m_debug_mode = (m_bp_table.have_breakpoints () |
0231189f630d
provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents:
29305
diff
changeset
|
1361 || m_dbstep_flag != 0 |
0231189f630d
provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents:
29305
diff
changeset
|
1362 || m_break_on_next_stmt |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
1363 || in_debug_repl ()); |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
1364 } |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
1365 |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
1366 void |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
1367 tree_evaluator::reset_debug_state (bool mode) |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
1368 { |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
1369 m_debug_mode = mode; |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1370 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1371 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1372 void |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1373 tree_evaluator::enter_debugger (const std::string& prompt) |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1374 { |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27100
diff
changeset
|
1375 unwind_protect frame; |
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27100
diff
changeset
|
1376 |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
1377 frame.add (command_history::ignore_entries, |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
1378 command_history::ignoring_entries ()); |
27102
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27100
diff
changeset
|
1379 |
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27100
diff
changeset
|
1380 command_history::ignore_entries (false); |
84ff9953faa1
where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
27100
diff
changeset
|
1381 |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
1382 frame.add (&call_stack::restore_frame, &m_call_stack, |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
1383 m_call_stack.current_frame ()); |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1384 |
27286
52542cfcc7dc
always disable debug_on_error and debug_on_warning at debug prompt (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27282
diff
changeset
|
1385 // Don't allow errors or warnings at the debug prompt to push us |
52542cfcc7dc
always disable debug_on_error and debug_on_warning at debug prompt (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27282
diff
changeset
|
1386 // into deeper levels of debugging. |
52542cfcc7dc
always disable debug_on_error and debug_on_warning at debug prompt (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27282
diff
changeset
|
1387 |
52542cfcc7dc
always disable debug_on_error and debug_on_warning at debug prompt (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27282
diff
changeset
|
1388 error_system& es = m_interpreter.get_error_system (); |
52542cfcc7dc
always disable debug_on_error and debug_on_warning at debug prompt (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27282
diff
changeset
|
1389 |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
1390 frame.add (&error_system::set_debug_on_error, &es, es.debug_on_error ()); |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
1391 |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
1392 frame.add (&error_system::set_debug_on_warning, &es, |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
1393 es.debug_on_warning ()); |
27286
52542cfcc7dc
always disable debug_on_error and debug_on_warning at debug prompt (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27282
diff
changeset
|
1394 |
52542cfcc7dc
always disable debug_on_error and debug_on_warning at debug prompt (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27282
diff
changeset
|
1395 es.debug_on_error (false); |
52542cfcc7dc
always disable debug_on_error and debug_on_warning at debug prompt (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27282
diff
changeset
|
1396 es.debug_on_warning (false); |
52542cfcc7dc
always disable debug_on_error and debug_on_warning at debug prompt (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27282
diff
changeset
|
1397 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1398 // Go up to the nearest user code frame. |
27289
9dcbc0a449af
correctly set debug_frame when using "keyboard" (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27286
diff
changeset
|
1399 |
9dcbc0a449af
correctly set debug_frame when using "keyboard" (bug #56625)
John W. Eaton <jwe@octave.org>
parents:
27286
diff
changeset
|
1400 m_debug_frame = m_call_stack.dbupdown (0); |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1401 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1402 // FIXME: probably we just want to print one line, not the |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1403 // entire statement, which might span many lines... |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1404 // |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1405 // tree_print_code tpc (octave_stdout); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1406 // stmt.accept (tpc); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1407 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1408 debugger *dbgr = new debugger (m_interpreter, m_debugger_stack.size ()); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1409 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1410 m_debugger_stack.push (dbgr); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1411 |
28851
1ac5a76ae91d
use [=] capture default specification where possible
John W. Eaton <jwe@octave.org>
parents:
28806
diff
changeset
|
1412 frame.add ([=] (void) |
27222
f5b967060442
ensure debuger_stack is popped when exiting a debug level (bug #56150)
John W. Eaton <jwe@octave.org>
parents:
27212
diff
changeset
|
1413 { |
f5b967060442
ensure debuger_stack is popped when exiting a debug level (bug #56150)
John W. Eaton <jwe@octave.org>
parents:
27212
diff
changeset
|
1414 delete m_debugger_stack.top (); |
f5b967060442
ensure debuger_stack is popped when exiting a debug level (bug #56150)
John W. Eaton <jwe@octave.org>
parents:
27212
diff
changeset
|
1415 m_debugger_stack.pop (); |
29305
477f7d6c61e4
reset debug state when popping debugger stack
John W. Eaton <jwe@octave.org>
parents:
29294
diff
changeset
|
1416 reset_debug_state (); |
27222
f5b967060442
ensure debuger_stack is popped when exiting a debug level (bug #56150)
John W. Eaton <jwe@octave.org>
parents:
27212
diff
changeset
|
1417 }); |
f5b967060442
ensure debuger_stack is popped when exiting a debug level (bug #56150)
John W. Eaton <jwe@octave.org>
parents:
27212
diff
changeset
|
1418 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1419 dbgr->repl (prompt); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1420 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1421 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1422 void |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1423 tree_evaluator::keyboard (const std::string& prompt) |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1424 { |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1425 enter_debugger (prompt); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1426 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1427 |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1428 void |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1429 tree_evaluator::dbupdown (int n, bool verbose) |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1430 { |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
1431 m_debug_frame = m_call_stack.dbupdown (n, verbose); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
1432 } |
10186
095a1e670e68
make dbstep work with keyboard function
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
1433 |
23481
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1434 Matrix |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1435 tree_evaluator::ignored_fcn_outputs (void) const |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1436 { |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1437 Matrix retval; |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1438 |
27370
a2d3fa82b730
don't use stack to save and restore lvalue list value in evaluator (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27369
diff
changeset
|
1439 const std::list<octave_lvalue> *lvalues = m_lvalue_list; |
24349
4ced2bfd737e
deprecate defun_isargout functions
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1440 |
4ced2bfd737e
deprecate defun_isargout functions
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1441 if (! lvalues) |
23482
c9937e865768
make isargout work again for nested function calls
John W. Eaton <jwe@octave.org>
parents:
23481
diff
changeset
|
1442 return retval; |
c9937e865768
make isargout work again for nested function calls
John W. Eaton <jwe@octave.org>
parents:
23481
diff
changeset
|
1443 |
23481
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1444 octave_idx_type nbh = 0; |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1445 |
24349
4ced2bfd737e
deprecate defun_isargout functions
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1446 for (const auto& lval : *lvalues) |
23481
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1447 nbh += lval.is_black_hole (); |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1448 |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1449 if (nbh > 0) |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1450 { |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1451 retval.resize (1, nbh); |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1452 |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1453 octave_idx_type k = 0; |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1454 octave_idx_type l = 0; |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1455 |
24349
4ced2bfd737e
deprecate defun_isargout functions
John W. Eaton <jwe@octave.org>
parents:
24270
diff
changeset
|
1456 for (const auto& lval : *lvalues) |
23481
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1457 { |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1458 if (lval.is_black_hole ()) |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1459 retval(l++) = k+1; |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1460 |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1461 k += lval.numel (); |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1462 } |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1463 } |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1464 |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1465 return retval; |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1466 } |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
1467 |
28433
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1468 // If NAME is an operator (like "+", "-", ...), convert it to the |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1469 // corresponding function name ("plus", "minus", ...). |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1470 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1471 static std::string |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1472 get_operator_function_name (const std::string& name) |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1473 { |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1474 // Bow to the god of compatibility. |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1475 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1476 // FIXME: it seems ugly to put this here, but there is no single |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1477 // function in the parser that converts from the operator name to |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1478 // the corresponding function name. At least try to do it without N |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1479 // string compares. |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1480 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
1481 std::size_t len = name.length (); |
28433
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1482 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1483 if (len == 3 && name == ".**") |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1484 return "power"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1485 else if (len == 2) |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1486 { |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1487 if (name[0] == '.') |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1488 { |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1489 switch (name[1]) |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1490 { |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1491 case '\'': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1492 return "transpose"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1493 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1494 case '+': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1495 return "plus"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1496 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1497 case '-': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1498 return "minus"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1499 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1500 case '*': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1501 return "times"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1502 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1503 case '/': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1504 return "rdivide"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1505 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1506 case '^': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1507 return "power"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1508 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1509 case '\\': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1510 return "ldivide"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1511 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1512 default: |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1513 break; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1514 } |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1515 } |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1516 else if (name[1] == '=') |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1517 { |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1518 switch (name[0]) |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1519 { |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1520 case '<': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1521 return "le"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1522 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1523 case '=': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1524 return "eq"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1525 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1526 case '>': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1527 return "ge"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1528 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1529 case '~': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1530 case '!': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1531 return "ne"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1532 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1533 default: |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1534 break; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1535 } |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1536 } |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1537 else if (name == "**") |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1538 return "mpower"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1539 } |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1540 else if (len == 1) |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1541 { |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1542 switch (name[0]) |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1543 { |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1544 case '~': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1545 case '!': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1546 return "not"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1547 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1548 case '\'': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1549 return "ctranspose"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1550 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1551 case '+': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1552 return "plus"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1553 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1554 case '-': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1555 return "minus"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1556 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1557 case '*': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1558 return "mtimes"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1559 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1560 case '/': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1561 return "mrdivide"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1562 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1563 case '^': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1564 return "mpower"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1565 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1566 case '\\': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1567 return "mldivide"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1568 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1569 case '<': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1570 return "lt"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1571 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1572 case '>': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1573 return "gt"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1574 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1575 case '&': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1576 return "and"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1577 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1578 case '|': |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1579 return "or"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1580 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1581 default: |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1582 break; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1583 } |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1584 } |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1585 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1586 return name; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1587 } |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1588 |
28439
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1589 // Creates a function handle that takes into account the context, |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1590 // finding local, nested, private, or sub functions. |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1591 |
28433
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1592 octave_value |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1593 tree_evaluator::make_fcn_handle (const std::string& name) |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1594 { |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1595 octave_value retval; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1596 |
28439
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1597 // The str2func function can create a function handle with the name |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1598 // of an operator (for example, "+"). If so, it is converted to the |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1599 // name of the corresponding function ("+" -> "plus") and we create |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1600 // a simple function handle using that name. |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1601 |
28433
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1602 std::string fcn_name = get_operator_function_name (name); |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1603 |
28439
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1604 // If FCN_NAME is different from NAME, then NAME is an operator. As |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1605 // of version 2020a, Matlab apparently uses the function name |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1606 // corresponding to the operator to search for private and local |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1607 // functions in the current scope but not(!) nested functions. |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1608 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1609 bool name_is_operator = fcn_name != name; |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1610 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
1611 std::size_t pos = fcn_name.find ('.'); |
28439
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1612 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1613 if (pos != std::string::npos) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1614 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1615 // Recognize (some of? which ones?) the following cases |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1616 // and create something other than a simple function handle? |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1617 // Should we just be checking for the last two when the first |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1618 // element of the dot-separated list is an object? If so, then |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1619 // should this syntax be limited to a dot-separated list with |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1620 // exactly two elements? |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1621 // |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1622 // object . method |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1623 // object . static-method |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1624 // |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1625 // Code to do that duplicates some of simple_fcn_handle::call. |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1626 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1627 // Only accept expressions that contain one '.' separator. |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1628 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1629 // FIXME: The logic here is a bit complicated. Is there a good |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1630 // way to simplify it? |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1631 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1632 std::string meth_nm = fcn_name.substr (pos+1); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1633 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1634 if (meth_nm.find ('.') == std::string::npos) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1635 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1636 std::string obj_nm = fcn_name.substr (0, pos); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1637 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1638 // If obj_nm is an object in the current scope with a |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1639 // method named meth_nm, create a classsimple handle. |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1640 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1641 octave_value object = varval (obj_nm); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1642 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1643 if (object.is_defined () && object.is_classdef_object ()) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1644 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1645 octave_classdef *cdef = object.classdef_object_value (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1646 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1647 if (cdef) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1648 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1649 std::string class_nm = cdef->class_name (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1650 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1651 cdef_object cdef_obj = cdef->get_object (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1652 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1653 cdef_class cls = cdef_obj.get_class (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1654 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1655 cdef_method meth = cls.find_method (meth_nm); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1656 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1657 if (meth.ok ()) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1658 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1659 // If the method we found is static, create a |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1660 // new function name from the class name and |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1661 // method name and create a simple function |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1662 // handle below. Otherwise, create a class |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1663 // simple function handle. |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1664 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1665 if (meth.is_static ()) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1666 fcn_name = class_nm + '.' + meth_nm; |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1667 else |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1668 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1669 octave_value meth_fcn = meth.get_function (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1670 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1671 octave_fcn_handle *fh |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1672 = new octave_fcn_handle (object, meth_fcn, |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1673 class_nm, meth_nm); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1674 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1675 return octave_value (fh); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1676 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1677 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1678 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1679 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1680 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1681 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1682 // We didn't match anything above, so create handle to SIMPLE |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1683 // package function or static class method. Function resolution |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1684 // is performed when the handle is used. |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1685 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1686 return octave_value (new octave_fcn_handle (fcn_name)); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1687 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1688 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1689 // If the function name refers to a sub/local/private function or a |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1690 // class method/constructor, create scoped function handle that is |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1691 // bound to that function. Use the same precedence list as |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1692 // fcn_info::find but limit search to the following types of |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1693 // functions: |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1694 // |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1695 // nested functions (and subfunctions) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1696 // local functions in the current file |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1697 // private function |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1698 // class method |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1699 // |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1700 // For anything else we create a simple function handle that will be |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1701 // resolved dynamically in the scope where it is evaluated. |
28433
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1702 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1703 symbol_scope curr_scope = get_current_scope (); |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1704 |
28439
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1705 symbol_table& symtab = m_interpreter.get_symbol_table (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1706 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1707 if (curr_scope) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1708 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1709 octave_value ov_fcn |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1710 = symtab.find_scoped_function (fcn_name, curr_scope); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1711 |
29422
8b9e3f0bd06f
fix context link when creating handle to nested function
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1712 // If name is operator, we are in Fstr2func, so skip the stack |
8b9e3f0bd06f
fix context link when creating handle to nested function
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1713 // frame for that function. |
8b9e3f0bd06f
fix context link when creating handle to nested function
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1714 |
8b9e3f0bd06f
fix context link when creating handle to nested function
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1715 bool skip_first = name_is_operator; |
8b9e3f0bd06f
fix context link when creating handle to nested function
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1716 octave_function *curr_fcn = current_function (skip_first); |
8b9e3f0bd06f
fix context link when creating handle to nested function
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1717 |
28439
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1718 if (ov_fcn.is_defined ()) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1719 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1720 octave_function *fcn = ov_fcn.function_value (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1721 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1722 if (fcn->is_nested_function ()) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1723 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1724 if (! name_is_operator) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1725 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1726 // Get current stack frame and return handle to nested |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1727 // function. |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1728 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1729 std::shared_ptr<stack_frame> frame |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1730 = m_call_stack.get_current_stack_frame (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1731 |
29422
8b9e3f0bd06f
fix context link when creating handle to nested function
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1732 // If we are creating a handle to the current |
29832
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1733 // function or a handle to a sibling function (i.e., |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1734 // not a child of the current function), then use |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1735 // the calling stack frame as the context instead of |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1736 // the current stack frame. |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1737 |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1738 // FIXME: Do we need both checks here or is it |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1739 // sufficient to check that the parent of curr_fcn |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1740 // is the same as the parent of fcn? Is there any |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1741 // case where curr_fcn could be nullptr, or does |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1742 // that indicate an internal error of some kind? |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1743 |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1744 if (curr_fcn |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1745 && (fcn_name == curr_fcn->name () |
6d1224698acf
fix scoping issue for handles to sibling nested functions (bug #60845)
John W. Eaton <jwe@octave.org>
parents:
29656
diff
changeset
|
1746 || fcn->parent_fcn_name () == curr_fcn->parent_fcn_name ())) |
29422
8b9e3f0bd06f
fix context link when creating handle to nested function
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1747 frame = frame->access_link (); |
8b9e3f0bd06f
fix context link when creating handle to nested function
John W. Eaton <jwe@octave.org>
parents:
29358
diff
changeset
|
1748 |
28439
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1749 octave_fcn_handle *fh |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1750 = new octave_fcn_handle (ov_fcn, fcn_name, frame); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1751 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1752 return octave_value (fh); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1753 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1754 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1755 else if (fcn->is_subfunction () |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1756 /* || fcn->is_localfunction () */ |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1757 || fcn->is_private_function ()) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1758 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1759 // Create handle to SCOPED function (sub/local function |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1760 // or private function). |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1761 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1762 std::list<std::string> parentage = fcn->parent_fcn_names (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1763 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1764 octave_fcn_handle *fh |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1765 = new octave_fcn_handle (ov_fcn, fcn_name, parentage); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1766 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1767 return octave_value (fh); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1768 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1769 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1770 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1771 if (curr_fcn && (curr_fcn->is_class_method () |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1772 || curr_fcn->is_class_constructor ())) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1773 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1774 std::string dispatch_class = curr_fcn->dispatch_class (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1775 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1776 octave_value ov_meth |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1777 = symtab.find_method (fcn_name, dispatch_class); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1778 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1779 if (ov_meth.is_defined ()) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1780 { |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1781 octave_function *fcn = ov_meth.function_value (); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1782 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1783 // FIXME: do we need to check that it is a method of |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1784 // dispatch_class, or is it sufficient to just check |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1785 // that it is a method? |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1786 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1787 if (fcn->is_class_method ()) |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1788 { |
28481
1be719d8b375
fix dispatch error with classsimple function handle (bug #58572)
John W. Eaton <jwe@octave.org>
parents:
28439
diff
changeset
|
1789 // Create CLASSSIMPLE handle to method but don't |
1be719d8b375
fix dispatch error with classsimple function handle (bug #58572)
John W. Eaton <jwe@octave.org>
parents:
28439
diff
changeset
|
1790 // bind to the method. Lookup will be done later. |
28439
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1791 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1792 octave_fcn_handle *fh |
28481
1be719d8b375
fix dispatch error with classsimple function handle (bug #58572)
John W. Eaton <jwe@octave.org>
parents:
28439
diff
changeset
|
1793 = new octave_fcn_handle (dispatch_class, fcn_name); |
28439
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1794 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1795 return octave_value (fh); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1796 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1797 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1798 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1799 } |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1800 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1801 octave_value ov_fcn = symtab.find_user_function (fcn_name); |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1802 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1803 // Create handle to SIMPLE function. If the function is not found |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1804 // now, then we will look for it again when the handle is used. |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1805 |
e760fef2829c
refactor octave_fcn_handle class
John W. Eaton <jwe@octave.org>
parents:
28433
diff
changeset
|
1806 return octave_value (new octave_fcn_handle (ov_fcn, fcn_name)); |
28433
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1807 } |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1808 |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1809 /* |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1810 %!test |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1811 %! x = {".**", "power"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1812 %! ".'", "transpose"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1813 %! ".+", "plus"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1814 %! ".-", "minus"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1815 %! ".*", "times"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1816 %! "./", "rdivide"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1817 %! ".^", "power"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1818 %! ".\\", "ldivide"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1819 %! "<=", "le"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1820 %! "==", "eq"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1821 %! ">=", "ge"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1822 %! "!=", "ne"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1823 %! "~=", "ne"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1824 %! "**", "mpower"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1825 %! "~", "not"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1826 %! "!", "not"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1827 %! "\'", "ctranspose"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1828 %! "+", "plus"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1829 %! "-", "minus"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1830 %! "*", "mtimes"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1831 %! "/", "mrdivide"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1832 %! "^", "mpower"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1833 %! "\\", "mldivide"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1834 %! "<", "lt"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1835 %! ">", "gt"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1836 %! "&", "and"; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1837 %! "|", "or"}; |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1838 %! for i = 1:rows (x) |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1839 %! assert (functions (str2func (x{i,1})).function, x{i,2}); |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1840 %! endfor |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1841 */ |
d05a4194f1ad
move make_fcn_handle to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
28430
diff
changeset
|
1842 |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1843 octave_value |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1844 tree_evaluator::evaluate (tree_decl_elt *elt) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1845 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1846 // Do not allow functions to return null values. |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1847 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1848 tree_identifier *id = elt->ident (); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1849 |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
1850 return id ? id->evaluate (*this).storable_value () : octave_value (); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1851 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
1852 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1853 bool |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1854 tree_evaluator::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:
26512
diff
changeset
|
1855 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1856 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1857 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1858 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1859 return frame->is_variable (name); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1860 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1861 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1862 bool |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1863 tree_evaluator::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:
26512
diff
changeset
|
1864 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1865 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1866 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1867 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1868 return frame->is_local_variable (name); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1869 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1870 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1871 bool |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1872 tree_evaluator::is_variable (const tree_expression *expr) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1873 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1874 if (expr->is_identifier ()) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1875 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1876 const tree_identifier *id |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1877 = dynamic_cast<const tree_identifier *> (expr); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1878 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1879 if (id->is_black_hole ()) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1880 return false; |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1881 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1882 return is_variable (id->symbol ()); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1883 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1884 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1885 return false; |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1886 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1887 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1888 bool |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1889 tree_evaluator::is_defined (const tree_expression *expr) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1890 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1891 if (expr->is_identifier ()) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1892 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1893 const tree_identifier *id |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1894 = dynamic_cast<const tree_identifier *> (expr); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1895 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1896 return is_defined (id->symbol ()); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1897 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1898 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1899 return false; |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1900 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1901 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1902 bool |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1903 tree_evaluator::is_variable (const symbol_record& sym) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1904 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1905 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1906 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1907 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1908 return frame->is_variable (sym); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1909 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1910 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1911 bool |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1912 tree_evaluator::is_defined (const symbol_record& sym) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1913 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1914 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1915 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1916 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1917 return frame->is_defined (sym); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1918 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1919 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1920 bool tree_evaluator::is_global (const std::string& name) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1921 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1922 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1923 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1924 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1925 return frame->is_global (name); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1926 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1927 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1928 octave_value |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1929 tree_evaluator::varval (const symbol_record& sym) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1930 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1931 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1932 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1933 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1934 return frame->varval (sym); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1935 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1936 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1937 octave_value |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1938 tree_evaluator::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:
26512
diff
changeset
|
1939 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1940 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1941 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1942 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1943 return frame->varval (name); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1944 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1945 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1946 void tree_evaluator::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:
26512
diff
changeset
|
1947 const octave_value& value, |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1948 bool global) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1949 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1950 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1951 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1952 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1953 return frame->install_variable (name, value, global); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1954 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1955 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1956 octave_value |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1957 tree_evaluator::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:
26512
diff
changeset
|
1958 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1959 return m_call_stack.global_varval (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1960 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1961 |
27211
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
1962 octave_value& |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
1963 tree_evaluator::global_varref (const std::string& name) |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
1964 { |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
1965 return m_call_stack.global_varref (name); |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
1966 } |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
1967 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1968 void |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1969 tree_evaluator::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:
26512
diff
changeset
|
1970 const octave_value& val) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1971 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1972 m_call_stack.global_varref (name) = val; |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1973 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1974 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1975 octave_value |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1976 tree_evaluator::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:
26512
diff
changeset
|
1977 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1978 return m_call_stack.get_top_level_value (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1979 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1980 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1981 void |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1982 tree_evaluator::top_level_assign (const std::string& name, |
27932
b018f553fd85
maint: Use Octave coding conventions in libinterp/
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
1983 const octave_value& val) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1984 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1985 m_call_stack.set_top_level_value (name, val); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1986 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1987 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1988 void |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1989 tree_evaluator::assign (const std::string& name, const octave_value& val) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1990 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1991 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1992 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1993 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
1994 frame->assign (name, val); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1995 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1996 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
1997 void |
27014
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
1998 tree_evaluator::assignin (const std::string& context, |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
1999 const std::string& name, const octave_value& val) |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2000 { |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2001 // FIXME: Can this be done without an unwind-protect frame, simply |
27971
ec769a7ab9fb
fix more spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
27957
diff
changeset
|
2002 // by getting a reference to the caller or base stack frame and |
27014
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2003 // calling assign on that? |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2004 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29527
diff
changeset
|
2005 unwind_action act ([=] (std::size_t frm) |
27373
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
2006 { |
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
2007 m_call_stack.restore_frame (frm); |
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
2008 }, m_call_stack.current_frame ()); |
27014
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2009 |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2010 if (context == "caller") |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2011 m_call_stack.goto_caller_frame (); |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2012 else if (context == "base") |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2013 m_call_stack.goto_base_frame (); |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2014 else |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28727
diff
changeset
|
2015 error (R"(assignin: CONTEXT must be "caller" or "base")"); |
27014
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2016 |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2017 if (valid_identifier (name)) |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2018 { |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2019 // Put the check here so that we don't slow down assignments |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2020 // generally. Any that go through Octave's parser should have |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2021 // already been checked. |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2022 |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2023 if (iskeyword (name)) |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2024 error ("assignin: invalid assignment to keyword '%s'", |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2025 name.c_str ()); |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2026 |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2027 assign (name, val); |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2028 } |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2029 else |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2030 error ("assignin: invalid variable name '%s'", name.c_str ()); |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2031 } |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2032 |
daab1b311a98
move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents:
27005
diff
changeset
|
2033 void |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2034 tree_evaluator::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
|
2035 const std::string& context, |
27507
2d537a089e5d
eliminate warn_for argument for source_file and parse_fcn_file functions
John W. Eaton <jwe@octave.org>
parents:
27504
diff
changeset
|
2036 bool verbose, 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
|
2037 { |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2038 // Map from absolute name of script file to recursion level. We |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2039 // use a map instead of simply placing a limit on recursion in the |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2040 // source_file function so that two mutually recursive scripts |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2041 // written as |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2042 // |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2043 // foo1.m: |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2044 // ------ |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2045 // foo2 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2046 // |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2047 // foo2.m: |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2048 // ------ |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2049 // foo1 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2050 // |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2051 // and called with |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2052 // |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2053 // foo1 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2054 // |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2055 // (for example) will behave the same if they are written as |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2056 // |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2057 // foo1.m: |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2058 // ------ |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2059 // source ("foo2.m") |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2060 // |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2061 // foo2.m: |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2062 // ------ |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2063 // source ("foo1.m") |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2064 // |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2065 // and called with |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2066 // |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2067 // source ("foo1.m") |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2068 // |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2069 // (for example). |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2070 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2071 static std::map<std::string, int> source_call_depth; |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2072 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2073 std::string file_full_name |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2074 = sys::file_ops::tilde_expand (file_name); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2075 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
2076 std::size_t pos |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2077 = file_full_name.find_last_of (sys::file_ops::dir_sep_str ()); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2078 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2079 std::string dir_name = file_full_name.substr (0, pos); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2080 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2081 file_full_name = sys::env::make_absolute (file_full_name); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2082 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2083 unwind_protect frame; |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2084 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2085 if (source_call_depth.find (file_full_name) == source_call_depth.end ()) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2086 source_call_depth[file_full_name] = -1; |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2087 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2088 frame.protect_var (source_call_depth[file_full_name]); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2089 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2090 source_call_depth[file_full_name]++; |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2091 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2092 if (source_call_depth[file_full_name] >= max_recursion_depth ()) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2093 error ("max_recursion_depth exceeded"); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2094 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2095 if (! context.empty ()) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2096 { |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
2097 frame.add (&call_stack::restore_frame, &m_call_stack, |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
2098 m_call_stack.current_frame ()); |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2099 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2100 if (context == "caller") |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2101 m_call_stack.goto_caller_frame (); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2102 else if (context == "base") |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2103 m_call_stack.goto_base_frame (); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2104 else |
28752
810eb29fc227
maint: Use C++ raw string literals to simplify backlsashing.
Rik <rik@octave.org>
parents:
28727
diff
changeset
|
2105 error (R"(source: CONTEXT must be "caller" or "base")"); |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2106 } |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2107 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2108 // Find symbol name that would be in symbol_table, if it were loaded. |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
2109 std::size_t dir_end |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2110 = file_name.find_last_of (sys::file_ops::dir_sep_chars ()); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2111 dir_end = (dir_end == std::string::npos) ? 0 : dir_end + 1; |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2112 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
2113 std::size_t extension = file_name.find_last_of ('.'); |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2114 if (extension == std::string::npos) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2115 extension = file_name.length (); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2116 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2117 std::string symbol = file_name.substr (dir_end, extension - dir_end); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2118 std::string full_name = sys::canonicalize_file_name (file_name); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2119 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2120 // Check if this file is already loaded (or in the path) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2121 symbol_table& symtab = m_interpreter.get_symbol_table (); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2122 octave_value ov_code = symtab.fcn_table_find (symbol); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2123 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2124 // For compatibility with Matlab, accept both scripts and |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2125 // functions. |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2126 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2127 if (ov_code.is_user_code ()) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2128 { |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2129 octave_user_code *code = ov_code.user_code_value (); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2130 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2131 if (! code |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2132 || (sys::canonicalize_file_name (code->fcn_file_name ()) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2133 != full_name)) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2134 { |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2135 // Wrong file, so load it below. |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2136 ov_code = octave_value (); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2137 } |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2138 } |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2139 else |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2140 { |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2141 // Not a script, so load it below. |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2142 ov_code = octave_value (); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2143 } |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2144 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2145 // If no symbol of this name, or the symbol is for a different |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2146 // file, load. |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2147 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2148 if (ov_code.is_undefined ()) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2149 { |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2150 try |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2151 { |
27509
fefc780b4e2e
move parse_fcn_file from interpreter member function to parser friend
John W. Eaton <jwe@octave.org>
parents:
27507
diff
changeset
|
2152 ov_code = parse_fcn_file (m_interpreter, file_full_name, |
fefc780b4e2e
move parse_fcn_file from interpreter member function to parser friend
John W. Eaton <jwe@octave.org>
parents:
27507
diff
changeset
|
2153 file_name, dir_name, "", "", |
fefc780b4e2e
move parse_fcn_file from interpreter member function to parser friend
John W. Eaton <jwe@octave.org>
parents:
27507
diff
changeset
|
2154 require_file, true, false, false); |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2155 } |
29163
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
2156 catch (execution_exception& ee) |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2157 { |
29163
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
2158 error (ee, "source: error sourcing file '%s'", |
27017
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2159 file_full_name.c_str ()); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2160 } |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2161 } |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2162 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2163 // Return or error if we don't have a valid script or function. |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2164 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2165 if (ov_code.is_undefined ()) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2166 return; |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2167 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2168 if (! ov_code.is_user_code ()) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2169 error ("source: %s is not a script", full_name.c_str ()); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2170 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2171 if (verbose) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2172 { |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2173 octave_stdout << "executing commands from " << full_name << " ... "; |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2174 octave_stdout.flush (); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2175 } |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2176 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2177 octave_user_code *code = ov_code.user_code_value (); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2178 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2179 code->call (*this, 0, octave_value_list ()); |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2180 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2181 if (verbose) |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2182 octave_stdout << "done." << std::endl; |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2183 } |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2184 |
24b7e6326e26
move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents:
27016
diff
changeset
|
2185 void |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2186 tree_evaluator::set_auto_fcn_var (stack_frame::auto_var_type avt, |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2187 const octave_value& val) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2188 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2189 m_call_stack.set_auto_fcn_var (avt, val); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2190 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2191 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2192 octave_value |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2193 tree_evaluator::get_auto_fcn_var (stack_frame::auto_var_type avt) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2194 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2195 return m_call_stack.get_auto_fcn_var (avt); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2196 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2197 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
2198 void |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2199 tree_evaluator::define_parameter_list_from_arg_vector |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2200 (tree_parameter_list *param_list, const octave_value_list& args) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
2201 { |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2202 int i = -1; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2203 |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23435
diff
changeset
|
2204 for (tree_decl_elt *elt : *param_list) |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2205 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2206 i++; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2207 |
25383
d3a035528c9a
use reference to tree_evaluator instead of pointer
John W. Eaton <jwe@octave.org>
parents:
25382
diff
changeset
|
2208 octave_lvalue ref = elt->lvalue (*this); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2209 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2210 if (i < args.length ()) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2211 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2212 if (args(i).is_defined () && args(i).is_magic_colon ()) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2213 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2214 if (! eval_decl_elt (elt)) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2215 error ("no default value for argument %d", i+1); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2216 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2217 else |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2218 ref.define (args(i)); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2219 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2220 else |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2221 eval_decl_elt (elt); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2222 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
2223 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2224 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
2225 void |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2226 tree_evaluator::undefine_parameter_list (tree_parameter_list *param_list) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2227 { |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23435
diff
changeset
|
2228 for (tree_decl_elt *elt : *param_list) |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2229 { |
25383
d3a035528c9a
use reference to tree_evaluator instead of pointer
John W. Eaton <jwe@octave.org>
parents:
25382
diff
changeset
|
2230 octave_lvalue ref = elt->lvalue (*this); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2231 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2232 ref.assign (octave_value::op_asn_eq, octave_value ()); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2233 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2234 } |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29956
diff
changeset
|
2235 |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2236 // END is documented in op-kw-docs. |
29968
7aa4d8c049e5
eliminate obsolete DEFCONSTFUN and DEFCONSTMETHOD macros
John W. Eaton <jwe@octave.org>
parents:
29961
diff
changeset
|
2237 DEFMETHOD (end, interp, args, , |
7aa4d8c049e5
eliminate obsolete DEFCONSTFUN and DEFCONSTMETHOD macros
John W. Eaton <jwe@octave.org>
parents:
29961
diff
changeset
|
2238 doc: /* -*- texinfo -*- |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2239 @deftypefn {} {} end |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2240 Last element of an array or the end of any @code{for}, @code{parfor}, |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2241 @code{if}, @code{do}, @code{while}, @code{function}, @code{switch}, |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2242 @code{try}, or @code{unwind_protect} block. |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2243 |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2244 As an index of an array, the magic index @qcode{"end"} refers to the |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2245 last valid entry in an indexing operation. |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2246 |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2247 Example: |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2248 |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2249 @example |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2250 @group |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2251 @var{x} = [ 1 2 3; 4 5 6 ]; |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2252 @var{x}(1,end) |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2253 @result{} 3 |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2254 @var{x}(end,1) |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2255 @result{} 4 |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2256 @var{x}(end,end) |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2257 @result{} 6 |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2258 @end group |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2259 @end example |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2260 @seealso{for, parfor, if, do, while, function, switch, try, unwind_protect} |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2261 @end deftypefn */) |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2262 { |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29960
diff
changeset
|
2263 tree_evaluator& tw = interp.get_evaluator (); |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2264 |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2265 return tw.evaluate_end_expression (args); |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2266 } |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2267 |
27100
b453b586da16
improve error message when indexing undefined object with "end" (bug #33637)
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2268 /* |
28617
0bac488f17fa
throw error if 'end' is applied to undefined symbol (bug #58830)
John W. Eaton <jwe@octave.org>
parents:
28560
diff
changeset
|
2269 %!test <*58830> |
0bac488f17fa
throw error if 'end' is applied to undefined symbol (bug #58830)
John W. Eaton <jwe@octave.org>
parents:
28560
diff
changeset
|
2270 %! fail ("__undef_sym__ (end)", |
0bac488f17fa
throw error if 'end' is applied to undefined symbol (bug #58830)
John W. Eaton <jwe@octave.org>
parents:
28560
diff
changeset
|
2271 %! "invalid use of 'end': may only be used to index existing value"); |
28696
2a47fa406ed8
allow 'end' indexing to work for nested function calls (bug #58953)
John W. Eaton <jwe@octave.org>
parents:
28617
diff
changeset
|
2272 |
29493
de40b395b9c3
update bug status in test suite
John W. Eaton <jwe@octave.org>
parents:
29478
diff
changeset
|
2273 %!test <*58953> |
28696
2a47fa406ed8
allow 'end' indexing to work for nested function calls (bug #58953)
John W. Eaton <jwe@octave.org>
parents:
28617
diff
changeset
|
2274 %! x = 1:10; |
2a47fa406ed8
allow 'end' indexing to work for nested function calls (bug #58953)
John W. Eaton <jwe@octave.org>
parents:
28617
diff
changeset
|
2275 %! assert (x(end), 10); |
2a47fa406ed8
allow 'end' indexing to work for nested function calls (bug #58953)
John W. Eaton <jwe@octave.org>
parents:
28617
diff
changeset
|
2276 %! assert (x(minus (end, 1)), 9); |
2a47fa406ed8
allow 'end' indexing to work for nested function calls (bug #58953)
John W. Eaton <jwe@octave.org>
parents:
28617
diff
changeset
|
2277 %! assert (x(minus (minus (end, 1), 1)), 8); |
27100
b453b586da16
improve error message when indexing undefined object with "end" (bug #33637)
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2278 */ |
b453b586da16
improve error message when indexing undefined object with "end" (bug #33637)
John W. Eaton <jwe@octave.org>
parents:
27037
diff
changeset
|
2279 |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2280 octave_value_list |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2281 tree_evaluator::convert_to_const_vector (tree_argument_list *args) |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2282 { |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2283 std::list<octave_value> arg_vals; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2284 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2285 for (auto elt : *args) |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2286 { |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2287 // FIXME: is it possible for elt to be invalid? |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2288 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2289 if (! elt) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2290 break; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2291 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2292 octave_value tmp = elt->evaluate (*this); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2293 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2294 if (tmp.is_cs_list ()) |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2295 { |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2296 octave_value_list tmp_ovl = tmp.list_value (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2297 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2298 for (octave_idx_type i = 0; i < tmp_ovl.length (); i++) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2299 arg_vals.push_back (tmp_ovl(i)); |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2300 } |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2301 else if (tmp.is_defined ()) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2302 arg_vals.push_back (tmp); |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2303 } |
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2304 |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
2305 return octave_value_list (arg_vals); |
25382
749d9e858553
move convert_to_const_vector from tree_argument_list to tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25381
diff
changeset
|
2306 } |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2307 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2308 octave_value_list |
23916
85488effc0ff
refactor function value return code
John W. Eaton <jwe@octave.org>
parents:
23913
diff
changeset
|
2309 tree_evaluator::convert_return_list_to_const_vector |
28540
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2310 (tree_parameter_list *ret_list, int nargout, const Matrix& ignored_outputs, |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2311 const Cell& varargout) |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2312 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2313 octave_idx_type vlen = varargout.numel (); |
23916
85488effc0ff
refactor function value return code
John W. Eaton <jwe@octave.org>
parents:
23913
diff
changeset
|
2314 int len = ret_list->length (); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2315 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2316 // Special case. Will do a shallow copy. |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2317 if (len == 0) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2318 return varargout; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2319 else |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2320 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2321 int i = 0; |
28540
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2322 int k = 0; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2323 int num_ignored = ignored_outputs.numel (); |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2324 int ignored = num_ignored > 0 ? ignored_outputs(k) - 1 : -1; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2325 |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2326 if (nargout <= len) |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2327 { |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2328 int nout = nargout > 0 ? nargout : 1; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2329 octave_value_list retval (nout); |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2330 |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2331 for (tree_decl_elt *elt : *ret_list) |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2332 { |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2333 if (nargout == 0 && ! is_defined (elt->ident ())) |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2334 break; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2335 |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2336 if (ignored >= 0 && i == ignored) |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2337 { |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2338 i++; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2339 k++; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2340 ignored = k < num_ignored ? ignored_outputs(k) - 1 : -1; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2341 } |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2342 else |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2343 retval(i++) = evaluate (elt); |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2344 |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2345 if (i == nout) |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2346 break; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2347 } |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2348 |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2349 return retval; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2350 } |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2351 else |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2352 { |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2353 octave_value_list retval (len + vlen); |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2354 |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2355 for (tree_decl_elt *elt : *ret_list) |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2356 { |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2357 if (ignored >= 0 && i == ignored) |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2358 { |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2359 i++; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2360 k++; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2361 ignored = k < num_ignored ? ignored_outputs(k) - 1 : -1; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2362 } |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2363 else |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2364 retval(i++) = evaluate (elt); |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2365 } |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2366 |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2367 for (octave_idx_type j = 0; j < vlen; j++) |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2368 retval(i++) = varargout(j); |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2369 |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2370 return retval; |
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
2371 } |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2372 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2373 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2374 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2375 bool |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2376 tree_evaluator::eval_decl_elt (tree_decl_elt *elt) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2377 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2378 bool retval = false; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2379 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2380 tree_identifier *id = elt->ident (); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2381 tree_expression *expr = elt->expression (); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2382 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2383 if (id && expr) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2384 { |
25383
d3a035528c9a
use reference to tree_evaluator instead of pointer
John W. Eaton <jwe@octave.org>
parents:
25382
diff
changeset
|
2385 octave_lvalue ult = id->lvalue (*this); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2386 |
27374
d171d356767b
don't apply std::move to temporary values
John W. Eaton <jwe@octave.org>
parents:
27373
diff
changeset
|
2387 octave_value init_val = expr->evaluate (*this); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2388 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2389 ult.assign (octave_value::op_asn_eq, init_val); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2390 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2391 retval = true; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2392 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2393 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2394 return retval; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2395 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2396 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2397 bool |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2398 tree_evaluator::switch_case_label_matches (tree_switch_case *expr, |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2399 const octave_value& val) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
2400 { |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2401 tree_expression *label = expr->case_label (); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2402 |
27374
d171d356767b
don't apply std::move to temporary values
John W. Eaton <jwe@octave.org>
parents:
27373
diff
changeset
|
2403 octave_value label_value = label->evaluate (*this); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2404 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2405 if (label_value.is_defined ()) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2406 { |
23576
00e518162fda
maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents:
23563
diff
changeset
|
2407 if (label_value.iscell ()) |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2408 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2409 Cell cell (label_value.cell_value ()); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2410 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2411 for (octave_idx_type i = 0; i < cell.rows (); i++) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2412 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2413 for (octave_idx_type j = 0; j < cell.columns (); j++) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2414 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2415 bool match = val.is_equal (cell(i,j)); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2416 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2417 if (match) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2418 return true; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2419 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2420 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2421 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2422 else |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2423 return val.is_equal (label_value); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2424 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2425 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2426 return false; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2427 } |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2428 |
27210
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2429 void tree_evaluator::push_stack_frame (const symbol_scope& scope) |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2430 { |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2431 m_call_stack.push (scope); |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2432 } |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2433 |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2434 void tree_evaluator::push_stack_frame (octave_user_function *fcn, |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2435 const std::shared_ptr<stack_frame>& closure_frames) |
27210
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2436 { |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
2437 m_call_stack.push (fcn, closure_frames); |
27210
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2438 } |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2439 |
28430
5bfa8e018704
store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
2440 void tree_evaluator::push_stack_frame (octave_user_function *fcn, |
29477
34d06c73b48d
hold references to closure frames in anon functions if needed (bug #60237)
John W. Eaton <jwe@octave.org>
parents:
29475
diff
changeset
|
2441 const stack_frame::local_vars_map& local_vars, |
34d06c73b48d
hold references to closure frames in anon functions if needed (bug #60237)
John W. Eaton <jwe@octave.org>
parents:
29475
diff
changeset
|
2442 const std::shared_ptr<stack_frame>& closure_frames) |
28430
5bfa8e018704
store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
2443 { |
29477
34d06c73b48d
hold references to closure frames in anon functions if needed (bug #60237)
John W. Eaton <jwe@octave.org>
parents:
29475
diff
changeset
|
2444 m_call_stack.push (fcn, local_vars, closure_frames); |
28430
5bfa8e018704
store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
2445 } |
5bfa8e018704
store local init vars for anonymous functions in handle, not function object
John W. Eaton <jwe@octave.org>
parents:
28429
diff
changeset
|
2446 |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
2447 void tree_evaluator::push_stack_frame (octave_user_script *script) |
27210
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2448 { |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
2449 m_call_stack.push (script); |
27210
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2450 } |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2451 |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2452 void tree_evaluator::push_stack_frame (octave_function *fcn) |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2453 { |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2454 m_call_stack.push (fcn); |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2455 } |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2456 |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2457 void tree_evaluator::pop_stack_frame (void) |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2458 { |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2459 m_call_stack.pop (); |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2460 } |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2461 |
27200
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2462 int tree_evaluator::current_line (void) const |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2463 { |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2464 return m_call_stack.current_line (); |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2465 } |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2466 |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2467 int tree_evaluator::current_column (void) const |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2468 { |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2469 return m_call_stack.current_column (); |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2470 } |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2471 |
27205
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2472 int tree_evaluator::debug_user_code_line (void) const |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2473 { |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2474 return m_call_stack.debug_user_code_line (); |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2475 } |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2476 |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2477 int tree_evaluator::debug_user_code_column (void) const |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2478 { |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2479 return m_call_stack.debug_user_code_column (); |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2480 } |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2481 |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2482 void tree_evaluator::debug_where (std::ostream& os) const |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2483 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2484 std::shared_ptr<stack_frame> frm = m_call_stack.current_user_frame (); |
27205
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2485 |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2486 frm->display_stopped_in_message (os); |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2487 } |
6648d1ae05fe
eliminate direct access to call stack in debug functions
John W. Eaton <jwe@octave.org>
parents:
27204
diff
changeset
|
2488 |
27200
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2489 octave_user_code * tree_evaluator::current_user_code (void) const |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2490 { |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2491 return m_call_stack.current_user_code (); |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2492 } |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2493 |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
2494 unwind_protect * tree_evaluator::curr_fcn_unwind_protect_frame (void) |
27204
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27203
diff
changeset
|
2495 { |
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27203
diff
changeset
|
2496 return m_call_stack.curr_fcn_unwind_protect_frame (); |
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27203
diff
changeset
|
2497 } |
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27203
diff
changeset
|
2498 |
27202
23962b243bad
eliminate direct access to call stack in help functions
John W. Eaton <jwe@octave.org>
parents:
27201
diff
changeset
|
2499 octave_user_code * tree_evaluator::debug_user_code (void) const |
23962b243bad
eliminate direct access to call stack in help functions
John W. Eaton <jwe@octave.org>
parents:
27201
diff
changeset
|
2500 { |
23962b243bad
eliminate direct access to call stack in help functions
John W. Eaton <jwe@octave.org>
parents:
27201
diff
changeset
|
2501 return m_call_stack.debug_user_code (); |
23962b243bad
eliminate direct access to call stack in help functions
John W. Eaton <jwe@octave.org>
parents:
27201
diff
changeset
|
2502 } |
23962b243bad
eliminate direct access to call stack in help functions
John W. Eaton <jwe@octave.org>
parents:
27201
diff
changeset
|
2503 |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2504 octave_function * tree_evaluator::current_function (bool skip_first) const |
27201
bd49997051ef
eliminate direct access to call stack in defun functions
John W. Eaton <jwe@octave.org>
parents:
27200
diff
changeset
|
2505 { |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2506 return m_call_stack.current_function (skip_first); |
27201
bd49997051ef
eliminate direct access to call stack in defun functions
John W. Eaton <jwe@octave.org>
parents:
27200
diff
changeset
|
2507 } |
bd49997051ef
eliminate direct access to call stack in defun functions
John W. Eaton <jwe@octave.org>
parents:
27200
diff
changeset
|
2508 |
27204
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27203
diff
changeset
|
2509 octave_function * tree_evaluator::caller_function (void) const |
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27203
diff
changeset
|
2510 { |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2511 return m_call_stack.current_function (true); |
27204
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27203
diff
changeset
|
2512 } |
9a3e92d02a03
eliminate direct access to call stack in variables functions
John W. Eaton <jwe@octave.org>
parents:
27203
diff
changeset
|
2513 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
2514 bool tree_evaluator::goto_frame (std::size_t n, bool verbose) |
27200
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2515 { |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2516 return m_call_stack.goto_frame (n, verbose); |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2517 } |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2518 |
27206
4e4a9d7b436e
eliminate direct access to call stack in mex functions
John W. Eaton <jwe@octave.org>
parents:
27205
diff
changeset
|
2519 void tree_evaluator::goto_caller_frame (void) |
4e4a9d7b436e
eliminate direct access to call stack in mex functions
John W. Eaton <jwe@octave.org>
parents:
27205
diff
changeset
|
2520 { |
4e4a9d7b436e
eliminate direct access to call stack in mex functions
John W. Eaton <jwe@octave.org>
parents:
27205
diff
changeset
|
2521 m_call_stack.goto_caller_frame (); |
4e4a9d7b436e
eliminate direct access to call stack in mex functions
John W. Eaton <jwe@octave.org>
parents:
27205
diff
changeset
|
2522 } |
4e4a9d7b436e
eliminate direct access to call stack in mex functions
John W. Eaton <jwe@octave.org>
parents:
27205
diff
changeset
|
2523 |
4e4a9d7b436e
eliminate direct access to call stack in mex functions
John W. Eaton <jwe@octave.org>
parents:
27205
diff
changeset
|
2524 void tree_evaluator::goto_base_frame (void) |
4e4a9d7b436e
eliminate direct access to call stack in mex functions
John W. Eaton <jwe@octave.org>
parents:
27205
diff
changeset
|
2525 { |
4e4a9d7b436e
eliminate direct access to call stack in mex functions
John W. Eaton <jwe@octave.org>
parents:
27205
diff
changeset
|
2526 m_call_stack.goto_base_frame (); |
4e4a9d7b436e
eliminate direct access to call stack in mex functions
John W. Eaton <jwe@octave.org>
parents:
27205
diff
changeset
|
2527 } |
4e4a9d7b436e
eliminate direct access to call stack in mex functions
John W. Eaton <jwe@octave.org>
parents:
27205
diff
changeset
|
2528 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
2529 void tree_evaluator::restore_frame (std::size_t n) |
27200
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2530 { |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2531 return m_call_stack.restore_frame (n); |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2532 } |
dc1edf932248
eliminate direct access to call_stack in input functions
John W. Eaton <jwe@octave.org>
parents:
27199
diff
changeset
|
2533 |
27208
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27206
diff
changeset
|
2534 std::string tree_evaluator::get_dispatch_class (void) const |
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27206
diff
changeset
|
2535 { |
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27206
diff
changeset
|
2536 return m_call_stack.get_dispatch_class (); |
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27206
diff
changeset
|
2537 } |
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27206
diff
changeset
|
2538 |
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27206
diff
changeset
|
2539 void tree_evaluator::set_dispatch_class (const std::string& class_name) |
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27206
diff
changeset
|
2540 { |
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27206
diff
changeset
|
2541 m_call_stack.set_dispatch_class (class_name); |
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27206
diff
changeset
|
2542 } |
5b40cf4896f0
eliminate some direct access to call stack in classdef and inline objects
John W. Eaton <jwe@octave.org>
parents:
27206
diff
changeset
|
2543 |
27210
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2544 bool |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2545 tree_evaluator::is_class_method_executing (std::string& dclass) const |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2546 { |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2547 return m_call_stack.is_class_method_executing (dclass); |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2548 } |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2549 |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2550 bool |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2551 tree_evaluator::is_class_constructor_executing (std::string& dclass) const |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2552 { |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2553 return m_call_stack.is_class_constructor_executing (dclass); |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2554 } |
bd684aad1821
eliminate some direct access to call stack in legacy class and function objects
John W. Eaton <jwe@octave.org>
parents:
27208
diff
changeset
|
2555 |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2556 std::list<std::shared_ptr<stack_frame>> |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2557 tree_evaluator::backtrace_frames (octave_idx_type& curr_user_frame) const |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2558 { |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2559 return m_call_stack.backtrace_frames (curr_user_frame); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2560 } |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2561 |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2562 std::list<std::shared_ptr<stack_frame>> |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2563 tree_evaluator::backtrace_frames (void) const |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2564 { |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2565 return m_call_stack.backtrace_frames (); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2566 } |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2567 |
27471 | 2568 std::list<frame_info> |
2569 tree_evaluator::backtrace_info (octave_idx_type& curr_user_frame, | |
2570 bool print_subfn) const | |
2571 { | |
2572 return m_call_stack.backtrace_info (curr_user_frame, print_subfn); | |
2573 } | |
2574 | |
2575 std::list<frame_info> tree_evaluator::backtrace_info (void) const | |
2576 { | |
2577 return m_call_stack.backtrace_info (); | |
2578 } | |
2579 | |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2580 octave_map |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2581 tree_evaluator::backtrace (octave_idx_type& curr_user_frame, |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2582 bool print_subfn) const |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2583 { |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2584 return m_call_stack.backtrace (curr_user_frame, print_subfn); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2585 } |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2586 |
27471 | 2587 octave_map tree_evaluator::backtrace (void) const |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2588 { |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2589 return m_call_stack.backtrace (); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2590 } |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2591 |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2592 octave_map tree_evaluator::empty_backtrace (void) const |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2593 { |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2594 return m_call_stack.empty_backtrace (); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2595 } |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2596 |
27471 | 2597 std::string tree_evaluator::backtrace_message (void) const |
2598 { | |
2599 std::list<frame_info> frames = backtrace_info (); | |
2600 | |
2601 std::ostringstream buf; | |
2602 | |
2603 for (const auto& frm : frames) | |
2604 { | |
2605 buf << " " << frm.fcn_name (); | |
2606 | |
2607 int line = frm.line (); | |
2608 | |
2609 if (line > 0) | |
2610 { | |
2611 buf << " at line " << line; | |
2612 | |
2613 int column = frm.column (); | |
2614 | |
2615 if (column > 0) | |
2616 buf << " column " << column; | |
2617 | |
2618 buf << "\n"; | |
2619 } | |
2620 } | |
2621 | |
2622 return buf.str (); | |
2623 } | |
2624 | |
27001
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2625 void tree_evaluator::push_dummy_scope (const std::string& name) |
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2626 { |
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2627 symbol_scope dummy_scope (name + "$dummy"); |
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2628 |
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2629 m_call_stack.push (dummy_scope); |
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2630 } |
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2631 |
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2632 void tree_evaluator::pop_scope (void) |
24037
21915520ac7b
use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents:
23916
diff
changeset
|
2633 { |
27001
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2634 m_call_stack.pop (); |
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2635 } |
3cea1cfb37d3
move toward limiting direct access of call stack
John W. Eaton <jwe@octave.org>
parents:
26975
diff
changeset
|
2636 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2637 symbol_scope tree_evaluator::get_top_scope (void) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2638 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2639 return m_call_stack.top_scope (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2640 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2641 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2642 symbol_scope tree_evaluator::get_current_scope (void) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2643 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2644 return m_call_stack.current_scope (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2645 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2646 |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2647 void tree_evaluator::mlock (bool skip_first) const |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2648 { |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2649 octave_function *fcn = m_call_stack.current_function (skip_first); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2650 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2651 if (! fcn) |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2652 error ("mlock: invalid use outside a function"); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2653 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2654 if (fcn->is_builtin_function ()) |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2655 { |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2656 warning ("mlock: locking built-in function has no effect"); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2657 return; |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2658 } |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2659 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2660 fcn->lock (); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2661 } |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2662 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2663 void tree_evaluator::munlock (bool skip_first) const |
27212
f84c5528e932
eliminate direct access to call stack in interpreter::mlock
John W. Eaton <jwe@octave.org>
parents:
27211
diff
changeset
|
2664 { |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2665 octave_function *fcn = m_call_stack.current_function (skip_first); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2666 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2667 if (! fcn) |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2668 error ("munlock: invalid use outside a function"); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2669 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2670 if (fcn->is_builtin_function ()) |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2671 { |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2672 warning ("munlock: unlocking built-in function has no effect"); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2673 return; |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2674 } |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2675 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2676 fcn->unlock (); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2677 } |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2678 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2679 bool tree_evaluator::mislocked (bool skip_first) const |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2680 { |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2681 octave_function *fcn = m_call_stack.current_function (skip_first); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2682 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2683 if (! fcn) |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2684 error ("mislocked: invalid use outside a function"); |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2685 |
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2686 return fcn->islocked (); |
27212
f84c5528e932
eliminate direct access to call stack in interpreter::mlock
John W. Eaton <jwe@octave.org>
parents:
27211
diff
changeset
|
2687 } |
f84c5528e932
eliminate direct access to call stack in interpreter::mlock
John W. Eaton <jwe@octave.org>
parents:
27211
diff
changeset
|
2688 |
27211
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2689 octave_value |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2690 tree_evaluator::max_stack_depth (const octave_value_list& args, int nargout) |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2691 { |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2692 return m_call_stack.max_stack_depth (args, nargout); |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2693 } |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2694 |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2695 void tree_evaluator::display_call_stack (void) const |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2696 { |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2697 m_call_stack.display (); |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2698 } |
8c27802a76c4
store reference to evaluator instead of call stack in stack frame
John W. Eaton <jwe@octave.org>
parents:
27210
diff
changeset
|
2699 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2700 octave_value tree_evaluator::find (const std::string& name) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2701 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2702 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2703 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2704 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2705 octave_value val = frame->varval (name); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2706 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2707 if (val.is_defined ()) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2708 return val; |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2709 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2710 // Subfunction. I think it only makes sense to check for |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2711 // subfunctions if we are currently executing a function defined |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2712 // from a .m file. |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2713 |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2714 octave_value fcn = frame->find_subfunction (name); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2715 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2716 if (fcn.is_defined ()) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2717 return fcn; |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2718 |
24037
21915520ac7b
use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents:
23916
diff
changeset
|
2719 symbol_table& symtab = m_interpreter.get_symbol_table (); |
21915520ac7b
use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents:
23916
diff
changeset
|
2720 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2721 return symtab.fcn_table_find (name, ovl ()); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2722 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2723 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2724 void tree_evaluator::clear_objects (void) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2725 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2726 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2727 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2728 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2729 frame->clear_objects (); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2730 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2731 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2732 void tree_evaluator::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:
26512
diff
changeset
|
2733 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2734 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2735 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2736 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2737 frame->clear_variable (name); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2738 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2739 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2740 void tree_evaluator::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:
26512
diff
changeset
|
2741 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2742 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2743 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2744 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2745 frame->clear_variable_pattern (pattern); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2746 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2747 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2748 void tree_evaluator::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:
26512
diff
changeset
|
2749 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2750 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2751 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2752 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2753 frame->clear_variable_regexp (pattern); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2754 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2755 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2756 void tree_evaluator::clear_variables (void) |
24037
21915520ac7b
use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents:
23916
diff
changeset
|
2757 { |
28426
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2758 std::shared_ptr<stack_frame> frame |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2759 = m_call_stack.get_current_stack_frame (); |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2760 |
9a3deb17b4ea
use shared_ptr for stack frames in call stack and for accesss and static links
John W. Eaton <jwe@octave.org>
parents:
28256
diff
changeset
|
2761 frame->clear_variables (); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2762 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2763 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2764 void tree_evaluator::clear_global_variable (const std::string& name) |
24037
21915520ac7b
use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents:
23916
diff
changeset
|
2765 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2766 m_call_stack.clear_global_variable (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2767 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2768 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2769 void |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2770 tree_evaluator::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:
26512
diff
changeset
|
2771 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2772 m_call_stack.clear_global_variable_pattern (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2773 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2774 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2775 void tree_evaluator::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:
26512
diff
changeset
|
2776 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2777 m_call_stack.clear_global_variable_regexp (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2778 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2779 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2780 void tree_evaluator::clear_global_variables (void) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2781 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2782 m_call_stack.clear_global_variables (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2783 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2784 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2785 void tree_evaluator::clear_all (bool force) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2786 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2787 // FIXME: should this also clear objects? |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2788 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2789 clear_variables (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2790 clear_global_variables (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2791 |
24037
21915520ac7b
use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents:
23916
diff
changeset
|
2792 symbol_table& symtab = m_interpreter.get_symbol_table (); |
21915520ac7b
use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents:
23916
diff
changeset
|
2793 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2794 symtab.clear_functions (force); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2795 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2796 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2797 void tree_evaluator::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:
26512
diff
changeset
|
2798 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2799 // FIXME: are we supposed to do both here? |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2800 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2801 clear_variable (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2802 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2803 symbol_table& symtab = m_interpreter.get_symbol_table (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2804 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2805 symtab.clear_function (name); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2806 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2807 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2808 void tree_evaluator::clear_symbol_pattern (const std::string& pattern) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2809 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2810 // FIXME: are we supposed to do both here? |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2811 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2812 clear_variable_pattern (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2813 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2814 symbol_table& symtab = m_interpreter.get_symbol_table (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2815 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2816 symtab.clear_function_pattern (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2817 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2818 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2819 void tree_evaluator::clear_symbol_regexp (const std::string& pattern) |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2820 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2821 // FIXME: are we supposed to do both here? |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2822 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2823 clear_variable_regexp (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2824 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2825 symbol_table& symtab = m_interpreter.get_symbol_table (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2826 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2827 symtab.clear_function_regexp (pattern); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2828 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2829 |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2830 std::list<std::string> tree_evaluator::global_variable_names (void) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2831 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2832 return m_call_stack.global_variable_names (); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2833 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2834 |
27594
e091e09d26f0
restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents:
27540
diff
changeset
|
2835 std::list<std::string> tree_evaluator::top_level_variable_names (void) const |
e091e09d26f0
restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents:
27540
diff
changeset
|
2836 { |
e091e09d26f0
restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents:
27540
diff
changeset
|
2837 return m_call_stack.top_level_variable_names (); |
e091e09d26f0
restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents:
27540
diff
changeset
|
2838 } |
e091e09d26f0
restore some symbol table functions for backward compatibility
John W. Eaton <jwe@octave.org>
parents:
27540
diff
changeset
|
2839 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2840 std::list<std::string> tree_evaluator::variable_names (void) const |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2841 { |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2842 return m_call_stack.variable_names (); |
24037
21915520ac7b
use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents:
23916
diff
changeset
|
2843 } |
21915520ac7b
use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents:
23916
diff
changeset
|
2844 |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2845 // Return a pointer to the user-defined function FNAME. If FNAME is empty, |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2846 // search backward for the first user-defined function in the |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2847 // current call stack. |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2848 |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2849 octave_user_code * |
26975
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2850 tree_evaluator::get_user_code (const std::string& fname, |
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2851 const std::string& class_name) |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2852 { |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2853 octave_user_code *user_code = nullptr; |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2854 |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2855 if (fname.empty ()) |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2856 user_code = m_call_stack.debug_user_code (); |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2857 else |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2858 { |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2859 std::string name = fname; |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2860 |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2861 if (sys::file_ops::dir_sep_char () != '/' && name[0] == '@') |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2862 { |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2863 auto beg = name.begin () + 2; // never have @/method |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2864 auto end = name.end () - 1; // never have trailing '/' |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2865 std::replace (beg, end, '/', sys::file_ops::dir_sep_char ()); |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2866 } |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2867 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
2868 std::size_t name_len = name.length (); |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2869 |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2870 if (name_len > 2 && name.substr (name_len-2) == ".m") |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2871 name = name.substr (0, name_len-2); |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2872 |
26065
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2873 if (name.empty ()) |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2874 return nullptr; |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2875 |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2876 symbol_table& symtab = m_interpreter.get_symbol_table (); |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2877 |
26065
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2878 octave_value fcn; |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
2879 std::size_t p2 = std::string::npos; |
26065
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2880 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2881 if (name[0] == '@') |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2882 { |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
2883 std::size_t p1 = name.find (sys::file_ops::dir_sep_char (), 1); |
26065
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2884 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2885 if (p1 == std::string::npos) |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2886 return nullptr; |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2887 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2888 std::string dispatch_type = name.substr (1, p1-1); |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2889 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2890 p2 = name.find ('>', p1); |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2891 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2892 std::string method = name.substr (p1+1, p2-1); |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2893 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2894 fcn = symtab.find_method (method, dispatch_type); |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2895 } |
26975
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2896 else if (! class_name.empty ()) |
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2897 { |
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2898 cdef_manager& cdm = m_interpreter.get_cdef_manager (); |
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2899 |
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2900 fcn = cdm.find_method (class_name, name); |
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2901 |
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2902 // If there is no classdef method, then try legacy classes. |
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2903 if (fcn.is_undefined ()) |
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2904 fcn = symtab.find_method (name, class_name); |
de826e69a5ea
make breakpoints in classdef methods work (bug #45404, bug #46451)
John W. Eaton <jwe@octave.org>
parents:
26924
diff
changeset
|
2905 } |
26065
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2906 else |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2907 { |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2908 p2 = name.find ('>'); |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2909 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2910 std::string main_fcn = name.substr (0, p2); |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2911 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2912 fcn = symtab.find_function (main_fcn); |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2913 } |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2914 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2915 // List of function names sub1>sub2>... |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2916 std::string subfuns; |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2917 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2918 if (p2 != std::string::npos) |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2919 subfuns = name.substr (p2+1); |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2920 |
26179
a0b63c183d4b
Do not attempt to extract user code from oct-files (bug #55184).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
26164
diff
changeset
|
2921 if (fcn.is_defined () && fcn.is_user_code ()) |
a0b63c183d4b
Do not attempt to extract user code from oct-files (bug #55184).
Kai T. Ohlhus <k.ohlhus@gmail.com>
parents:
26164
diff
changeset
|
2922 user_code = fcn.user_code_value (); |
26065
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2923 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2924 if (! user_code || subfuns.empty ()) |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2925 return user_code; |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2926 |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2927 fcn = user_code->find_subfunction (subfuns); |
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2928 |
27178
e3b2d4e442c4
improve message for setting breakpoint in nonexistent function (bug #56157)
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2929 if (fcn.is_undefined ()) |
e3b2d4e442c4
improve message for setting breakpoint in nonexistent function (bug #56157)
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2930 return nullptr; |
e3b2d4e442c4
improve message for setting breakpoint in nonexistent function (bug #56157)
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2931 |
26065
2eb71b83d3e2
partially refactor function lookup in symbol table
John W. Eaton <jwe@octave.org>
parents:
26039
diff
changeset
|
2932 user_code = fcn.user_code_value (); |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2933 } |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2934 |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2935 return user_code; |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2936 } |
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
2937 |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2938 std::string |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2939 tree_evaluator::current_function_name (bool skip_first) const |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2940 { |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
2941 octave_function *curfcn = m_call_stack.current_function (skip_first); |
27199
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2942 |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2943 if (curfcn) |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2944 return curfcn->name (); |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2945 |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2946 return ""; |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2947 } |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2948 |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2949 bool |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2950 tree_evaluator::in_user_code (void) const |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2951 { |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2952 return m_call_stack.current_user_code () != nullptr; |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2953 } |
f27002104c5b
eliminate direct access to call_stack in error functions
John W. Eaton <jwe@octave.org>
parents:
27179
diff
changeset
|
2954 |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2955 void |
23469
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2956 tree_evaluator::visit_decl_command (tree_decl_command& cmd) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
2957 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
2958 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
2959 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
2960 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
2961 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
2962 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
2963 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
2964 m_echo_file_pos = line + 1; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
2965 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
2966 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
2967 if (m_debug_mode) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
2968 do_breakpoint (cmd.is_active_breakpoint (*this)); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
2969 |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
2970 // FIXME: tree_decl_init_list is not derived from tree, so should it |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
2971 // really have an accept method? |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
2972 |
23469
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2973 tree_decl_init_list *init_list = cmd.initializer_list (); |
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2974 |
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2975 if (init_list) |
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2976 init_list->accept (*this); |
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2977 } |
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2978 |
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2979 void |
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2980 tree_evaluator::visit_decl_elt (tree_decl_elt& elt) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
2981 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23693
diff
changeset
|
2982 tree_identifier *id = elt.ident (); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2983 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2984 if (id) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
2985 { |
23469
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2986 if (elt.is_global ()) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2987 m_call_stack.make_global (id->symbol ()); |
23469
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2988 else if (elt.is_persistent ()) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
2989 m_call_stack.make_persistent (id->symbol ()); |
23469
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2990 else |
2699c5974844
handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents:
23458
diff
changeset
|
2991 error ("declaration list element not global or persistent"); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2992 |
25383
d3a035528c9a
use reference to tree_evaluator instead of pointer
John W. Eaton <jwe@octave.org>
parents:
25382
diff
changeset
|
2993 octave_lvalue ult = id->lvalue (*this); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2994 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2995 if (ult.is_undefined ()) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2996 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23693
diff
changeset
|
2997 tree_expression *expr = elt.expression (); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2998 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
2999 octave_value init_val; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3000 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3001 if (expr) |
27374
d171d356767b
don't apply std::move to temporary values
John W. Eaton <jwe@octave.org>
parents:
27373
diff
changeset
|
3002 init_val = expr->evaluate (*this); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3003 else |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3004 init_val = Matrix (); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3005 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3006 ult.assign (octave_value::op_asn_eq, init_val); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3007 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3008 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3009 } |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24690
diff
changeset
|
3010 |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3011 template <typename T> |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3012 void |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3013 tree_evaluator::execute_range_loop (const range<T>& rng, int line, |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3014 octave_lvalue& ult, |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3015 tree_statement_list *loop_body) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3016 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3017 octave_idx_type steps = rng.numel (); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3018 |
28857
43ad651cf5a0
eliminate unnecessary uses of octave:: namespace qualifier
John W. Eaton <jwe@octave.org>
parents:
28851
diff
changeset
|
3019 if (math::isinf (rng.limit ())) |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3020 warning_with_id ("Octave:infinite-loop", |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3021 "FOR loop limit is infinite, will stop after %" |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3022 OCTAVE_IDX_TYPE_FORMAT " steps", steps); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3023 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3024 for (octave_idx_type i = 0; i < steps; i++) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3025 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3026 if (m_echo_state) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3027 m_echo_file_pos = line; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3028 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3029 octave_value val (rng.elem (i)); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3030 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3031 ult.assign (octave_value::op_asn_eq, val); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3032 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3033 if (loop_body) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3034 loop_body->accept (*this); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3035 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3036 if (quit_loop_now ()) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3037 break; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3038 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3039 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3040 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3041 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3042 tree_evaluator::visit_simple_for_command (tree_simple_for_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3043 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3044 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3045 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3046 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3047 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3048 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3049 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3050 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3051 line++; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3052 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3053 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
3054 if (m_debug_mode) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
3055 do_breakpoint (cmd.is_active_breakpoint (*this)); |
13245
027a2186cd90
parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents:
13226
diff
changeset
|
3056 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3057 // FIXME: need to handle PARFOR loops here using cmd.in_parallel () |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3058 // and cmd.maxproc_expr (); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3059 |
27373
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
3060 unwind_protect_var<bool> upv (m_in_loop_command, true); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3061 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3062 tree_expression *expr = cmd.control_expr (); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3063 |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3064 octave_value rhs = expr->evaluate (*this); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3065 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3066 if (rhs.is_undefined ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3067 return; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3068 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3069 tree_expression *lhs = cmd.left_hand_side (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3070 |
25383
d3a035528c9a
use reference to tree_evaluator instead of pointer
John W. Eaton <jwe@octave.org>
parents:
25382
diff
changeset
|
3071 octave_lvalue ult = lhs->lvalue (*this); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3072 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3073 tree_statement_list *loop_body = cmd.body (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3074 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3075 if (rhs.is_range ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3076 { |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3077 // FIXME: is there a better way to dispatch here? |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3078 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3079 if (rhs.is_double_type ()) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3080 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3081 execute_range_loop (rhs.range_value (), line, ult, loop_body); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3082 return; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3083 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3084 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3085 if (rhs.is_int64_type ()) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3086 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3087 execute_range_loop (rhs.int64_range_value (), line, ult, loop_body); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3088 return; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3089 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3090 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3091 if (rhs.is_uint64_type ()) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3092 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3093 execute_range_loop (rhs.uint64_range_value (), line, ult, loop_body); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3094 return; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3095 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3096 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3097 if (rhs.is_int32_type ()) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3098 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3099 execute_range_loop (rhs.int32_range_value (), line, ult, loop_body); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3100 return; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3101 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3102 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3103 if (rhs.is_uint32_type ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3104 { |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3105 execute_range_loop (rhs.uint32_range_value (), line, ult, loop_body); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3106 return; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3107 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3108 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3109 if (rhs.is_int16_type ()) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3110 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3111 execute_range_loop (rhs.int16_range_value (), line, ult, loop_body); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3112 return; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3113 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3114 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3115 if (rhs.is_uint16_type ()) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3116 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3117 execute_range_loop (rhs.uint16_range_value (), line, ult, loop_body); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3118 return; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3119 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3120 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3121 if (rhs.is_int8_type ()) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3122 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3123 execute_range_loop (rhs.int8_range_value (), line, ult, loop_body); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3124 return; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3125 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3126 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3127 if (rhs.is_uint8_type ()) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3128 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3129 execute_range_loop (rhs.uint8_range_value (), line, ult, loop_body); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3130 return; |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3131 } |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3132 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3133 if (rhs.is_single_type ()) |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3134 { |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3135 execute_range_loop (rhs.float_range_value (), line, ult, loop_body); |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3136 return; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3137 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3138 } |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3139 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3140 if (rhs.is_scalar_type ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3141 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3142 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3143 m_echo_file_pos = line; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3144 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3145 ult.assign (octave_value::op_asn_eq, rhs); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3146 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3147 if (loop_body) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3148 loop_body->accept (*this); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3149 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3150 // Maybe decrement break and continue states. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3151 quit_loop_now (); |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3152 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3153 return; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3154 } |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3155 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3156 // Also handle any range types not explicitly handled above, though |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3157 // not as efficiently as the specialized code above. |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3158 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3159 if (rhs.is_range () || rhs.is_matrix_type () || rhs.iscell () |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3160 || rhs.is_string () || rhs.isstruct ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3161 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3162 // A matrix or cell is reshaped to 2 dimensions and iterated by |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3163 // columns. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3164 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3165 dim_vector dv = rhs.dims ().redim (2); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3166 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3167 octave_idx_type nrows = dv(0); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3168 octave_idx_type steps = dv(1); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3169 |
23514
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3170 octave_value arg = rhs; |
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3171 if (rhs.ndims () > 2) |
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3172 arg = arg.reshape (dv); |
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3173 |
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3174 if (nrows > 0 && steps > 0) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3175 { |
23514
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3176 octave_value_list idx; |
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3177 octave_idx_type iidx; |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3178 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3179 // for row vectors, use single index to speed things up. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3180 if (nrows == 1) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3181 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3182 idx.resize (1); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3183 iidx = 0; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3184 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3185 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3186 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3187 idx.resize (2); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3188 idx(0) = octave_value::magic_colon_t; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3189 iidx = 1; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3190 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3191 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3192 for (octave_idx_type i = 1; i <= steps; i++) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3193 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3194 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3195 m_echo_file_pos = line; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3196 |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28619
diff
changeset
|
3197 // index_op expects one-based indices. |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3198 idx(iidx) = i; |
28631
70cdf8de553d
move non-member octave_value operator functions to octave namespace
John W. Eaton <jwe@octave.org>
parents:
28619
diff
changeset
|
3199 octave_value val = arg.index_op (idx); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3200 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3201 ult.assign (octave_value::op_asn_eq, val); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3202 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3203 if (loop_body) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3204 loop_body->accept (*this); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3205 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3206 if (quit_loop_now ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3207 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3208 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3209 } |
23514
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3210 else |
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3211 { |
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3212 // Handle empty cases, while still assigning to loop var. |
fd7a16594614
Don't iterate over empty for loop expressions (bug #50893).
Rik <rik@octave.org>
parents:
23503
diff
changeset
|
3213 ult.assign (octave_value::op_asn_eq, arg); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3214 } |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3215 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3216 return; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3217 } |
28646
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3218 |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3219 error ("invalid type in for loop expression near line %d, column %d", |
e26201931ea3
new template class for octave_range objects
John W. Eaton <jwe@octave.org>
parents:
28638
diff
changeset
|
3220 cmd.line (), cmd.column ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3221 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3222 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3223 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3224 tree_evaluator::visit_complex_for_command (tree_complex_for_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3225 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3226 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3227 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3228 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3229 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3230 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3231 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3232 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3233 line++; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3234 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3235 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
3236 if (m_debug_mode) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
3237 do_breakpoint (cmd.is_active_breakpoint (*this)); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3238 |
27373
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
3239 unwind_protect_var<bool> upv (m_in_loop_command, true); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3240 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3241 tree_expression *expr = cmd.control_expr (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3242 |
27374
d171d356767b
don't apply std::move to temporary values
John W. Eaton <jwe@octave.org>
parents:
27373
diff
changeset
|
3243 octave_value rhs = expr->evaluate (*this); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3244 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3245 if (rhs.is_undefined ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3246 return; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3247 |
23584
7ed6b258db91
maint: Deprecate is_map and replace with isstruct.
Rik <rik@octave.org>
parents:
23577
diff
changeset
|
3248 if (! rhs.isstruct ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3249 error ("in statement 'for [X, Y] = VAL', VAL must be a structure"); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3250 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3251 // Cycle through structure elements. First element of id_list |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3252 // is set to value and the second is set to the name of the |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3253 // structure element. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3254 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3255 tree_argument_list *lhs = cmd.left_hand_side (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3256 |
25337
3ff9192b676e
use auto keyword to declare iterator variables where possible
John W. Eaton <jwe@octave.org>
parents:
25336
diff
changeset
|
3257 auto p = lhs->begin (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3258 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3259 tree_expression *elt = *p++; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3260 |
25383
d3a035528c9a
use reference to tree_evaluator instead of pointer
John W. Eaton <jwe@octave.org>
parents:
25382
diff
changeset
|
3261 octave_lvalue val_ref = elt->lvalue (*this); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3262 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3263 elt = *p; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3264 |
25383
d3a035528c9a
use reference to tree_evaluator instead of pointer
John W. Eaton <jwe@octave.org>
parents:
25382
diff
changeset
|
3265 octave_lvalue key_ref = elt->lvalue (*this); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3266 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3267 const octave_map tmp_val = rhs.map_value (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3268 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3269 tree_statement_list *loop_body = cmd.body (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3270 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3271 string_vector keys = tmp_val.keys (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3272 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3273 octave_idx_type nel = keys.numel (); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3274 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3275 for (octave_idx_type i = 0; i < nel; i++) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3276 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3277 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3278 m_echo_file_pos = line; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3279 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3280 std::string key = keys[i]; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3281 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3282 const Cell val_lst = tmp_val.contents (key); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3283 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3284 octave_idx_type n = val_lst.numel (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3285 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3286 octave_value val = (n == 1) ? val_lst(0) : octave_value (val_lst); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3287 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3288 val_ref.assign (octave_value::op_asn_eq, val); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3289 key_ref.assign (octave_value::op_asn_eq, key); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3290 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3291 if (loop_body) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3292 loop_body->accept (*this); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3293 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3294 if (quit_loop_now ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3295 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3296 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3297 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3298 |
28518
b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28481
diff
changeset
|
3299 void tree_evaluator::visit_spmd_command (tree_spmd_command& cmd) |
b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28481
diff
changeset
|
3300 { |
b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28481
diff
changeset
|
3301 // For now, we just execute the commands serially. |
b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28481
diff
changeset
|
3302 |
b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28481
diff
changeset
|
3303 tree_statement_list *body = cmd.body (); |
b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28481
diff
changeset
|
3304 |
b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28481
diff
changeset
|
3305 if (body) |
b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28481
diff
changeset
|
3306 body->accept (*this); |
b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28481
diff
changeset
|
3307 } |
b8ab8b58547d
accept spmd command blocks as language elements (bug #58676)
John W. Eaton <jwe@octave.org>
parents:
28481
diff
changeset
|
3308 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3309 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3310 tree_evaluator::visit_octave_user_script (octave_user_script&) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3311 { |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3312 // ?? |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3313 panic_impossible (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3314 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3315 |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3316 octave_value_list |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3317 tree_evaluator::execute_user_script (octave_user_script& user_script, |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3318 int nargout, |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3319 const octave_value_list& args) |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3320 { |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3321 octave_value_list retval; |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3322 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3323 std::string file_name = user_script.fcn_file_name (); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3324 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3325 if (args.length () != 0 || nargout != 0) |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3326 error ("invalid call to script %s", file_name.c_str ()); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3327 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3328 tree_statement_list *cmd_list = user_script.body (); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3329 |
25401
6f6479125d80
eliminate some globals from tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
25400
diff
changeset
|
3330 if (! cmd_list) |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3331 return retval; |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3332 |
28562
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3333 // FIXME: Maybe this check belongs in the places where we push a new |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3334 // stack frame? Or in the call_stack push method itself? |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3335 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
3336 if (m_call_stack.size () >= static_cast<std::size_t> (m_max_recursion_depth)) |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3337 error ("max_recursion_depth exceeded"); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3338 |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
3339 unwind_protect_var<stmt_list_type> upv (m_statement_context, SC_SCRIPT); |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3340 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3341 profiler::enter<octave_user_script> block (m_profiler, user_script); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3342 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3343 if (echo ()) |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
3344 push_echo_state (tree_evaluator::ECHO_SCRIPTS, file_name); |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3345 |
29420
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
3346 // FIXME: Should we be using tree_evaluator::eval here? |
4ee5a22dd4fe
fix interrupt and dbquit behavior when using server mode
John W. Eaton <jwe@octave.org>
parents:
29359
diff
changeset
|
3347 |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3348 cmd_list->accept (*this); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3349 |
25403
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
3350 if (m_returning) |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
3351 m_returning = 0; |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
3352 |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
3353 if (m_breaking) |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
3354 m_breaking--; |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3355 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3356 return retval; |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3357 } |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3358 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3359 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3360 tree_evaluator::visit_octave_user_function (octave_user_function&) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3361 { |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3362 // ?? |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3363 panic_impossible (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3364 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3365 |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3366 octave_value_list |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3367 tree_evaluator::execute_user_function (octave_user_function& user_function, |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3368 int nargout, |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
3369 const octave_value_list& xargs) |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3370 { |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3371 octave_value_list retval; |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3372 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3373 // If this function is a classdef constructor, extract the first input |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3374 // argument, which must be the partially constructed object instance. |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3375 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3376 octave_value_list args (xargs); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3377 octave_value_list ret_args; |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3378 |
28562
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3379 int nargin = args.length (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3380 |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3381 if (user_function.is_classdef_constructor ()) |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3382 { |
28562
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3383 if (nargin > 0) |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3384 { |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3385 ret_args = args.slice (0, 1, true); |
28562
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3386 --nargin; |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3387 args = args.slice (1, nargin, true); |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3388 } |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3389 else |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3390 panic_impossible (); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3391 } |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3392 |
28562
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3393 // FIXME: this probably shouldn't be a double-precision matrix. |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3394 Matrix ignored_outputs = ignored_fcn_outputs (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3395 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3396 tree_parameter_list *param_list = user_function.parameter_list (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3397 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3398 if (param_list) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3399 { |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3400 int max_inputs = param_list->length (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3401 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3402 if (! param_list->takes_varargs () && nargin > max_inputs) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3403 { |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3404 std::string name = user_function.name (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3405 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3406 error ("%s: function called with too many inputs", name.c_str ()); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3407 } |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3408 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3409 if (! param_list->varargs_only ()) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3410 define_parameter_list_from_arg_vector (param_list, args); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3411 } |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3412 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3413 tree_parameter_list *ret_list = user_function.return_list (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3414 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3415 if (ret_list && ! ret_list->takes_varargs ()) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3416 { |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3417 int max_outputs = ret_list->length (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3418 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3419 if (nargout > max_outputs) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3420 { |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3421 std::string name = user_function.name (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3422 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3423 error ("%s: function called with too many outputs", name.c_str ()); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3424 } |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3425 } |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3426 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3427 bind_auto_fcn_vars (xargs.name_tags (), ignored_outputs, nargin, |
26039
d2aae3570c81
perform automatic function variable binding in tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
26004
diff
changeset
|
3428 nargout, user_function.takes_varargs (), |
d2aae3570c81
perform automatic function variable binding in tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
26004
diff
changeset
|
3429 user_function.all_va_args (args)); |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3430 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3431 // For classdef constructor, pre-populate the output arguments |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3432 // with the pre-initialized object instance, extracted above. |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3433 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3434 if (user_function.is_classdef_constructor ()) |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3435 { |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3436 if (! ret_list) |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3437 error ("%s: invalid classdef constructor, no output argument defined", |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3438 user_function.dispatch_class ().c_str ()); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3439 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3440 define_parameter_list_from_arg_vector (ret_list, ret_args); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3441 } |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3442 |
28562
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3443 // FIXME: Maybe this check belongs in the places where we push a |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3444 // new stack frame? Or in the call_stack push method itself? |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3445 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29527
diff
changeset
|
3446 if (m_call_stack.size () >= static_cast<std::size_t> (m_max_recursion_depth)) |
28562
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3447 error ("max_recursion_depth exceeded"); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3448 |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
3449 unwind_action act2 ([&user_function] () { |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
3450 user_function.restore_warning_states (); |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
3451 }); |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3452 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3453 // Evaluate the commands that make up the function. |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3454 |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
3455 unwind_protect_var<stmt_list_type> upv (m_statement_context, SC_FUNCTION); |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
3456 |
28562
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3457 tree_statement_list *cmd_list = user_function.body (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3458 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3459 if (cmd_list) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3460 { |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3461 profiler::enter<octave_user_function> |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3462 block (m_profiler, user_function); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3463 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3464 if (echo ()) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3465 push_echo_state (tree_evaluator::ECHO_FUNCTIONS, |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3466 user_function.fcn_file_name ()); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3467 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3468 if (user_function.is_special_expr ()) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3469 { |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3470 assert (cmd_list->length () == 1); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3471 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3472 tree_statement *stmt = cmd_list->front (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3473 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3474 tree_expression *expr = stmt->expression (); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3475 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3476 if (expr) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3477 { |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3478 m_call_stack.set_location (stmt->line (), stmt->column ()); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3479 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3480 retval = expr->evaluate_n (*this, nargout); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3481 } |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3482 } |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3483 else |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3484 cmd_list->accept (*this); |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3485 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3486 if (m_returning) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3487 m_returning = 0; |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3488 |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3489 if (m_breaking) |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3490 m_breaking--; |
b0b80efecea1
error for functions called with too many inputs or outputs
John W. Eaton <jwe@octave.org>
parents:
28561
diff
changeset
|
3491 } |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3492 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3493 // Copy return values out. |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3494 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3495 if (ret_list && ! user_function.is_special_expr ()) |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3496 { |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3497 Cell varargout; |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3498 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3499 if (ret_list->takes_varargs ()) |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3500 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
3501 octave_value varargout_varval = varval ("varargout"); |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3502 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3503 if (varargout_varval.is_defined ()) |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3504 varargout = varargout_varval.xcell_value ("varargout must be a cell array object"); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3505 } |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3506 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3507 retval = convert_return_list_to_const_vector (ret_list, nargout, |
28540
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
3508 ignored_outputs, |
25400
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3509 varargout); |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3510 } |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3511 |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3512 return retval; |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3513 } |
d423ce60f5c8
evaluate script and function code in tree_evaluator methods
John W. Eaton <jwe@octave.org>
parents:
25399
diff
changeset
|
3514 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3515 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3516 tree_evaluator::visit_octave_user_function_header (octave_user_function&) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3517 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3518 panic_impossible (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3519 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3520 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3521 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3522 tree_evaluator::visit_octave_user_function_trailer (octave_user_function&) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3523 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3524 panic_impossible (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3525 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3526 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3527 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3528 tree_evaluator::visit_function_def (tree_function_def& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3529 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3530 octave_value fcn = cmd.function (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3531 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3532 octave_function *f = fcn.function_value (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3533 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3534 if (f) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3535 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3536 std::string nm = f->name (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3537 |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
3538 symbol_table& symtab = m_interpreter.get_symbol_table (); |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
3539 |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23587
diff
changeset
|
3540 symtab.install_cmdline_function (nm, fcn); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3541 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3542 // Make sure that any variable with the same name as the new |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3543 // function is cleared. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3544 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
3545 assign (nm); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3546 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3547 } |
13225
359153d26cc1
eliminate DO_SIMPLE_FOR_LOOP_ONCE macro
John W. Eaton <jwe@octave.org>
parents:
12833
diff
changeset
|
3548 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3549 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3550 tree_evaluator::visit_identifier (tree_identifier&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3551 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3552 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3553 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3554 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3555 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3556 tree_evaluator::visit_if_clause (tree_if_clause&) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3557 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3558 panic_impossible (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3559 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3560 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3561 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3562 tree_evaluator::visit_if_command (tree_if_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3563 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3564 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3565 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3566 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3567 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3568 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3569 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3570 m_echo_file_pos = line + 1; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3571 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3572 |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3573 // FIXME: tree_if_command_list is not derived from tree, so should it |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3574 // really have an accept method? |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3575 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3576 tree_if_command_list *lst = cmd.cmd_list (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3577 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3578 if (lst) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3579 lst->accept (*this); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3580 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3581 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3582 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3583 tree_evaluator::visit_if_command_list (tree_if_command_list& lst) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3584 { |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23435
diff
changeset
|
3585 for (tree_if_clause *tic : lst) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3586 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3587 tree_expression *expr = tic->condition (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3588 |
27761
223981108144
fix stack frame location info when using debugger (bug #57315)
John W. Eaton <jwe@octave.org>
parents:
27725
diff
changeset
|
3589 if (! (in_debug_repl () |
223981108144
fix stack frame location info when using debugger (bug #57315)
John W. Eaton <jwe@octave.org>
parents:
27725
diff
changeset
|
3590 && m_call_stack.current_frame () == m_debug_frame)) |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
3591 m_call_stack.set_location (tic->line (), tic->column ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3592 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
3593 if (m_debug_mode && ! tic->is_else_clause ()) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
3594 do_breakpoint (tic->is_active_breakpoint (*this)); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3595 |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3596 if (tic->is_else_clause () || is_logically_true (expr, "if")) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3597 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3598 tree_statement_list *stmt_lst = tic->commands (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3599 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3600 if (stmt_lst) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3601 stmt_lst->accept (*this); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3602 |
20784
52f6921dde09
* pt-eval.cc: Style fixes.
John W. Eaton <jwe@octave.org>
parents:
20715
diff
changeset
|
3603 break; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3604 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3605 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3606 } |
24722
af6c1ed60581
avoid splitting namespace blocks unnecessarily
John W. Eaton <jwe@octave.org>
parents:
24690
diff
changeset
|
3607 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3608 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3609 tree_evaluator::visit_index_expression (tree_index_expression&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3610 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3611 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3612 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3613 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3614 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3615 tree_evaluator::visit_matrix (tree_matrix&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3616 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3617 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3618 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3619 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3620 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3621 tree_evaluator::visit_cell (tree_cell&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3622 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3623 panic_impossible (); |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3624 } |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3625 |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3626 void |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3627 tree_evaluator::visit_multi_assignment (tree_multi_assignment&) |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3628 { |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3629 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3630 } |
13225
359153d26cc1
eliminate DO_SIMPLE_FOR_LOOP_ONCE macro
John W. Eaton <jwe@octave.org>
parents:
12833
diff
changeset
|
3631 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3632 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3633 tree_evaluator::visit_no_op_command (tree_no_op_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3634 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3635 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3636 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3637 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3638 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3639 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3640 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3641 m_echo_file_pos = line + 1; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3642 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3643 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
3644 if (m_debug_mode && cmd.is_end_of_fcn_or_script ()) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
3645 do_breakpoint (cmd.is_active_breakpoint (*this), true); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3646 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3647 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3648 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3649 tree_evaluator::visit_constant (tree_constant&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3650 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3651 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3652 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3653 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3654 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3655 tree_evaluator::visit_fcn_handle (tree_fcn_handle&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3656 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3657 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3658 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3659 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3660 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3661 tree_evaluator::visit_parameter_list (tree_parameter_list&) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3662 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3663 panic_impossible (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3664 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3665 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3666 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3667 tree_evaluator::visit_postfix_expression (tree_postfix_expression&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3668 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3669 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3670 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3671 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3672 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3673 tree_evaluator::visit_prefix_expression (tree_prefix_expression&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3674 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3675 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3676 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3677 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3678 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3679 tree_evaluator::visit_return_command (tree_return_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3680 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3681 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3682 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3683 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3684 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3685 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3686 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3687 m_echo_file_pos = line + 1; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3688 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3689 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
3690 if (m_debug_mode) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
3691 do_breakpoint (cmd.is_active_breakpoint (*this)); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3692 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3693 // Act like dbcont. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3694 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
3695 if (in_debug_repl () && m_call_stack.current_frame () == m_debug_frame) |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
3696 dbcont (); |
25401
6f6479125d80
eliminate some globals from tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
25400
diff
changeset
|
3697 else if (m_statement_context == SC_FUNCTION |
6f6479125d80
eliminate some globals from tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
25400
diff
changeset
|
3698 || m_statement_context == SC_SCRIPT |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
3699 || m_in_loop_command) |
25403
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
3700 m_returning = 1; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3701 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3702 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3703 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3704 tree_evaluator::visit_simple_assignment (tree_simple_assignment&) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3705 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3706 panic_impossible (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3707 } |
8662
af72c8137d64
improve looping over arrays
Jaroslav Hajek <highegg@gmail.com>
parents:
8658
diff
changeset
|
3708 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3709 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3710 tree_evaluator::visit_statement (tree_statement& stmt) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3711 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3712 tree_command *cmd = stmt.command (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3713 tree_expression *expr = stmt.expression (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3714 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3715 if (cmd || expr) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3716 { |
27761
223981108144
fix stack frame location info when using debugger (bug #57315)
John W. Eaton <jwe@octave.org>
parents:
27725
diff
changeset
|
3717 if (! (in_debug_repl () |
223981108144
fix stack frame location info when using debugger (bug #57315)
John W. Eaton <jwe@octave.org>
parents:
27725
diff
changeset
|
3718 && m_call_stack.current_frame () == m_debug_frame)) |
27540
6971bc1a2f92
deprecate unecessary global variable Vtrack_line_num
John W. Eaton <jwe@octave.org>
parents:
27533
diff
changeset
|
3719 m_call_stack.set_location (stmt.line (), stmt.column ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3720 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3721 try |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3722 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3723 if (cmd) |
28560
af1a9c1db88e
reset pointer to lvalue list before executing commands (bug #58748, bug #58751)
John W. Eaton <jwe@octave.org>
parents:
28540
diff
changeset
|
3724 { |
af1a9c1db88e
reset pointer to lvalue list before executing commands (bug #58748, bug #58751)
John W. Eaton <jwe@octave.org>
parents:
28540
diff
changeset
|
3725 unwind_protect_var<const std::list<octave_lvalue> *> |
af1a9c1db88e
reset pointer to lvalue list before executing commands (bug #58748, bug #58751)
John W. Eaton <jwe@octave.org>
parents:
28540
diff
changeset
|
3726 upv (m_lvalue_list, nullptr); |
af1a9c1db88e
reset pointer to lvalue list before executing commands (bug #58748, bug #58751)
John W. Eaton <jwe@octave.org>
parents:
28540
diff
changeset
|
3727 |
af1a9c1db88e
reset pointer to lvalue list before executing commands (bug #58748, bug #58751)
John W. Eaton <jwe@octave.org>
parents:
28540
diff
changeset
|
3728 cmd->accept (*this); |
af1a9c1db88e
reset pointer to lvalue list before executing commands (bug #58748, bug #58751)
John W. Eaton <jwe@octave.org>
parents:
28540
diff
changeset
|
3729 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3730 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3731 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3732 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3733 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3734 int line = stmt.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3735 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3736 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3737 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3738 m_echo_file_pos = line + 1; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3739 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3740 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
3741 if (m_debug_mode) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
3742 do_breakpoint (expr->is_active_breakpoint (*this)); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3743 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3744 // FIXME: maybe all of this should be packaged in |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3745 // one virtual function that returns a flag saying whether |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3746 // or not the expression will take care of binding ans and |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3747 // printing the result. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3748 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3749 // FIXME: it seems that we should just have to |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3750 // evaluate the expression and that should take care of |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3751 // everything, binding ans as necessary? |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3752 |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
3753 octave_value tmp_result = expr->evaluate (*this, 0); |
24564
07876b7127bf
reorganize binding to ans in evaluator for clarity
John W. Eaton <jwe@octave.org>
parents:
24563
diff
changeset
|
3754 |
07876b7127bf
reorganize binding to ans in evaluator for clarity
John W. Eaton <jwe@octave.org>
parents:
24563
diff
changeset
|
3755 if (tmp_result.is_defined ()) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3756 { |
24564
07876b7127bf
reorganize binding to ans in evaluator for clarity
John W. Eaton <jwe@octave.org>
parents:
24563
diff
changeset
|
3757 bool do_bind_ans = false; |
07876b7127bf
reorganize binding to ans in evaluator for clarity
John W. Eaton <jwe@octave.org>
parents:
24563
diff
changeset
|
3758 |
07876b7127bf
reorganize binding to ans in evaluator for clarity
John W. Eaton <jwe@octave.org>
parents:
24563
diff
changeset
|
3759 if (expr->is_identifier ()) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
3760 do_bind_ans = ! is_variable (expr); |
24564
07876b7127bf
reorganize binding to ans in evaluator for clarity
John W. Eaton <jwe@octave.org>
parents:
24563
diff
changeset
|
3761 else |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
3762 do_bind_ans = ! expr->is_assignment_expression (); |
24564
07876b7127bf
reorganize binding to ans in evaluator for clarity
John W. Eaton <jwe@octave.org>
parents:
24563
diff
changeset
|
3763 |
07876b7127bf
reorganize binding to ans in evaluator for clarity
John W. Eaton <jwe@octave.org>
parents:
24563
diff
changeset
|
3764 if (do_bind_ans) |
07876b7127bf
reorganize binding to ans in evaluator for clarity
John W. Eaton <jwe@octave.org>
parents:
24563
diff
changeset
|
3765 bind_ans (tmp_result, expr->print_result () |
07876b7127bf
reorganize binding to ans in evaluator for clarity
John W. Eaton <jwe@octave.org>
parents:
24563
diff
changeset
|
3766 && statement_printing_enabled ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3767 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3768 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3769 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3770 catch (const std::bad_alloc&) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3771 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3772 // FIXME: We want to use error_with_id here so that give users |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3773 // control over this error message but error_with_id will |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3774 // require some memory allocations. Is there anything we can |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3775 // do to make those more likely to succeed? |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3776 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3777 error_with_id ("Octave:bad-alloc", |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3778 "out of memory or dimension too large for Octave's index type"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3779 } |
25336
389757b7b6af
eliminate redundant octave:: namespace tags
John W. Eaton <jwe@octave.org>
parents:
25103
diff
changeset
|
3780 catch (const interrupt_exception&) |
24583
466e2aab871b
stay in debug mode on Control-C interrupts (bug #52750)
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
3781 { |
466e2aab871b
stay in debug mode on Control-C interrupts (bug #52750)
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
3782 // If we are debugging, then continue with next statement. |
466e2aab871b
stay in debug mode on Control-C interrupts (bug #52750)
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
3783 // Otherwise, jump out of here. |
466e2aab871b
stay in debug mode on Control-C interrupts (bug #52750)
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
3784 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
3785 if (m_debug_mode) |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27472
diff
changeset
|
3786 m_interpreter.recover_from_exception (); |
24583
466e2aab871b
stay in debug mode on Control-C interrupts (bug #52750)
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
3787 else |
466e2aab871b
stay in debug mode on Control-C interrupts (bug #52750)
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
3788 throw; |
466e2aab871b
stay in debug mode on Control-C interrupts (bug #52750)
John W. Eaton <jwe@octave.org>
parents:
24565
diff
changeset
|
3789 } |
28980
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3790 catch (const execution_exception& ee) |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3791 { |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3792 error_system& es = m_interpreter.get_error_system (); |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3793 |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3794 if ((m_interpreter.interactive () |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3795 || application::forced_interactive ()) |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3796 && ((es.debug_on_error () |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3797 && m_bp_table.debug_on_err (es.last_error_id ())) |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3798 || (es.debug_on_caught () |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3799 && m_bp_table.debug_on_caught (es.last_error_id ()))) |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3800 && in_user_code ()) |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3801 { |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3802 es.save_exception (ee); |
29501
220c6c4a3533
leave error message output stream decision to error_system class
John W. Eaton <jwe@octave.org>
parents:
29493
diff
changeset
|
3803 es.display_exception (ee); |
28980
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3804 |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3805 enter_debugger (); |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3806 |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3807 // It doesn't make sense to continue execution after an |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3808 // error occurs so force the debugger to quit all debug |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3809 // levels and return the the top prompt. |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3810 |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3811 throw quit_debug_exception (true); |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3812 } |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3813 else |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3814 throw; |
a745a046b705
handle debug_on_interrupt when execution_exception is caught (bug #59306)
John W. Eaton <jwe@octave.org>
parents:
28804
diff
changeset
|
3815 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3816 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3817 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3818 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3819 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3820 tree_evaluator::visit_statement_list (tree_statement_list& lst) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3821 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3822 // FIXME: commented out along with else clause below. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3823 // static octave_value_list empty_list; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3824 |
25337
3ff9192b676e
use auto keyword to declare iterator variables where possible
John W. Eaton <jwe@octave.org>
parents:
25336
diff
changeset
|
3825 auto p = lst.begin (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3826 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3827 if (p != lst.end ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3828 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3829 while (true) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3830 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3831 tree_statement *elt = *p++; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3832 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3833 if (! elt) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3834 error ("invalid statement found in statement list!"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3835 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3836 octave_quit (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3837 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3838 elt->accept (*this); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3839 |
25403
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
3840 if (m_breaking || m_continuing) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3841 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3842 |
25403
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
3843 if (m_returning) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3844 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3845 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3846 if (p == lst.end ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3847 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3848 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3849 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3850 // Clear previous values before next statement is |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3851 // evaluated so that we aren't holding an extra |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3852 // reference to a value that may be used next. For |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3853 // example, in code like this: |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3854 // |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3855 // X = rand (N); # refcount for X should be 1 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3856 // # after this statement |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3857 // |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3858 // X(idx) = val; # no extra copy of X should be |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3859 // # needed, but we will be faked |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3860 // # out if retval is not cleared |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3861 // # between statements here |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3862 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3863 // result_values = empty_list; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3864 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3865 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3866 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3867 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3868 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3869 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3870 tree_evaluator::visit_switch_case (tree_switch_case&) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3871 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3872 panic_impossible (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3873 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3874 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3875 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3876 tree_evaluator::visit_switch_case_list (tree_switch_case_list&) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3877 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3878 panic_impossible (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3879 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3880 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3881 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3882 tree_evaluator::visit_switch_command (tree_switch_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3883 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3884 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3885 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3886 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3887 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3888 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3889 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3890 m_echo_file_pos = line + 1; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3891 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3892 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
3893 if (m_debug_mode) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
3894 do_breakpoint (cmd.is_active_breakpoint (*this)); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3895 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3896 tree_expression *expr = cmd.switch_value (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3897 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3898 if (! expr) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3899 error ("missing value in switch command near line %d, column %d", |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3900 cmd.line (), cmd.column ()); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3901 |
27374
d171d356767b
don't apply std::move to temporary values
John W. Eaton <jwe@octave.org>
parents:
27373
diff
changeset
|
3902 octave_value val = expr->evaluate (*this); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3903 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3904 tree_switch_case_list *lst = cmd.case_list (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3905 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3906 if (lst) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3907 { |
23449
c763214a8260
maint: Use convention 'int *x' for naming pointers.
Rik <rik@octave.org>
parents:
23435
diff
changeset
|
3908 for (tree_switch_case *t : *lst) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3909 { |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
3910 if (t->is_default_case () || switch_case_label_matches (t, val)) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3911 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3912 tree_statement_list *stmt_lst = t->commands (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3913 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3914 if (stmt_lst) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3915 stmt_lst->accept (*this); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3916 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3917 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3918 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3919 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3920 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3921 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3922 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3923 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3924 tree_evaluator::visit_try_catch_command (tree_try_catch_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3925 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3926 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3927 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3928 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3929 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
3930 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3931 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3932 m_echo_file_pos = line + 1; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3933 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
3934 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3935 bool execution_error = false; |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3936 octave_scalar_map err_map; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3937 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3938 tree_statement_list *try_code = cmd.body (); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3939 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3940 if (try_code) |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3941 { |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3942 // unwind frame before catch block |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3943 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3944 unwind_protect frame; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3945 |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29960
diff
changeset
|
3946 interpreter_try (frame); |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3947 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3948 // The catch code is *not* added to unwind_protect stack; it |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3949 // doesn't need to be run on interrupts. |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3950 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3951 try |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3952 { |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3953 try_code->accept (*this); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3954 } |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3955 catch (const execution_exception& ee) |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3956 { |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3957 execution_error = true; |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3958 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3959 error_system& es = m_interpreter.get_error_system (); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3960 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3961 es.save_exception (ee); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3962 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3963 err_map.assign ("message", es.last_error_message ()); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3964 err_map.assign ("identifier", es.last_error_id ()); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3965 err_map.assign ("stack", es.last_error_stack ()); |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3966 |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27472
diff
changeset
|
3967 m_interpreter.recover_from_exception (); |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3968 } |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3969 |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3970 // Actions attached to unwind_protect frame will run here, prior |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3971 // to executing the catch block. |
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3972 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3973 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3974 if (execution_error) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3975 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3976 tree_statement_list *catch_code = cmd.cleanup (); |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3977 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3978 if (catch_code) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3979 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3980 tree_identifier *expr_id = cmd.identifier (); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3981 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3982 if (expr_id) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3983 { |
25383
d3a035528c9a
use reference to tree_evaluator instead of pointer
John W. Eaton <jwe@octave.org>
parents:
25382
diff
changeset
|
3984 octave_lvalue ult = expr_id->lvalue (*this); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3985 |
27472
c0883bfc0f36
simplify evaluator logic for try-catch command
John W. Eaton <jwe@octave.org>
parents:
27471
diff
changeset
|
3986 ult.assign (octave_value::op_asn_eq, err_map); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3987 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3988 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3989 // perform actual "catch" block |
26451
0ab258611cc5
pt-eval.cc: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
3990 catch_code->accept (*this); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3991 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3992 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3993 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
3994 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3995 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3996 tree_evaluator::do_unwind_protect_cleanup_code (tree_statement_list *list) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
3997 { |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23693
diff
changeset
|
3998 unwind_protect frame; |
21922
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
3999 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4000 frame.protect_var (octave_interrupt_state); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4001 octave_interrupt_state = 0; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4002 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4003 // We want to preserve the last location info for possible |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4004 // backtracking. |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
4005 |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
4006 frame.add (&call_stack::set_line, &m_call_stack, |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
4007 m_call_stack.current_line ()); |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
4008 |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
4009 frame.add (&call_stack::set_column, &m_call_stack, |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
4010 m_call_stack.current_column ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4011 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4012 // Similarly, if we have seen a return or break statement, allow all |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4013 // the cleanup code to run before returning or handling the break. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4014 // We don't have to worry about continue statements because they can |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4015 // only occur in loops. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4016 |
25403
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
4017 frame.protect_var (m_returning); |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
4018 m_returning = 0; |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
4019 |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
4020 frame.protect_var (m_breaking); |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
4021 m_breaking = 0; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4022 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4023 try |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4024 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4025 if (list) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4026 list->accept (*this); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4027 } |
27471 | 4028 catch (const execution_exception& ee) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4029 { |
27471 | 4030 error_system& es = m_interpreter.get_error_system (); |
4031 | |
4032 es.save_exception (ee); | |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27472
diff
changeset
|
4033 m_interpreter.recover_from_exception (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4034 |
25403
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
4035 if (m_breaking || m_returning) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4036 frame.discard (2); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4037 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4038 frame.run (2); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4039 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4040 frame.discard (2); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4041 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4042 throw; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4043 } |
21922
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4044 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4045 // The unwind_protects are popped off the stack in the reverse of |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4046 // the order they are pushed on. |
21922
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4047 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4048 // FIXME: these statements say that if we see a break or |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4049 // return statement in the cleanup block, that we want to use the |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4050 // new value of the breaking or returning flag instead of restoring |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4051 // the previous value. Is that the right thing to do? I think so. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4052 // Consider the case of |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4053 // |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4054 // function foo () |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4055 // unwind_protect |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4056 // fprintf (stderr, "1: this should always be executed\n"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4057 // break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4058 // fprintf (stderr, "1: this should never be executed\n"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4059 // unwind_protect_cleanup |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4060 // fprintf (stderr, "2: this should always be executed\n"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4061 // return; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4062 // fprintf (stderr, "2: this should never be executed\n"); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4063 // end_unwind_protect |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4064 // endfunction |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4065 // |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4066 // If we reset the value of the breaking flag, both the returning |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4067 // flag and the breaking flag will be set, and we shouldn't have |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4068 // both. So, use the most recent one. If there is no return or |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4069 // break in the cleanup block, the values should be reset to |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4070 // whatever they were when the cleanup block was entered. |
21922
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4071 |
25403
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
4072 if (m_breaking || m_returning) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4073 frame.discard (2); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4074 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4075 frame.run (2); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4076 } |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20560
diff
changeset
|
4077 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4078 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4079 tree_evaluator::visit_unwind_protect_command (tree_unwind_protect_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4080 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4081 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4082 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4083 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4084 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4085 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4086 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4087 m_echo_file_pos = line + 1; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4088 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4089 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4090 tree_statement_list *cleanup_code = cmd.cleanup (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4091 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4092 tree_statement_list *unwind_protect_code = cmd.body (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4093 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4094 if (unwind_protect_code) |
21922
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4095 { |
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4096 try |
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4097 { |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4098 unwind_protect_code->accept (*this); |
21922
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4099 } |
27471 | 4100 catch (const execution_exception& ee) |
21922
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4101 { |
27471 | 4102 error_system& es = m_interpreter.get_error_system (); |
4103 | |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4104 // FIXME: Maybe we should be able to temporarily set the |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4105 // interpreter's exception handling state to something "safe" |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4106 // while the cleanup block runs instead of just resetting it |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4107 // here? |
27471 | 4108 es.save_exception (ee); |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27472
diff
changeset
|
4109 m_interpreter.recover_from_exception (); |
21922
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4110 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4111 // Run the cleanup code on exceptions, so that it is run even |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4112 // in case of interrupt or out-of-memory. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4113 do_unwind_protect_cleanup_code (cleanup_code); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4114 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4115 // If an error occurs inside the cleanup code, a new |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4116 // exception will be thrown instead of the original. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4117 throw; |
21922
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4118 } |
23696
08036a7f3660
remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23693
diff
changeset
|
4119 catch (const interrupt_exception&) |
23612
fecca33388f7
also run unwind protect cleanup code on interrupt exceptions (bug #51209)
John W. Eaton <jwe@octave.org>
parents:
23219
diff
changeset
|
4120 { |
fecca33388f7
also run unwind protect cleanup code on interrupt exceptions (bug #51209)
John W. Eaton <jwe@octave.org>
parents:
23219
diff
changeset
|
4121 // The comments above apply here as well. |
27474
3fec8e9fa2aa
make recover_from_exception a member function
John W. Eaton <jwe@octave.org>
parents:
27472
diff
changeset
|
4122 m_interpreter.recover_from_exception (); |
23612
fecca33388f7
also run unwind protect cleanup code on interrupt exceptions (bug #51209)
John W. Eaton <jwe@octave.org>
parents:
23219
diff
changeset
|
4123 do_unwind_protect_cleanup_code (cleanup_code); |
fecca33388f7
also run unwind protect cleanup code on interrupt exceptions (bug #51209)
John W. Eaton <jwe@octave.org>
parents:
23219
diff
changeset
|
4124 throw; |
fecca33388f7
also run unwind protect cleanup code on interrupt exceptions (bug #51209)
John W. Eaton <jwe@octave.org>
parents:
23219
diff
changeset
|
4125 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4126 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4127 // Also execute the unwind_protect_cleanump code if the |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4128 // unwind_protect block runs without error. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4129 do_unwind_protect_cleanup_code (cleanup_code); |
21922
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4130 } |
c34f9c182dcf
Make debug_on_error to apply to the "catch" block of try/catch (bug #47685)
Rik <rik@octave.org>
parents:
21743
diff
changeset
|
4131 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4132 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4133 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4134 tree_evaluator::visit_while_command (tree_while_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4135 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4136 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4137 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4138 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4139 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4140 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4141 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4142 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4143 line++; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4144 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4145 |
27373
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
4146 unwind_protect_var<bool> upv (m_in_loop_command, true); |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20560
diff
changeset
|
4147 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4148 tree_expression *expr = cmd.condition (); |
20824
8848e35e5ef8
better handling of exceptions in unwind-protect blocks
John W. Eaton <jwe@octave.org>
parents:
20784
diff
changeset
|
4149 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4150 if (! expr) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4151 panic_impossible (); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4152 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4153 for (;;) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4154 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4155 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4156 m_echo_file_pos = line; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4157 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
4158 if (m_debug_mode) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
4159 do_breakpoint (cmd.is_active_breakpoint (*this)); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4160 |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4161 if (is_logically_true (expr, "while")) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4162 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4163 tree_statement_list *loop_body = cmd.body (); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4164 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4165 if (loop_body) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4166 loop_body->accept (*this); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4167 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4168 if (quit_loop_now ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4169 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4170 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4171 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4172 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4173 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4174 } |
20666
e0e2c2ce7e94
defer stack trace until back at top level
John W. Eaton <jwe@octave.org>
parents:
20560
diff
changeset
|
4175 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4176 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4177 tree_evaluator::visit_do_until_command (tree_do_until_command& cmd) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4178 { |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4179 int line = cmd.line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4180 if (line < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4181 line = 1; |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4182 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4183 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4184 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4185 echo_code (line); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4186 line++; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4187 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4188 |
27373
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
4189 unwind_protect_var<bool> upv (m_in_loop_command, true); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4190 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4191 tree_expression *expr = cmd.condition (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4192 int until_line = cmd.line (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4193 int until_column = cmd.column (); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4194 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4195 if (! expr) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4196 panic_impossible (); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4197 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4198 for (;;) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4199 { |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4200 if (m_echo_state) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4201 m_echo_file_pos = line; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4202 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4203 tree_statement_list *loop_body = cmd.body (); |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4204 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4205 if (loop_body) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4206 loop_body->accept (*this); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4207 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4208 if (quit_loop_now ()) |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4209 break; |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4210 |
25402
ef2b9d4abf4a
eliminate some global variables from tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
25401
diff
changeset
|
4211 if (m_debug_mode) |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
4212 do_breakpoint (cmd.is_active_breakpoint (*this)); |
18325
2a8243d8327a
jit compiler: Add support for the do_until statement
LYH <lyh.kernel@gmail.com>
parents:
18270
diff
changeset
|
4213 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
4214 m_call_stack.set_location (until_line, until_column); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4215 |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4216 if (is_logically_true (expr, "do-until")) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4217 break; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4218 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4219 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4220 |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
4221 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4222 tree_evaluator::visit_superclass_ref (tree_superclass_ref&) |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
4223 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4224 panic_impossible (); |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
4225 } |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
4226 |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
4227 void |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4228 tree_evaluator::visit_metaclass_query (tree_metaclass_query&) |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
4229 { |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4230 panic_impossible (); |
26686
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
4231 } |
581d01526b34
eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents:
26662
diff
changeset
|
4232 |
23702
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4233 void tree_evaluator::bind_ans (const octave_value& val, bool print) |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4234 { |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4235 static std::string ans = "ans"; |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4236 |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4237 if (val.is_defined ()) |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4238 { |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4239 if (val.is_cs_list ()) |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4240 { |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4241 octave_value_list lst = val.list_value (); |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4242 |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4243 for (octave_idx_type i = 0; i < lst.length (); i++) |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4244 bind_ans (lst(i), print); |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4245 } |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4246 else |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4247 { |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28562
diff
changeset
|
4248 // FIXME: Maybe assign could also return the assigned value, |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28562
diff
changeset
|
4249 // just for convenience? |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28562
diff
changeset
|
4250 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
4251 assign (ans, val); |
23702
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4252 |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4253 if (print) |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4254 { |
28588
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28562
diff
changeset
|
4255 // Use varval instead of displaying VAL directly so that |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28562
diff
changeset
|
4256 // we get the right type and value for things like |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28562
diff
changeset
|
4257 // magic_int values that may mutate when stored. |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28562
diff
changeset
|
4258 |
ee9b1081471f
allow integer constants > flintmax to be represented exactly (bug #45945)
John W. Eaton <jwe@octave.org>
parents:
28562
diff
changeset
|
4259 octave_value_list args = ovl (varval (ans)); |
23702
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4260 args.stash_name_tags (string_vector (ans)); |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4261 feval ("display", args); |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4262 } |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4263 } |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4264 } |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4265 } |
d396b5fd9199
move bind_ans to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23696
diff
changeset
|
4266 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4267 void |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
4268 tree_evaluator::do_breakpoint (tree_statement& stmt) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4269 { |
26113
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
4270 do_breakpoint (stmt.is_active_breakpoint (*this), |
8a15f3bace49
move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents:
26094
diff
changeset
|
4271 stmt.is_end_of_fcn_or_script ()); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4272 } |
8845
5a6db6bd1a02
eigs.cc (Feigs): fix handling of sigma arg
John W. Eaton <jwe@octave.org>
parents:
8679
diff
changeset
|
4273 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4274 void |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4275 tree_evaluator::do_breakpoint (bool is_breakpoint, |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
4276 bool is_end_of_fcn_or_script) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4277 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4278 bool break_on_this_statement = false; |
21542
7ba48ff6ce83
Record correct line number with "until" command (bug #43249)
Lachlan Andrew <lachlanbis@gmail.com>
parents:
21301
diff
changeset
|
4279 |
25405
df2f3af2c6c5
eliminate unused octave_debug_on_interrupt_state variable
John W. Eaton <jwe@octave.org>
parents:
25404
diff
changeset
|
4280 if (is_breakpoint) |
27233
fc668ac9ce7c
re-enter debugger when doing dbstep (bug #56150)
John W. Eaton <jwe@octave.org>
parents:
27222
diff
changeset
|
4281 break_on_this_statement = true; |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
4282 else if (m_dbstep_flag > 0) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4283 { |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4284 if (m_call_stack.current_frame () == m_debug_frame) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4285 { |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
4286 if (m_dbstep_flag == 1 || is_end_of_fcn_or_script) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4287 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4288 // We get here if we are doing a "dbstep" or a "dbstep N" and the |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4289 // count has reached 1 so that we must stop and return to debug |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4290 // prompt. Alternatively, "dbstep N" has been used but the end |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4291 // of the frame has been reached so we stop at the last line and |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4292 // return to prompt. |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4293 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4294 break_on_this_statement = true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4295 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4296 else |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4297 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4298 // Executing "dbstep N". Decrease N by one and continue. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4299 |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
4300 m_dbstep_flag--; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4301 } |
15574
d20cbfec6df7
Fix off-by-1 error when executing 'dbstep N'
Rik <rik@octave.org>
parents:
15469
diff
changeset
|
4302 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4303 } |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
4304 else if (m_dbstep_flag == 1 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4305 && m_call_stack.current_frame () < m_debug_frame) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4306 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4307 // We stepped out from the end of a function. |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4308 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4309 m_debug_frame = m_call_stack.current_frame (); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4310 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4311 break_on_this_statement = true; |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4312 } |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4313 } |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
4314 else if (m_dbstep_flag == -1) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4315 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4316 // We get here if we are doing a "dbstep in". |
16396
c6a13c1900fc
make "dbstep out" and "dbstep" after "dbstep in" work properly
John W. Eaton <jwe@octave.org>
parents:
16354
diff
changeset
|
4317 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4318 break_on_this_statement = true; |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4319 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4320 m_debug_frame = m_call_stack.current_frame (); |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4321 } |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
4322 else if (m_dbstep_flag == -2) |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4323 { |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4324 // We get here if we are doing a "dbstep out". Check for end of |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4325 // function and whether the current frame is the same as the |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4326 // cached value because we want to step out from the frame where |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4327 // "dbstep out" was evaluated, not from any functions called from |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4328 // that frame. |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4329 |
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4330 if (is_end_of_fcn_or_script |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4331 && m_call_stack.current_frame () == m_debug_frame) |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
4332 m_dbstep_flag = -1; |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4333 } |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
4334 |
29306
0231189f630d
provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents:
29305
diff
changeset
|
4335 if (! break_on_this_statement) |
0231189f630d
provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents:
29305
diff
changeset
|
4336 break_on_this_statement = m_break_on_next_stmt; |
0231189f630d
provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents:
29305
diff
changeset
|
4337 |
0231189f630d
provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents:
29305
diff
changeset
|
4338 m_break_on_next_stmt = false; |
0231189f630d
provide interpreter methods for pausing, resuming, and stopping evaluation
John W. Eaton <jwe@octave.org>
parents:
29305
diff
changeset
|
4339 |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4340 if (break_on_this_statement) |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25405
diff
changeset
|
4341 { |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4342 m_dbstep_flag = 0; |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4343 |
27233
fc668ac9ce7c
re-enter debugger when doing dbstep (bug #56150)
John W. Eaton <jwe@octave.org>
parents:
27222
diff
changeset
|
4344 enter_debugger (); |
25407
ab10403a0b50
new input_system class to manage user input for the interpreter
John W. Eaton <jwe@octave.org>
parents:
25405
diff
changeset
|
4345 } |
22196
dd992fd74fce
put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents:
22164
diff
changeset
|
4346 } |
10219
979fb2606c4f
new tree_evaluator::do_keyoard function
Ryan Rusaw <rrusaw@gmail.com>
parents:
10210
diff
changeset
|
4347 |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4348 bool |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4349 tree_evaluator::is_logically_true (tree_expression *expr, |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4350 const char *warn_for) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4351 { |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4352 bool expr_value = false; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4353 |
27374
d171d356767b
don't apply std::move to temporary values
John W. Eaton <jwe@octave.org>
parents:
27373
diff
changeset
|
4354 octave_value t1 = expr->evaluate (*this); |
23435
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4355 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4356 if (t1.is_defined ()) |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4357 return t1.is_true (); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4358 else |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4359 error ("%s: undefined value used in conditional expression", warn_for); |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4360 |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4361 return expr_value; |
c452180ab672
begin refactoring parse tree evaluator
John W. Eaton <jwe@octave.org>
parents:
23398
diff
changeset
|
4362 } |
23481
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23470
diff
changeset
|
4363 |
23705
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4364 octave_value |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4365 tree_evaluator::max_recursion_depth (const octave_value_list& args, |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4366 int nargout) |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4367 { |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4368 return set_internal_variable (m_max_recursion_depth, args, nargout, |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4369 "max_recursion_depth", 0); |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4370 } |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4371 |
27203
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4372 symbol_info_list |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4373 tree_evaluator::glob_symbol_info (const std::string& pattern) const |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4374 { |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4375 return m_call_stack.glob_symbol_info (pattern); |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4376 } |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4377 |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4378 symbol_info_list |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4379 tree_evaluator::regexp_symbol_info (const std::string& pattern) const |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4380 { |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4381 return m_call_stack.regexp_symbol_info (pattern); |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4382 } |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4383 |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4384 symbol_info_list |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4385 tree_evaluator::get_symbol_info (void) |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4386 { |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4387 return m_call_stack.get_symbol_info (); |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4388 } |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4389 |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4390 symbol_info_list |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4391 tree_evaluator::top_scope_symbol_info (void) const |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4392 { |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4393 return m_call_stack.top_scope_symbol_info (); |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4394 } |
79065f9d5553
eliminate direct access to call stack in load-save functions
John W. Eaton <jwe@octave.org>
parents:
27202
diff
changeset
|
4395 |
27016
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4396 octave_map tree_evaluator::get_autoload_map (void) const |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4397 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4398 Cell func_names (dim_vector (m_autoload_map.size (), 1)); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4399 Cell file_names (dim_vector (m_autoload_map.size (), 1)); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4400 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4401 octave_idx_type i = 0; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4402 for (const auto& fcn_fname : m_autoload_map) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4403 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4404 func_names(i) = fcn_fname.first; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4405 file_names(i) = fcn_fname.second; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4406 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4407 i++; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4408 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4409 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4410 octave_map m; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4411 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4412 m.assign ("function", func_names); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4413 m.assign ("file", file_names); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4414 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4415 return m; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4416 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4417 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4418 std::string tree_evaluator::lookup_autoload (const std::string& nm) const |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4419 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4420 std::string retval; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4421 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4422 auto p = m_autoload_map.find (nm); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4423 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4424 if (p != m_autoload_map.end ()) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4425 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4426 load_path& lp = m_interpreter.get_load_path (); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4427 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4428 retval = lp.find_file (p->second); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4429 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4430 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4431 return retval; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4432 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4433 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4434 std::list<std::string> tree_evaluator::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
|
4435 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4436 std::list<std::string> names; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4437 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4438 for (const auto& fcn_fname : m_autoload_map) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4439 names.push_back (fcn_fname.first); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4440 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4441 return names; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4442 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4443 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4444 std::list<std::string> |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4445 tree_evaluator::reverse_lookup_autoload (const std::string& nm) const |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4446 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4447 std::list<std::string> names; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4448 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4449 for (const auto& fcn_fname : m_autoload_map) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4450 if (nm == fcn_fname.second) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4451 names.push_back (fcn_fname.first); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4452 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4453 return names; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4454 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4455 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4456 void tree_evaluator::add_autoload (const std::string& fcn, |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4457 const std::string& nm) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4458 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4459 std::string file_name = check_autoload_file (nm); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4460 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4461 m_autoload_map[fcn] = file_name; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4462 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4463 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4464 void tree_evaluator::remove_autoload (const std::string& fcn, |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4465 const std::string& nm) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4466 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4467 check_autoload_file (nm); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4468 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4469 // Remove function from symbol table and autoload map. |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4470 symbol_table& symtab = m_interpreter.get_symbol_table (); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4471 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4472 symtab.clear_dld_function (fcn); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4473 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4474 m_autoload_map.erase (fcn); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4475 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
4476 |
23705
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4477 octave_value |
26087
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
4478 tree_evaluator::whos_line_format (const octave_value_list& args, int nargout) |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
4479 { |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
4480 return set_internal_variable (m_whos_line_format, args, nargout, |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
4481 "whos_line_format"); |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
4482 } |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
4483 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
4484 octave_value |
23705
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4485 tree_evaluator::silent_functions (const octave_value_list& args, int nargout) |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4486 { |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4487 return set_internal_variable (m_silent_functions, args, nargout, |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4488 "silent_functions"); |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
4489 } |
23706
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
4490 |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4491 octave_value |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4492 tree_evaluator::string_fill_char (const octave_value_list& args, int nargout) |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4493 { |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4494 return set_internal_variable (m_string_fill_char, args, nargout, |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4495 "string_fill_char"); |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4496 } |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4497 |
26094
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4498 // Final step of processing an indexing error. Add the name of the |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4499 // variable being indexed, if any, then issue an error. (Will this also |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4500 // be needed by pt-lvalue, which calls subsref?) |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4501 |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29163
diff
changeset
|
4502 void tree_evaluator::final_index_error (index_exception& ie, |
26094
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4503 const tree_expression *expr) |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4504 { |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4505 std::string extra_message; |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4506 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
4507 if (is_variable (expr)) |
26094
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4508 { |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4509 std::string var = expr->name (); |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4510 |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29163
diff
changeset
|
4511 ie.set_var (var); |
26094
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4512 |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4513 symbol_table& symtab = m_interpreter.get_symbol_table (); |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4514 |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4515 octave_value fcn = symtab.find_function (var); |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4516 |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4517 if (fcn.is_function ()) |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4518 { |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4519 octave_function *fp = fcn.function_value (); |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4520 |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4521 if (fp && fp->name () == var) |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4522 extra_message |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4523 = " (note: variable '" + var + "' shadows function)"; |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4524 } |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4525 } |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4526 |
29171
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29163
diff
changeset
|
4527 std::string msg = ie.message () + extra_message; |
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29163
diff
changeset
|
4528 |
254ee9af5014
maint: More updates to standardize exception naming scheme.
Rik <rik@octave.org>
parents:
29163
diff
changeset
|
4529 error_with_id (ie.err_id (), "%s", msg.c_str ()); |
26094
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4530 } |
8fb0df0c8772
eliminate duplicate final_index_error function
John W. Eaton <jwe@octave.org>
parents:
26087
diff
changeset
|
4531 |
27005
a1ea0e7aecde
move do_who inside call_stack, make accessible from evaluator
John W. Eaton <jwe@octave.org>
parents:
27001
diff
changeset
|
4532 octave_value |
a1ea0e7aecde
move do_who inside call_stack, make accessible from evaluator
John W. Eaton <jwe@octave.org>
parents:
27001
diff
changeset
|
4533 tree_evaluator::do_who (int argc, const string_vector& argv, |
a1ea0e7aecde
move do_who inside call_stack, make accessible from evaluator
John W. Eaton <jwe@octave.org>
parents:
27001
diff
changeset
|
4534 bool return_list, bool verbose) |
a1ea0e7aecde
move do_who inside call_stack, make accessible from evaluator
John W. Eaton <jwe@octave.org>
parents:
27001
diff
changeset
|
4535 { |
a1ea0e7aecde
move do_who inside call_stack, make accessible from evaluator
John W. Eaton <jwe@octave.org>
parents:
27001
diff
changeset
|
4536 return m_call_stack.do_who (argc, argv, return_list, verbose); |
a1ea0e7aecde
move do_who inside call_stack, make accessible from evaluator
John W. Eaton <jwe@octave.org>
parents:
27001
diff
changeset
|
4537 } |
a1ea0e7aecde
move do_who inside call_stack, make accessible from evaluator
John W. Eaton <jwe@octave.org>
parents:
27001
diff
changeset
|
4538 |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4539 octave_value_list |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4540 tree_evaluator::make_value_list (tree_argument_list *args, |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4541 const string_vector& arg_nm) |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4542 { |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4543 octave_value_list retval; |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4544 |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4545 if (args) |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4546 { |
27373
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
4547 unwind_protect_var<const std::list<octave_lvalue> *> |
25627c524ad8
where possible, use new unwind-protect classes in evaluator
John W. Eaton <jwe@octave.org>
parents:
27371
diff
changeset
|
4548 upv (m_lvalue_list, nullptr); |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4549 |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4550 int len = args->length (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4551 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4552 unwind_protect_var<int> upv2 (m_index_position); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4553 unwind_protect_var<int> upv3 (m_num_indices); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4554 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4555 m_num_indices = len; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4556 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4557 std::list<octave_value> arg_vals; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4558 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4559 int k = 0; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4560 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4561 for (auto elt : *args) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4562 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4563 // FIXME: is it possible for elt to be invalid? |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4564 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4565 if (! elt) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4566 break; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4567 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4568 m_index_position = k++; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4569 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4570 octave_value tmp = elt->evaluate (*this); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4571 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4572 if (tmp.is_cs_list ()) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4573 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4574 octave_value_list tmp_ovl = tmp.list_value (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4575 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4576 for (octave_idx_type i = 0; i < tmp_ovl.length (); i++) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4577 arg_vals.push_back (tmp_ovl(i)); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4578 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4579 else if (tmp.is_defined ()) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4580 arg_vals.push_back (tmp); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4581 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4582 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4583 retval = octave_value_list (arg_vals); |
27371
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4584 } |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4585 |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4586 octave_idx_type n = retval.length (); |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4587 |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4588 if (n > 0) |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4589 retval.stash_name_tags (arg_nm); |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4590 |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4591 return retval; |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4592 } |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4593 |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4594 std::list<octave_lvalue> |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4595 tree_evaluator::make_lvalue_list (tree_argument_list *lhs) |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4596 { |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4597 std::list<octave_lvalue> retval; |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4598 |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4599 for (tree_expression *elt : *lhs) |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4600 retval.push_back (elt->lvalue (*this)); |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4601 |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4602 return retval; |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4603 } |
fcaecdbc8d8a
don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents:
27370
diff
changeset
|
4604 |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4605 void |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
4606 tree_evaluator::push_echo_state (int type, const std::string& file_name, |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4607 int pos) |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4608 { |
28429
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
4609 unwind_protect *frame = m_call_stack.curr_fcn_unwind_protect_frame (); |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
4610 |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
4611 if (frame) |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
4612 { |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
4613 push_echo_state_cleanup (*frame); |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
4614 |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
4615 set_echo_state (type, file_name, pos); |
8eb8ba8aff9a
refactor octave_function call method
John W. Eaton <jwe@octave.org>
parents:
28426
diff
changeset
|
4616 } |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4617 } |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4618 |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4619 void |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4620 tree_evaluator::set_echo_state (int type, const std::string& file_name, |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4621 int pos) |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4622 { |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4623 m_echo_state = echo_this_file (file_name, type); |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4624 m_echo_file_name = file_name; |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4625 m_echo_file_pos = pos; |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4626 } |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4627 |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4628 void |
25653
b3d357990b52
better use of templates for action_container and derived classes
John W. Eaton <jwe@octave.org>
parents:
25483
diff
changeset
|
4629 tree_evaluator::uwp_set_echo_state (bool state, const std::string& file_name, |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4630 int pos) |
25653
b3d357990b52
better use of templates for action_container and derived classes
John W. Eaton <jwe@octave.org>
parents:
25483
diff
changeset
|
4631 { |
b3d357990b52
better use of templates for action_container and derived classes
John W. Eaton <jwe@octave.org>
parents:
25483
diff
changeset
|
4632 m_echo_state = state; |
b3d357990b52
better use of templates for action_container and derived classes
John W. Eaton <jwe@octave.org>
parents:
25483
diff
changeset
|
4633 m_echo_file_name = file_name; |
b3d357990b52
better use of templates for action_container and derived classes
John W. Eaton <jwe@octave.org>
parents:
25483
diff
changeset
|
4634 m_echo_file_pos = pos; |
b3d357990b52
better use of templates for action_container and derived classes
John W. Eaton <jwe@octave.org>
parents:
25483
diff
changeset
|
4635 } |
b3d357990b52
better use of templates for action_container and derived classes
John W. Eaton <jwe@octave.org>
parents:
25483
diff
changeset
|
4636 |
b3d357990b52
better use of templates for action_container and derived classes
John W. Eaton <jwe@octave.org>
parents:
25483
diff
changeset
|
4637 void |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4638 tree_evaluator::maybe_set_echo_state (void) |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4639 { |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
4640 octave_function *caller = caller_function (); |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4641 |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4642 if (caller && caller->is_user_code ()) |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4643 { |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4644 octave_user_code *fcn = dynamic_cast<octave_user_code *> (caller); |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4645 |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4646 int type = fcn->is_user_function () ? ECHO_FUNCTIONS : ECHO_SCRIPTS; |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4647 |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4648 std::string file_name = fcn->fcn_file_name (); |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4649 |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4650 // We want the line where "echo" was called, not the line number |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4651 // stored in the stack frame that was created for the echo |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4652 // function (that will always be -1). |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4653 |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4654 int pos = m_call_stack.current_user_code_line (); |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4655 |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4656 if (pos < 0) |
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
4657 pos = 1; |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4658 |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4659 set_echo_state (type, file_name, pos); |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4660 } |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4661 } |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4662 |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4663 void |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4664 tree_evaluator::push_echo_state_cleanup (unwind_protect& frame) |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4665 { |
29253
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
4666 frame.add (&tree_evaluator::uwp_set_echo_state, this, |
28913793f678
prefer unwind_action over unwind_protect in more places
John W. Eaton <jwe@octave.org>
parents:
29171
diff
changeset
|
4667 m_echo_state, m_echo_file_name, m_echo_file_pos); |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4668 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4669 |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4670 bool tree_evaluator::maybe_push_echo_state_cleanup (void) |
23706
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
4671 { |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4672 // This function is expected to be called from ECHO, which would be |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4673 // the top of the call stack. If the caller of ECHO is a |
25399
6ca2c0d76d84
store unwind protect frame for function evaluation in call_stack object
John W. Eaton <jwe@octave.org>
parents:
25393
diff
changeset
|
4674 // user-defined function or script, then set up unwind-protect |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4675 // elements to restore echo state. |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4676 |
25399
6ca2c0d76d84
store unwind protect frame for function evaluation in call_stack object
John W. Eaton <jwe@octave.org>
parents:
25393
diff
changeset
|
4677 unwind_protect *frame = m_call_stack.curr_fcn_unwind_protect_frame (); |
6ca2c0d76d84
store unwind protect frame for function evaluation in call_stack object
John W. Eaton <jwe@octave.org>
parents:
25393
diff
changeset
|
4678 |
6ca2c0d76d84
store unwind protect frame for function evaluation in call_stack object
John W. Eaton <jwe@octave.org>
parents:
25393
diff
changeset
|
4679 if (frame) |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4680 { |
25399
6ca2c0d76d84
store unwind protect frame for function evaluation in call_stack object
John W. Eaton <jwe@octave.org>
parents:
25393
diff
changeset
|
4681 push_echo_state_cleanup (*frame); |
6ca2c0d76d84
store unwind protect frame for function evaluation in call_stack object
John W. Eaton <jwe@octave.org>
parents:
25393
diff
changeset
|
4682 return true; |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4683 } |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4684 |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4685 return false; |
23706
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
4686 } |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4687 |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4688 |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4689 octave_value |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4690 tree_evaluator::echo (const octave_value_list& args, int) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4691 { |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4692 bool cleanup_pushed = maybe_push_echo_state_cleanup (); |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4693 |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4694 string_vector argv = args.make_argv (); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4695 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4696 switch (args.length ()) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4697 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4698 case 0: |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4699 if ((m_echo & ECHO_SCRIPTS) || (m_echo & ECHO_FUNCTIONS)) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4700 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4701 m_echo = ECHO_OFF; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4702 m_echo_files.clear (); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4703 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4704 else |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4705 m_echo = ECHO_SCRIPTS; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4706 break; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4707 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4708 case 1: |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4709 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4710 std::string arg0 = argv[0]; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4711 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4712 if (arg0 == "on") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4713 m_echo = ECHO_SCRIPTS; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4714 else if (arg0 == "off") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4715 m_echo = ECHO_OFF; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4716 else |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4717 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4718 std::string file = fcn_file_in_path (arg0); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4719 file = sys::env::make_absolute (file); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4720 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4721 if (file.empty ()) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4722 error ("echo: no such file %s", arg0.c_str ()); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4723 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4724 if (m_echo & ECHO_ALL) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4725 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4726 // Echo is enabled for all functions, so turn it off |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4727 // for this one. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4728 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4729 m_echo_files[file] = false; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4730 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4731 else |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4732 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4733 // Echo may be enabled for specific functions. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4734 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4735 auto p = m_echo_files.find (file); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4736 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4737 if (p == m_echo_files.end ()) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4738 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4739 // Not this one, so enable it. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4740 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4741 m_echo |= ECHO_FUNCTIONS; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4742 m_echo_files[file] = true; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4743 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4744 else |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4745 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4746 // This one is already in the list. Flip the |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4747 // status for it. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4748 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4749 p->second = ! p->second; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4750 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4751 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4752 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4753 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4754 break; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4755 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4756 case 2: |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4757 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4758 std::string arg0 = argv[0]; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4759 std::string arg1 = argv[1]; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4760 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4761 if (arg1 == "on" || arg1 == "off") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4762 std::swap (arg0, arg1); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4763 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4764 if (arg0 == "on") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4765 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4766 if (arg1 == "all") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4767 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4768 m_echo = (ECHO_SCRIPTS | ECHO_FUNCTIONS | ECHO_ALL); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4769 m_echo_files.clear (); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4770 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4771 else |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4772 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4773 std::string file = fcn_file_in_path (arg1); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4774 file = sys::env::make_absolute (file); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4775 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4776 if (file.empty ()) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4777 error ("echo: no such file %s", arg1.c_str ()); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4778 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4779 m_echo |= ECHO_FUNCTIONS; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4780 m_echo_files[file] = true; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4781 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4782 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4783 else if (arg0 == "off") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4784 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4785 if (arg1 == "all") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4786 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4787 m_echo = ECHO_OFF; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4788 m_echo_files.clear (); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4789 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4790 else |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4791 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4792 std::string file = fcn_file_in_path (arg1); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4793 file = sys::env::make_absolute (file); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4794 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4795 if (file.empty ()) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4796 error ("echo: no such file %s", arg1.c_str ()); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4797 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4798 m_echo_files[file] = false; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4799 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4800 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4801 else |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4802 print_usage (); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4803 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4804 break; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4805 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4806 default: |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4807 print_usage (); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4808 break; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4809 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4810 |
23729
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4811 if (cleanup_pushed) |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4812 maybe_set_echo_state (); |
06b3d1d54054
allow echo state to be modified from inside functions
John W. Eaton <jwe@octave.org>
parents:
23728
diff
changeset
|
4813 |
23913
062ce545b21e
mark octave_value from octave_value_list constructor explicit
John W. Eaton <jwe@octave.org>
parents:
23876
diff
changeset
|
4814 return octave_value (); |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4815 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4816 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4817 bool tree_evaluator::in_debug_repl (void) const |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4818 { |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4819 return (m_debugger_stack.empty () |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4820 ? false : m_debugger_stack.top()->in_debug_repl ()); |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4821 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4822 |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
4823 void tree_evaluator::dbcont (void) |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4824 { |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4825 if (! m_debugger_stack.empty ()) |
27282
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
4826 m_debugger_stack.top()->dbcont (); |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
4827 } |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
4828 |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
4829 void tree_evaluator::dbquit (bool all) |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
4830 { |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
4831 if (! m_debugger_stack.empty ()) |
49c60d16866f
improve dbquit and dbcont behavior
John W. Eaton <jwe@octave.org>
parents:
27277
diff
changeset
|
4832 m_debugger_stack.top()->dbquit (all); |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4833 } |
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
4834 |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4835 static octave_value end_value (const octave_value& value, |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4836 octave_idx_type index_position, |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4837 octave_idx_type num_indices) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4838 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4839 dim_vector dv = value.dims (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4840 int ndims = dv.ndims (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4841 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4842 if (num_indices < ndims) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4843 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4844 for (int i = num_indices; i < ndims; i++) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4845 dv(num_indices-1) *= dv(i); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4846 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4847 if (num_indices == 1) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4848 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4849 ndims = 2; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4850 dv.resize (ndims); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4851 dv(1) = 1; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4852 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4853 else |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4854 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4855 ndims = num_indices; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4856 dv.resize (ndims); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4857 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4858 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4859 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4860 return (index_position < ndims |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4861 ? octave_value (dv(index_position)) : octave_value (1.0)); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4862 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4863 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4864 octave_value_list |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4865 tree_evaluator::evaluate_end_expression (const octave_value_list& args) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4866 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4867 int nargin = args.length (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4868 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4869 if (nargin != 0 && nargin != 3) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4870 print_usage (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4871 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4872 if (nargin == 3) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4873 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4874 octave_idx_type index_position |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4875 = args(1).xidx_type_value ("end: K must be integer value"); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4876 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4877 if (index_position < 1) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4878 error ("end: K must be greater than zero"); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4879 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4880 octave_idx_type num_indices |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4881 = args(2).xidx_type_value ("end: N must be integer value"); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4882 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4883 if (num_indices < 1) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4884 error ("end: N must be greater than zero"); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4885 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4886 return end_value (args(0), index_position-1, num_indices); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4887 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4888 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4889 // If m_indexed_object is undefined, then this use of 'end' is |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4890 // either appearing in a function call argument list or in an |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4891 // attempt to index an undefined symbol. There seems to be no |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4892 // reasonable way to provide a better error message. So just fail |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4893 // with an invalid use message. See bug #58830. |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4894 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4895 if (m_indexed_object.is_undefined ()) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4896 error ("invalid use of 'end': may only be used to index existing value"); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4897 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4898 octave_value expr_result; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4899 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4900 if (m_index_list.empty ()) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4901 expr_result = m_indexed_object; |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4902 else |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4903 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4904 try |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4905 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4906 // When evaluating "end" with no arguments, we should have |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4907 // been called from the built-in Fend function that appears |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4908 // in the context of an argument list. Fend will be |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4909 // evaluated in its own stack frame. But we need to |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4910 // evaluate the partial expression that the special "end" |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4911 // token applies to in the calling stack frame. |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4912 |
29572
aef11bb4e6d1
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29527
diff
changeset
|
4913 unwind_action act ([=] (std::size_t frm) |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4914 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4915 m_call_stack.restore_frame (frm); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4916 }, m_call_stack.current_frame ()); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4917 |
29654
d13d090cb03a
use std::size_t and std::ptrdiff_t in C++ code (bug #60471)
John W. Eaton <jwe@octave.org>
parents:
29477
diff
changeset
|
4918 std::size_t n = m_call_stack.find_current_user_frame (); |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4919 m_call_stack.goto_frame (n); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4920 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4921 // End is only valid inside argument lists used for |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4922 // indexing. The dispatch class is set by the function that |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4923 // evaluates the argument list. |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4924 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4925 // Silently ignore extra output values. |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4926 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4927 octave_value_list tmp |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4928 = m_indexed_object.subsref (m_index_type, m_index_list, 1); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4929 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4930 expr_result = tmp.length () ? tmp(0) : octave_value (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4931 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4932 if (expr_result.is_cs_list ()) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4933 err_indexed_cs_list (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4934 } |
29163
8f67ad8b3103
maint: Updating naming conventions for exceptions and use const where possible.
Rik <rik@octave.org>
parents:
29117
diff
changeset
|
4935 catch (const index_exception&) |
28804
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4936 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4937 error ("error evaluating partial expression for END"); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4938 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4939 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4940 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4941 if (expr_result.isobject ()) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4942 { |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4943 // FIXME: is there a better way to lookup and execute a method |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4944 // that handles all the details like setting the dispatch class |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4945 // appropriately? |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4946 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4947 std::string dispatch_class = expr_result.class_name (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4948 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4949 symbol_table& symtab = m_interpreter.get_symbol_table (); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4950 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4951 octave_value meth = symtab.find_method ("end", dispatch_class); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4952 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4953 if (meth.is_defined ()) |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4954 return m_interpreter.feval |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4955 (meth, ovl (expr_result, m_index_position+1, m_num_indices), 1); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4956 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4957 |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4958 return end_value (expr_result, m_index_position, m_num_indices); |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4959 } |
3719f5d452d4
refactor implementation of END indexing in interpreter (bug #58953)
John W. Eaton <jwe@octave.org> and Fernando Alvarruiz
parents:
28726
diff
changeset
|
4960 |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4961 octave_value |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4962 tree_evaluator::PS4 (const octave_value_list& args, int nargout) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4963 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4964 return set_internal_variable (m_PS4, args, nargout, "PS4"); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4965 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4966 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4967 bool tree_evaluator::echo_this_file (const std::string& file, int type) const |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4968 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4969 if ((type & m_echo) == ECHO_SCRIPTS) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4970 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4971 // Asking about scripts and echo is enabled for them. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4972 return true; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4973 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4974 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4975 if ((type & m_echo) == ECHO_FUNCTIONS) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4976 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4977 // Asking about functions and echo is enabled for functions. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4978 // Now, which ones? |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4979 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4980 auto p = m_echo_files.find (file); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4981 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4982 if (m_echo & ECHO_ALL) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4983 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4984 // Return true ulness echo was turned off for a specific |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4985 // file. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4986 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4987 return (p == m_echo_files.end () || p->second); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4988 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4989 else |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4990 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4991 // Return true if echo is specifically enabled for this file. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4992 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4993 return p != m_echo_files.end () && p->second; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4994 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4995 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4996 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4997 return false; |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4998 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
4999 |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
5000 void tree_evaluator::echo_code (int line) |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5001 { |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5002 std::string prefix = command_editor::decode_prompt_string (m_PS4); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5003 |
27873
020d0e8f7ac6
reafactor mlock, munlock, and mislocked functions
John W. Eaton <jwe@octave.org>
parents:
27844
diff
changeset
|
5004 octave_function *curr_fcn = m_call_stack.current_function (); |
23728
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5005 |
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5006 if (curr_fcn && curr_fcn->is_user_code ()) |
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5007 { |
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5008 octave_user_code *code = dynamic_cast<octave_user_code *> (curr_fcn); |
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5009 |
29339
93530bb4bd6f
improve behavior of echo (bug #56068)
John W. Eaton <jwe@octave.org>
parents:
29307
diff
changeset
|
5010 int num_lines = line - m_echo_file_pos + 1; |
23728
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5011 |
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5012 std::deque<std::string> lines |
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5013 = code->get_code_lines (m_echo_file_pos, num_lines); |
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5014 |
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5015 for (auto& elt : lines) |
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5016 octave_stdout << prefix << elt << std::endl; |
b40b7243a782
new class for caching file contents for debug and echo
John W. Eaton <jwe@octave.org>
parents:
23723
diff
changeset
|
5017 } |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5018 } |
25360
bc5f225bc578
eliminate some global accesses to the breakpoint table
John W. Eaton <jwe@octave.org>
parents:
25337
diff
changeset
|
5019 |
25403
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5020 // Decide if it's time to quit a for or while loop. |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5021 bool tree_evaluator::quit_loop_now (void) |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5022 { |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5023 octave_quit (); |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5024 |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5025 // Maybe handle 'continue N' someday... |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5026 |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5027 if (m_continuing) |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5028 m_continuing--; |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5029 |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5030 bool quit = (m_returning || m_breaking || m_continuing); |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5031 |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5032 if (m_breaking) |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5033 m_breaking--; |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5034 |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5035 return quit; |
2b7d7a3f5f57
move returning, breaking, and continuing flags to evaluator
John W. Eaton <jwe@octave.org>
parents:
25402
diff
changeset
|
5036 } |
26039
d2aae3570c81
perform automatic function variable binding in tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
26004
diff
changeset
|
5037 |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
5038 void tree_evaluator::bind_auto_fcn_vars (const string_vector& arg_names, |
28540
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
5039 const Matrix& ignored_outputs, |
26039
d2aae3570c81
perform automatic function variable binding in tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
26004
diff
changeset
|
5040 int nargin, int nargout, |
d2aae3570c81
perform automatic function variable binding in tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
26004
diff
changeset
|
5041 bool takes_varargs, |
d2aae3570c81
perform automatic function variable binding in tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
26004
diff
changeset
|
5042 const octave_value_list& va_args) |
d2aae3570c81
perform automatic function variable binding in tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
26004
diff
changeset
|
5043 { |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
5044 set_auto_fcn_var (stack_frame::ARG_NAMES, Cell (arg_names)); |
28540
ea5a632b2553
improve error checking for undefined function outputs (bug #58686, #58695)
John W. Eaton <jwe@octave.org>
parents:
28532
diff
changeset
|
5045 set_auto_fcn_var (stack_frame::IGNORED, ignored_outputs); |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
5046 set_auto_fcn_var (stack_frame::NARGIN, nargin); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
5047 set_auto_fcn_var (stack_frame::NARGOUT, nargout); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
5048 set_auto_fcn_var (stack_frame::SAVED_WARNING_STATES, octave_value ()); |
26039
d2aae3570c81
perform automatic function variable binding in tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
26004
diff
changeset
|
5049 |
d2aae3570c81
perform automatic function variable binding in tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
26004
diff
changeset
|
5050 if (takes_varargs) |
26661
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
5051 assign ("varargin", va_args.cell_value ()); |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
5052 } |
cf9e10ce3351
move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents:
26512
diff
changeset
|
5053 |
27016
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5054 std::string |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5055 tree_evaluator::check_autoload_file (const std::string& nm) const |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5056 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5057 if (sys::env::absolute_pathname (nm)) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5058 return nm; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5059 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5060 std::string full_name = nm; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5061 |
27037
8408acb7ca4f
make dbup/dbdown work again (bug #56020)
John W. Eaton <jwe@octave.org>
parents:
27019
diff
changeset
|
5062 octave_user_code *fcn = m_call_stack.current_user_code (); |
27016
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5063 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5064 bool found = false; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5065 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5066 if (fcn) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5067 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5068 std::string fname = fcn->fcn_file_name (); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5069 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5070 if (! fname.empty ()) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5071 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5072 fname = sys::env::make_absolute (fname); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5073 fname = fname.substr (0, fname.find_last_of (sys::file_ops::dir_sep_str ()) + 1); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5074 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5075 sys::file_stat fs (fname + nm); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5076 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5077 if (fs.exists ()) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5078 { |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5079 full_name = fname + nm; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5080 found = true; |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5081 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5082 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5083 } |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5084 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5085 if (! found) |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5086 warning_with_id ("Octave:autoload-relative-file-name", |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5087 "autoload: '%s' is not an absolute filename", |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5088 nm.c_str ()); |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5089 |
9b261300a001
move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents:
27015
diff
changeset
|
5090 return full_name; |
26039
d2aae3570c81
perform automatic function variable binding in tree_evaluator
John W. Eaton <jwe@octave.org>
parents:
26004
diff
changeset
|
5091 } |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29956
diff
changeset
|
5092 |
23705
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
5093 DEFMETHOD (max_recursion_depth, interp, args, nargout, |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
5094 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5095 @deftypefn {} {@var{val} =} max_recursion_depth () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5096 @deftypefnx {} {@var{old_val} =} max_recursion_depth (@var{new_val}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5097 @deftypefnx {} {} max_recursion_depth (@var{new_val}, "local") |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5098 Query or set the internal limit on the number of times a function may |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5099 be called recursively. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5100 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5101 If the limit is exceeded, an error message is printed and control returns to |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5102 the top level. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5103 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5104 When called from inside a function with the @qcode{"local"} option, the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5105 variable is changed locally for the function and any subroutines it calls. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5106 The original variable value is restored when exiting the function. |
24855
41f80b9af274
prevent stack overflow crash on deeply nested function calls (bug #47620)
John W. Eaton <jwe@octave.org>
parents:
24738
diff
changeset
|
5107 |
41f80b9af274
prevent stack overflow crash on deeply nested function calls (bug #47620)
John W. Eaton <jwe@octave.org>
parents:
24738
diff
changeset
|
5108 @seealso{max_stack_depth} |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5109 @end deftypefn */) |
10578
cb0883127251
limit on recursion via calls to source function
John W. Eaton <jwe@octave.org>
parents:
10315
diff
changeset
|
5110 { |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29960
diff
changeset
|
5111 tree_evaluator& tw = interp.get_evaluator (); |
23705
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
5112 |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
5113 return tw.max_recursion_depth (args, nargout); |
10578
cb0883127251
limit on recursion via calls to source function
John W. Eaton <jwe@octave.org>
parents:
10315
diff
changeset
|
5114 } |
cb0883127251
limit on recursion via calls to source function
John W. Eaton <jwe@octave.org>
parents:
10315
diff
changeset
|
5115 |
12833
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5116 /* |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5117 %!test |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5118 %! orig_val = max_recursion_depth (); |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5119 %! old_val = max_recursion_depth (2*orig_val); |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5120 %! assert (orig_val, old_val); |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5121 %! assert (max_recursion_depth (), 2*orig_val); |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5122 %! max_recursion_depth (orig_val); |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5123 %! assert (max_recursion_depth (), orig_val); |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14294
diff
changeset
|
5124 |
28930
2883b3d08b7e
maint: Remove unnecessary parentheses bracketing %!error BIST tests.
Rik <rik@octave.org>
parents:
28857
diff
changeset
|
5125 %!error max_recursion_depth (1, 2) |
12833
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5126 */ |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5127 |
26087
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5128 DEFMETHOD (whos_line_format, interp, args, nargout, |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5129 doc: /* -*- texinfo -*- |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5130 @deftypefn {} {@var{val} =} whos_line_format () |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5131 @deftypefnx {} {@var{old_val} =} whos_line_format (@var{new_val}) |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5132 @deftypefnx {} {} whos_line_format (@var{new_val}, "local") |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5133 Query or set the format string used by the command @code{whos}. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5134 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5135 A full format string is: |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5136 @c Set example in small font to prevent overfull line |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5137 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5138 @smallexample |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5139 %[modifier]<command>[:width[:left-min[:balance]]]; |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5140 @end smallexample |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5141 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5142 The following command sequences are available: |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5143 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5144 @table @code |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5145 @item %a |
29856
56b3e2af0298
Add 's'=sparse attribute for whos function (bug #60687)
Rik <rik@octave.org>
parents:
29848
diff
changeset
|
5146 Prints attributes of variables (c=complex, s=sparse, f=formal parameter, |
56b3e2af0298
Add 's'=sparse attribute for whos function (bug #60687)
Rik <rik@octave.org>
parents:
29848
diff
changeset
|
5147 g=global, p=persistent). |
26087
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5148 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5149 @item %b |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5150 Prints number of bytes occupied by variables. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5151 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5152 @item %c |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5153 Prints class names of variables. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5154 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5155 @item %e |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5156 Prints elements held by variables. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5157 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5158 @item %n |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5159 Prints variable names. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5160 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5161 @item %s |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5162 Prints dimensions of variables. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5163 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5164 @item %t |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5165 Prints type names of variables. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5166 @end table |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5167 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5168 Every command may also have an alignment modifier: |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5169 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5170 @table @code |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5171 @item l |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5172 Left alignment. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5173 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5174 @item r |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5175 Right alignment (default). |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5176 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5177 @item c |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5178 Column-aligned (only applicable to command %s). |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5179 @end table |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5180 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5181 The @code{width} parameter is a positive integer specifying the minimum |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5182 number of columns used for printing. No maximum is needed as the field will |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5183 auto-expand as required. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5184 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5185 The parameters @code{left-min} and @code{balance} are only available when |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5186 the column-aligned modifier is used with the command @samp{%s}. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5187 @code{balance} specifies the column number within the field width which |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5188 will be aligned between entries. Numbering starts from 0 which indicates |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5189 the leftmost column. @code{left-min} specifies the minimum field width to |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5190 the left of the specified balance column. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5191 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5192 The default format is: |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5193 |
29856
56b3e2af0298
Add 's'=sparse attribute for whos function (bug #60687)
Rik <rik@octave.org>
parents:
29848
diff
changeset
|
5194 @example |
56b3e2af0298
Add 's'=sparse attribute for whos function (bug #60687)
Rik <rik@octave.org>
parents:
29848
diff
changeset
|
5195 " %la:5; %ln:6; %cs:16:6:1; %rb:12; %lc:-1;@backslashchar{}n" |
56b3e2af0298
Add 's'=sparse attribute for whos function (bug #60687)
Rik <rik@octave.org>
parents:
29848
diff
changeset
|
5196 @end example |
26087
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5197 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5198 When called from inside a function with the @qcode{"local"} option, the |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5199 variable is changed locally for the function and any subroutines it calls. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5200 The original variable value is restored when exiting the function. |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5201 @seealso{whos} |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5202 @end deftypefn */) |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5203 { |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29960
diff
changeset
|
5204 tree_evaluator& tw = interp.get_evaluator (); |
26087
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5205 |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5206 return tw.whos_line_format (args, nargout); |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5207 } |
7656fcd0ff9f
move whos_line_format to evaluator
John W. Eaton <jwe@octave.org>
parents:
26065
diff
changeset
|
5208 |
23705
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
5209 DEFMETHOD (silent_functions, interp, args, nargout, |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
5210 doc: /* -*- texinfo -*- |
21966
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5211 @deftypefn {} {@var{val} =} silent_functions () |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5212 @deftypefnx {} {@var{old_val} =} silent_functions (@var{new_val}) |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5213 @deftypefnx {} {} silent_functions (@var{new_val}, "local") |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5214 Query or set the internal variable that controls whether internal |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5215 output from a function is suppressed. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5216 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5217 If this option is disabled, Octave will display the results produced by |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5218 evaluating expressions within a function body that are not terminated with |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5219 a semicolon. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5220 |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5221 When called from inside a function with the @qcode{"local"} option, the |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5222 variable is changed locally for the function and any subroutines it calls. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5223 The original variable value is restored when exiting the function. |
112b20240c87
move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents:
21922
diff
changeset
|
5224 @end deftypefn */) |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
5225 { |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29960
diff
changeset
|
5226 tree_evaluator& tw = interp.get_evaluator (); |
23705
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
5227 |
4c597585ff52
move Vmax_recursion_depth and Vsilent_functions to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23702
diff
changeset
|
5228 return tw.silent_functions (args, nargout); |
8658
73c4516fae10
New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents:
diff
changeset
|
5229 } |
12833
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5230 |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5231 /* |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5232 %!test |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5233 %! orig_val = silent_functions (); |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5234 %! old_val = silent_functions (! orig_val); |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5235 %! assert (orig_val, old_val); |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5236 %! assert (silent_functions (), ! orig_val); |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5237 %! silent_functions (orig_val); |
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5238 %! assert (silent_functions (), orig_val); |
14429
eff4a5933e28
Update %!tests in src/ directory with Octave coding conventions.
Rik <octave@nomad.inbox5.com>
parents:
14294
diff
changeset
|
5239 |
28930
2883b3d08b7e
maint: Remove unnecessary parentheses bracketing %!error BIST tests.
Rik <rik@octave.org>
parents:
28857
diff
changeset
|
5240 %!error silent_functions (1, 2) |
12833
9f0f2c226053
codesprint: new tests for functions in pt-eval.cc
John W. Eaton <jwe@octave.org>
parents:
11586
diff
changeset
|
5241 */ |
23706
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5242 |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5243 DEFMETHOD (string_fill_char, interp, args, nargout, |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5244 doc: /* -*- texinfo -*- |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5245 @deftypefn {} {@var{val} =} string_fill_char () |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5246 @deftypefnx {} {@var{old_val} =} string_fill_char (@var{new_val}) |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5247 @deftypefnx {} {} string_fill_char (@var{new_val}, "local") |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5248 Query or set the internal variable used to pad all rows of a character |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5249 matrix to the same length. |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5250 |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5251 The value must be a single character and the default is @qcode{" "} (a |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5252 single space). For example: |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5253 |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5254 @example |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5255 @group |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5256 string_fill_char ("X"); |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5257 [ "these"; "are"; "strings" ] |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5258 @result{} "theseXX" |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5259 "areXXXX" |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5260 "strings" |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5261 @end group |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5262 @end example |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5263 |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5264 When called from inside a function with the @qcode{"local"} option, the |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5265 variable is changed locally for the function and any subroutines it calls. |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5266 The original variable value is restored when exiting the function. |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5267 @end deftypefn */) |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5268 { |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29960
diff
changeset
|
5269 tree_evaluator& tw = interp.get_evaluator (); |
23706
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5270 |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5271 return tw.string_fill_char (args, nargout); |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5272 } |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5273 |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5274 /* |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5275 ## string_fill_char() function call must be outside of %!test block |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5276 ## due to the way a %!test block is wrapped inside a function |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5277 %!shared orig_val, old_val |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5278 %! orig_val = string_fill_char (); |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5279 %! old_val = string_fill_char ("X"); |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5280 %!test |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5281 %! assert (orig_val, old_val); |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5282 %! assert (string_fill_char (), "X"); |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5283 %! assert (["these"; "are"; "strings"], ["theseXX"; "areXXXX"; "strings"]); |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5284 %! string_fill_char (orig_val); |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5285 %! assert (string_fill_char (), orig_val); |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5286 |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5287 %!assert ( [ [], {1} ], {1} ) |
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5288 |
28930
2883b3d08b7e
maint: Remove unnecessary parentheses bracketing %!error BIST tests.
Rik <rik@octave.org>
parents:
28857
diff
changeset
|
5289 %!error string_fill_char (1, 2) |
23706
6683451b75b2
move Vstring_fill_char to tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23705
diff
changeset
|
5290 */ |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5291 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5292 DEFMETHOD (PS4, interp, args, nargout, |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5293 doc: /* -*- texinfo -*- |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5294 @deftypefn {} {@var{val} =} PS4 () |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5295 @deftypefnx {} {@var{old_val} =} PS4 (@var{new_val}) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5296 @deftypefnx {} {} PS4 (@var{new_val}, "local") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5297 Query or set the character string used to prefix output produced |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5298 when echoing commands is enabled. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5299 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5300 The default value is @qcode{"+ "}. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5301 @xref{Diary and Echo Commands}, for a description of echoing commands. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5302 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5303 When called from inside a function with the @qcode{"local"} option, the |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5304 variable is changed locally for the function and any subroutines it calls. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5305 The original variable value is restored when exiting the function. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5306 @seealso{echo, PS1, PS2} |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5307 @end deftypefn */) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5308 { |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29960
diff
changeset
|
5309 tree_evaluator& tw = interp.get_evaluator (); |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5310 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5311 return tw.PS4 (args, nargout); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5312 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5313 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5314 DEFMETHOD (echo, interp, args, nargout, |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5315 doc: /* -*- texinfo -*- |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5316 @deftypefn {} {} echo |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5317 @deftypefnx {} {} echo on |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5318 @deftypefnx {} {} echo off |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5319 @deftypefnx {} {} echo on all |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5320 @deftypefnx {} {} echo off all |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5321 @deftypefnx {} {} echo @var{function} on |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5322 @deftypefnx {} {} echo @var{function} off |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5323 Control whether commands are displayed as they are executed. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5324 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5325 Valid options are: |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5326 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5327 @table @code |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5328 @item on |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5329 Enable echoing of commands as they are executed in script files. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5330 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5331 @item off |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5332 Disable echoing of commands as they are executed in script files. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5333 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5334 @item on all |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5335 Enable echoing of commands as they are executed in script files and |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5336 functions. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5337 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5338 @item off all |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5339 Disable echoing of commands as they are executed in script files and |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5340 functions. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5341 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5342 @item @var{function} on |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5343 Enable echoing of commands as they are executed in the named function. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5344 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5345 @item @var{function} off |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5346 Disable echoing of commands as they are executed in the named function. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5347 @end table |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5348 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5349 @noindent |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5350 With no arguments, @code{echo} toggles the current echo state. |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5351 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5352 @seealso{PS4} |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5353 @end deftypefn */) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5354 { |
29961
7d6709900da7
eliminate octave:: namespace tags in DEFUN and DEFMETHOD and more
John W. Eaton <jwe@octave.org>
parents:
29960
diff
changeset
|
5355 tree_evaluator& tw = interp.get_evaluator (); |
23723
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5356 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5357 return tw.echo (args, nargout); |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5358 } |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5359 |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5360 /* |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5361 %!error echo ([]) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5362 %!error echo (0) |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5363 %!error echo ("") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5364 %!error echo ("Octave") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5365 %!error echo ("off", "invalid") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5366 %!error echo ("on", "invalid") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5367 %!error echo ("on", "all", "all") |
ab8831d346c1
revamp echo command and move related variables inside tree_evaluator class
John W. Eaton <jwe@octave.org>
parents:
23706
diff
changeset
|
5368 */ |
29958
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29956
diff
changeset
|
5369 |
32c3a5805893
move DEFUN and DEFMETHOD functions inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
29956
diff
changeset
|
5370 OCTAVE_NAMESPACE_END |