Mercurial > octave
annotate libinterp/corefcn/defun.cc @ 27000:711f23332204
eliminate some unnecessary include statements
* oct-lvalue.h: Include stack-frame.h instead of call-stack.h.
* defun.cc, ddef-method.cc, cdef-package.cc: Don't include pt-eval.h.
* bp-table.cc, symtab.cc, toplev.cc: Don't include call-stack.h.
* fcn-info.cc, symtab.cc, pt-decl.h, pt-misc.h: Don't include symrec.h.
* symrec.cc: Don't include symscope.h.
* cdef-package.cc, pt-stmt.cc: Don't include pt-walk.h.
* ov-classdef.cc: Don't include symtab.h.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 29 Mar 2019 17:06:55 +0000 |
parents | fff643eb3514 |
children | bd49997051ef |
rev | line source |
---|---|
2974 | 1 /* |
2 | |
26376
00f796120a6d
maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents:
25438
diff
changeset
|
3 Copyright (C) 1996-2019 John W. Eaton |
2974 | 4 |
5 This file is part of Octave. | |
6 | |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24349
diff
changeset
|
7 Octave is free software: you can redistribute it and/or modify it |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
8 under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24349
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
10 (at your option) any later version. |
2974 | 11 |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
12 Octave is distributed in the hope that it will be useful, but |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
13 WITHOUT ANY WARRANTY; without even the implied warranty of |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
15 GNU General Public License for more details. |
2974 | 16 |
17 You should have received a copy of the GNU General Public License | |
7016 | 18 along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24349
diff
changeset
|
19 <https://www.gnu.org/licenses/>. |
2974 | 20 |
21 */ | |
22 | |
21724
aba2e6293dd8
use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents:
21301
diff
changeset
|
23 #if defined (HAVE_CONFIG_H) |
21301
40de9f8f23a6
Use '#include "config.h"' rather than <config.h>.
Rik <rik@octave.org>
parents:
21200
diff
changeset
|
24 # include "config.h" |
2974 | 25 #endif |
26 | |
3014 | 27 #include <string> |
28 | |
22091
0f6fc2ec3b1a
move call_stack class to a separate file
John W. Eaton <jwe@octave.org>
parents:
21750
diff
changeset
|
29 #include "call-stack.h" |
3606 | 30 #include "defun.h" |
3325 | 31 #include "dynamic-ld.h" |
3014 | 32 #include "error.h" |
33 #include "help.h" | |
2974 | 34 #include "ov.h" |
35 #include "ov-builtin.h" | |
3325 | 36 #include "ov-dld-fcn.h" |
5823 | 37 #include "ov-fcn.h" |
5864 | 38 #include "ov-mex-fcn.h" |
5823 | 39 #include "ov-usr-fcn.h" |
20940
48b2ad5ee801
maint: Rename oct-obj.[cc|h] to ovl.[cc|h] for clarity.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
40 #include "ovl.h" |
10887
f10d0bc8f9cc
make isargout available to DEFUNs
Jaroslav Hajek <highegg@gmail.com>
parents:
10315
diff
changeset
|
41 #include "oct-lvalue.h" |
3014 | 42 #include "pager.h" |
23481
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
43 #include "interpreter-private.h" |
73558a835b64
eliminate lvalue list arguments from evaluator functions
John W. Eaton <jwe@octave.org>
parents:
23220
diff
changeset
|
44 #include "interpreter.h" |
2974 | 45 #include "symtab.h" |
46 #include "variables.h" | |
8575
f134925a1cfa
m-file implementation of help system
Soren Hauberg <soren@hauberg.org>
parents:
7923
diff
changeset
|
47 #include "parse.h" |
2974 | 48 |
5823 | 49 // Print the usage part of the doc string of FCN (user-defined or DEFUN). |
8575
f134925a1cfa
m-file implementation of help system
Soren Hauberg <soren@hauberg.org>
parents:
7923
diff
changeset
|
50 void |
f134925a1cfa
m-file implementation of help system
Soren Hauberg <soren@hauberg.org>
parents:
7923
diff
changeset
|
51 print_usage (void) |
3014 | 52 { |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
53 octave::call_stack& cs = octave::__get_call_stack__ ("print_usage"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
54 |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
55 const octave_function *cur = cs.current (); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
56 |
8575
f134925a1cfa
m-file implementation of help system
Soren Hauberg <soren@hauberg.org>
parents:
7923
diff
changeset
|
57 if (cur) |
f134925a1cfa
m-file implementation of help system
Soren Hauberg <soren@hauberg.org>
parents:
7923
diff
changeset
|
58 print_usage (cur->name ()); |
3014 | 59 else |
5823 | 60 error ("print_usage: invalid function"); |
61 } | |
62 | |
63 void | |
8575
f134925a1cfa
m-file implementation of help system
Soren Hauberg <soren@hauberg.org>
parents:
7923
diff
changeset
|
64 print_usage (const std::string& name) |
5823 | 65 { |
23075
4e3d47dc7e25
move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23052
diff
changeset
|
66 octave::feval ("print_usage", octave_value (name), 0); |
5800 | 67 } |
68 | |
3015 | 69 void |
3523 | 70 check_version (const std::string& version, const std::string& fcn) |
3015 | 71 { |
4448 | 72 if (version != OCTAVE_API_VERSION) |
3986 | 73 { |
15466
d174210ce1ec
use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents:
14138
diff
changeset
|
74 error ("API version %s found in .oct file function '%s'\n" |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
75 " does not match the running Octave (API version %s)\n" |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
76 " this can lead to incorrect results or other failures\n" |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
77 " you can fix this problem by recompiling this .oct file", |
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
78 version.c_str (), fcn.c_str (), OCTAVE_API_VERSION); |
3986 | 79 } |
3015 | 80 } |
81 | |
2974 | 82 // Install variables and functions in the symbol tables. |
83 | |
84 void | |
3523 | 85 install_dld_function (octave_dld_function::fcn f, const std::string& name, |
21750
6720e5a220ba
use namespace for octave_shlib class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
86 const octave::dynamic_library& shl, const std::string& doc, |
10315
57a59eae83cc
untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents:
10160
diff
changeset
|
87 bool relative) |
3325 | 88 { |
7336 | 89 octave_dld_function *fcn = new octave_dld_function (f, shl, name, doc); |
6323 | 90 |
91 if (relative) | |
7336 | 92 fcn->mark_relative (); |
6323 | 93 |
7336 | 94 octave_value fval (fcn); |
5397 | 95 |
23693
b9378eff6d13
move symbol_table class inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
96 octave::symbol_table& symtab |
23611
91c8f006ed8b
remove additional functions from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
97 = octave::__get_symbol_table__ ("install_dld_function"); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
98 |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
99 symtab.install_built_in_function (name, fval); |
3325 | 100 } |
101 | |
102 void | |
23518 | 103 install_dld_function (octave_dld_function::meth m, const std::string& name, |
104 const octave::dynamic_library& shl, const std::string& doc, | |
105 bool relative) | |
106 { | |
107 octave_dld_function *fcn = new octave_dld_function (m, shl, name, doc); | |
108 | |
109 if (relative) | |
110 fcn->mark_relative (); | |
111 | |
112 octave_value fval (fcn); | |
113 | |
23693
b9378eff6d13
move symbol_table class inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
114 octave::symbol_table& symtab |
23611
91c8f006ed8b
remove additional functions from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
115 = octave::__get_symbol_table__ ("install_dld_function"); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
116 |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
117 symtab.install_built_in_function (name, fval); |
23518 | 118 } |
119 | |
120 void | |
5864 | 121 install_mex_function (void *fptr, bool fmex, const std::string& name, |
21750
6720e5a220ba
use namespace for octave_shlib class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
122 const octave::dynamic_library& shl, bool relative) |
5864 | 123 { |
7336 | 124 octave_mex_function *fcn = new octave_mex_function (fptr, fmex, shl, name); |
6323 | 125 |
126 if (relative) | |
7336 | 127 fcn->mark_relative (); |
6323 | 128 |
7336 | 129 octave_value fval (fcn); |
5864 | 130 |
23693
b9378eff6d13
move symbol_table class inside octave namespace
John W. Eaton <jwe@octave.org>
parents:
23611
diff
changeset
|
131 octave::symbol_table& symtab |
23611
91c8f006ed8b
remove additional functions from symbol_table class
John W. Eaton <jwe@octave.org>
parents:
23599
diff
changeset
|
132 = octave::__get_symbol_table__ ("install_mex_function"); |
23599
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
133 |
5cb3a2bb5e1e
don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents:
23553
diff
changeset
|
134 symtab.install_built_in_function (name, fval); |
5864 | 135 } |
136 | |
21750
6720e5a220ba
use namespace for octave_shlib class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
137 octave::dynamic_library |
9960
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
138 get_current_shlib (void) |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
139 { |
21750
6720e5a220ba
use namespace for octave_shlib class
John W. Eaton <jwe@octave.org>
parents:
21724
diff
changeset
|
140 octave::dynamic_library retval; |
11586
12df7854fa7c
strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents:
11523
diff
changeset
|
141 |
23553
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
142 octave::call_stack& cs = octave::__get_call_stack__ ("get_current_shlib"); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
143 |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
144 octave_function *curr_fcn = cs.current (); |
14723784b9f2
don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents:
23532
diff
changeset
|
145 |
9960
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
146 if (curr_fcn) |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
147 { |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
148 if (curr_fcn->is_dld_function ()) |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
149 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
150 octave_dld_function *dld |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
151 = dynamic_cast<octave_dld_function *> (curr_fcn); |
9960
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
152 retval = dld->get_shlib (); |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
153 } |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
154 else if (curr_fcn->is_mex_function ()) |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
155 { |
17787
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
156 octave_mex_function *mex |
175b392e91fe
Use GNU style coding conventions for code in libinterp/
Rik <rik@octave.org>
parents:
17744
diff
changeset
|
157 = dynamic_cast<octave_mex_function *> (curr_fcn); |
9960
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
158 retval = mex->get_shlib (); |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
159 } |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
160 } |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
161 |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
162 return retval; |
5f3c10ecb150
implement get_current_shlib and octave_auto_shlib
Jaroslav Hajek <highegg@gmail.com>
parents:
8920
diff
changeset
|
163 } |