annotate libinterp/parse-tree/oct-parse.yy @ 27471:fd32c1a9b1bd

revamp error handling In "error" and similar functions that ultimately call it, simply throw an exception that contains information about the error (message, id, stack info) instead of printing an error message immediately and then throwing an exception. The new approach is more flexible and sllows for some simplification of the error message routines as they no longer need feedback from the interpreter to know when to display or buffer messages. It is now the responsibility of any code that catches an execution exception to determine whether and when to display error messages. * quit.h, quit.cc (class frame_info): New class. (execution_exception::m_err_type, execution_exception::m_id, execution_exception::m_message, execution_exception::m_stack_info): New data members. (class execution_exception): Store error type, message, id, and stack info. Provide methods setting and accessing data as needed and for generating stack trace message from stack info. (execution_exception::m_stack_trace): Delete data member. execution_exception::set_stack_trace): Delete method. (execution_exception::set_err_type, execution_exception::err_type, execution_exception::stack_trace, execution_exception::set_identifier, execution_exception::identifier, execution_exception::message, execution_exception::set_stack_info, execution_exception::display): New methods. * call-stack.cc, call-stack.h (call_stack::backtrace_info): New functions. * oct-parse.yy (maybe_print_last_error_message): Delete function and all uses. * pt-eval.h, pt-eval.cc (tree_evaluator::backtrace_info, tree_evaluator::backtrace_message): New functions. (tree_evaluator::backtrace): Now const. (tree_evaluator::visit_unwind_protect_command, tree_evaluator::do_unwind_protect_cleanup_code, tree_evaluator::visit_try_catch_command, tree_evaluator::evalin, tree_evaluator::eval, tree_evaluator::repl, debugger::repl): Save current exception info. * interpreter.h, interpreter.cc (interpreter::handle_exception): New function. Use it in place of direct calls to error_system::save_exception, error_system::display_exception (or execution_exception::display) and interpreter::recover_from_exception, so that we have uniform behavior when responding to an execution exception. * error.h, error.cc (error_system::m_buffer_error_messages, error_system::m_discard_error_messages, error_system::m_in_try_catch): Delete data members and associated functions. Remove all uses. Because the error system no longer displays messages immediately, it does not need to track whether to discard or buffer error messages or know whether error and warning functions are invoked inside of try-catch blocks. Everywhere that catches execution_exceptions must now handle saving the exception state (for lasterror) and displaying the error message and traceback as needed. (): Delete functions and all uses. (error_stack_frame): Delete struct definition. (verror, vpr_where, pr_where_internal, pr_where, maybe_enter_debugger, make_execution_exception, vmessage_with_id, message_with_id, error_system::maybe_enter_debugger, reset_error_handler, error_system::reset): Delete functions and all uses. (error_system::try_option): Delete enum and all uses. (vusage, error_1, error_system::vwarning, error_system::rethrow_error, error_system::interpreter_try): Simplify. (format_message, make_stack_map, error_system::throw_error, error_system::save_exception, error_system::display_exception): New functions. (Ferror): Update for error_system changes.
author John W. Eaton <jwe@octave.org>
date Fri, 04 Oct 2019 01:15:13 -0400
parents 2f4e8dce06da
children 3fec8e9fa2aa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1829
7d2982b55242 [project @ 1996-02-02 14:12:59 by jwe]
jwe
parents: 1826
diff changeset
1 /*
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2
26376
00f796120a6d maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 26149
diff changeset
3 Copyright (C) 1993-2019 John W. Eaton
9474
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
4 Copyright (C) 2009 David Grundberg
11523
fd0a3ac60b0e update copyright notices
John W. Eaton <jwe@octave.org>
parents: 11464
diff changeset
5 Copyright (C) 2009-2010 VZLU Prague
26376
00f796120a6d maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 26149
diff changeset
6 Copyright (C) 2016-2019 Oliver Heimlich
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
7
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
8 This file is part of Octave.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
9
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24444
diff changeset
10 Octave is free software: you can redistribute it and/or modify it
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22712
diff changeset
11 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: 24444
diff changeset
12 the Free Software Foundation, either version 3 of the License, or
22755
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22712
diff changeset
13 (at your option) any later version.
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22712
diff changeset
14
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22712
diff changeset
15 Octave is distributed in the hope that it will be useful, but
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22712
diff changeset
16 WITHOUT ANY WARRANTY; without even the implied warranty of
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22712
diff changeset
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3a2b891d0b33 maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents: 22712
diff changeset
18 GNU General Public License for more details.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
19
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
20 You should have received a copy of the GNU General Public License
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
21 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: 24444
diff changeset
22 <https://www.gnu.org/licenses/>.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
23
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
24 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
25
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
26 // Parser for Octave.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
27
767
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 751
diff changeset
28 // C decarations.
42731861ee09 [project @ 1994-10-05 21:26:54 by jwe]
jwe
parents: 751
diff changeset
29
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
30 %{
21023
ec532a439c6f rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 21021
diff changeset
31
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
32 #define YYDEBUG 1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
33
21724
aba2e6293dd8 use "#if ..." consistently instead of "#ifdef" and "#ifndef"
John W. Eaton <jwe@octave.org>
parents: 21707
diff changeset
34 #if defined (HAVE_CONFIG_H)
22003
2d3972b802ff use consistent style for including config.h in source files
John W. Eaton <jwe@octave.org>
parents: 21966
diff changeset
35 # include "config.h"
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 206
diff changeset
36 #endif
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 206
diff changeset
37
3178
09a3064a3a17 [project @ 1998-06-23 03:46:42 by jwe]
jwe
parents: 3165
diff changeset
38 #include <cassert>
10463
bbe99b2a5ba7 undo recent gnulib-related changes
John W. Eaton <jwe@octave.org>
parents: 10447
diff changeset
39 #include <cstdio>
bbe99b2a5ba7 undo recent gnulib-related changes
John W. Eaton <jwe@octave.org>
parents: 10447
diff changeset
40 #include <cstdlib>
2427
2f50b24ce84f [project @ 1996-10-25 06:15:28 by jwe]
jwe
parents: 2375
diff changeset
41
8950
d865363208d6 include <iosfwd> instead of <iostream> in header files
John W. Eaton <jwe@octave.org>
parents: 8920
diff changeset
42 #include <iostream>
5484
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
43 #include <map>
5765
7ba9ad1fec11 [project @ 2006-04-17 05:05:15 by jwe]
jwe
parents: 5760
diff changeset
44 #include <sstream>
5484
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
45
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
46 #include "Matrix.h"
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
47 #include "cmd-edit.h"
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
48 #include "cmd-hist.h"
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
49 #include "file-ops.h"
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
50 #include "file-stat.h"
4243
7e4d5b5520e5 [project @ 2002-12-27 05:30:59 by jwe]
jwe
parents: 4240
diff changeset
51 #include "oct-env.h"
3712
7066a8065e7e [project @ 2000-08-22 06:21:20 by jwe]
jwe
parents: 3665
diff changeset
52 #include "oct-time.h"
4171
04694e5b4239 [project @ 2002-11-12 20:27:24 by jwe]
jwe
parents: 4131
diff changeset
53 #include "quit.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
54
22091
0f6fc2ec3b1a move call_stack class to a separate file
John W. Eaton <jwe@octave.org>
parents: 22003
diff changeset
55 #include "Cell.h"
23454
30b6eccd6708 use builtin-defun-decls.h to ensure declarations of interpreter functions
John W. Eaton <jwe@octave.org>
parents: 23438
diff changeset
56 #include "builtin-defun-decls.h"
2166
d68119516779 [project @ 1996-05-13 13:41:55 by jwe]
jwe
parents: 2124
diff changeset
57 #include "defun.h"
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
58 #include "dynamic-ld.h"
1351
8256c4c57419 [project @ 1995-09-05 08:02:08 by jwe]
jwe
parents: 1315
diff changeset
59 #include "error.h"
8256c4c57419 [project @ 1995-09-05 08:02:08 by jwe]
jwe
parents: 1315
diff changeset
60 #include "input.h"
23438
d24d01273bd0 eliminate load-path singleton
John W. Eaton <jwe@octave.org>
parents: 23435
diff changeset
61 #include "interpreter-private.h"
22094
9203833cab7d move new interpreter class to separate file
John W. Eaton <jwe@octave.org>
parents: 22091
diff changeset
62 #include "interpreter.h"
1351
8256c4c57419 [project @ 1995-09-05 08:02:08 by jwe]
jwe
parents: 1315
diff changeset
63 #include "lex.h"
5832
5e41e06f6a78 [project @ 2006-05-26 21:41:32 by jwe]
jwe
parents: 5823
diff changeset
64 #include "load-path.h"
25517
7fbc39a46be8 Add wrapper to fopen for files with non-ASCII chars in path on Windows (bug #49118).
Markus Mützel <markus.muetzel@gmx.de>
parents: 25442
diff changeset
65 #include "lo-sysdep.h"
1743
ab8612a09449 [project @ 1996-01-12 11:25:30 by jwe]
jwe
parents: 1740
diff changeset
66 #include "oct-hist.h"
5626
3236b4d98fde [project @ 2006-02-15 20:25:39 by jwe]
jwe
parents: 5615
diff changeset
67 #include "oct-map.h"
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
68 #include "ov-classdef.h"
4935
4fc993a4e072 [project @ 2004-08-06 03:17:12 by jwe]
jwe
parents: 4930
diff changeset
69 #include "ov-fcn-handle.h"
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
70 #include "ov-usr-fcn.h"
8150
283989f2da9b make null assignment matlab compatible
Jaroslav Hajek <highegg@gmail.com>
parents: 8064
diff changeset
71 #include "ov-null-mat.h"
1351
8256c4c57419 [project @ 1995-09-05 08:02:08 by jwe]
jwe
parents: 1315
diff changeset
72 #include "pager.h"
8256c4c57419 [project @ 1995-09-05 08:02:08 by jwe]
jwe
parents: 1315
diff changeset
73 #include "parse.h"
2987
ae20b3f37f5e [project @ 1997-05-16 07:05:15 by jwe]
jwe
parents: 2982
diff changeset
74 #include "pt-all.h"
8658
73c4516fae10 New evaluator and debugger derived from tree-walker class
John W. Eaton <jwe@octave.org>
parents: 8471
diff changeset
75 #include "pt-eval.h"
1351
8256c4c57419 [project @ 1995-09-05 08:02:08 by jwe]
jwe
parents: 1315
diff changeset
76 #include "symtab.h"
8256c4c57419 [project @ 1995-09-05 08:02:08 by jwe]
jwe
parents: 1315
diff changeset
77 #include "token.h"
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
78 #include "unwind-prot.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
79 #include "utils.h"
1351
8256c4c57419 [project @ 1995-09-05 08:02:08 by jwe]
jwe
parents: 1315
diff changeset
80 #include "variables.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
81
16149
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
82 // oct-parse.h must be included after pt-all.h
23479
06bf3a0b08bf maint: Use "" instead of <> for our own include files.
John W. Eaton <jwe@octave.org>
parents: 23473
diff changeset
83 #include "oct-parse.h"
16149
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
84
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
85 extern int octave_lex (YYSTYPE *, void *);
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
86
496
e7c5b23b34d3 [project @ 1994-07-06 15:02:26 by jwe]
jwe
parents: 482
diff changeset
87 // Forward declarations for some functions defined at the bottom of
e7c5b23b34d3 [project @ 1994-07-06 15:02:26 by jwe]
jwe
parents: 482
diff changeset
88 // the file.
e7c5b23b34d3 [project @ 1994-07-06 15:02:26 by jwe]
jwe
parents: 482
diff changeset
89
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
90 static void yyerror (octave::base_parser& parser, const char *s);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
91
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
92 #define lexer parser.m_lexer
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
93 #define scanner lexer.m_scanner
16149
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
94
21023
ec532a439c6f rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 21021
diff changeset
95 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC)
24444
53ca76c5cc8d maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents: 24377
diff changeset
96 // Disable this warning for code that is generated by Bison,
53ca76c5cc8d maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents: 24377
diff changeset
97 // including grammar rules. Push the current state so we can
53ca76c5cc8d maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents: 24377
diff changeset
98 // restore the warning state prior to functions we define at
53ca76c5cc8d maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents: 24377
diff changeset
99 // the bottom of the file.
53ca76c5cc8d maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents: 24377
diff changeset
100 # pragma GCC diagnostic push
53ca76c5cc8d maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents: 24377
diff changeset
101 # pragma GCC diagnostic ignored "-Wold-style-cast"
21023
ec532a439c6f rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 21021
diff changeset
102 #endif
ec532a439c6f rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 21021
diff changeset
103
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
104 %}
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
105
666
fb4f6556b443 [project @ 1994-09-06 21:22:46 by jwe]
jwe
parents: 627
diff changeset
106 // Bison declarations.
fb4f6556b443 [project @ 1994-09-06 21:22:46 by jwe]
jwe
parents: 627
diff changeset
107
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
108 // The grammar currently has 9 shift/reduce conflicts. Ensure that
17743
af5ad573c665 oct-parse.in.yy: Add %expect declaration.
John W. Eaton <jwe@octave.org>
parents: 17731
diff changeset
109 // we notice if that number changes.
af5ad573c665 oct-parse.in.yy: Add %expect declaration.
John W. Eaton <jwe@octave.org>
parents: 17731
diff changeset
110
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
111 %expect 9
17743
af5ad573c665 oct-parse.in.yy: Add %expect declaration.
John W. Eaton <jwe@octave.org>
parents: 17731
diff changeset
112
16149
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
113 // We are using the pure parser interface and the reentrant lexer
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
114 // interface but the Octave parser and lexer are NOT properly
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
115 // reentrant because both still use many global variables. It should be
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
116 // safe to create a parser object and call it while another parser
16149
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
117 // object is active (to parse a callback function while the main
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
118 // interactive parser is waiting for input, for example) if you take
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
119 // care to properly save and restore (typically with an unwind_protect
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
120 // object) relevant global values before and after the nested call.
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
121
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
122 %define api.pure
25640
7aaf091d39fc one more fix for parser change... Doh!
John W. Eaton <jwe@octave.org>
parents: 25638
diff changeset
123 // No spaces inside the braces for the prefix and push-pull definitions!
7aaf091d39fc one more fix for parser change... Doh!
John W. Eaton <jwe@octave.org>
parents: 25638
diff changeset
124 %define api.prefix {octave_}
25644
bee8d60413f3 avoid bison warning about deprecated syntax
John W. Eaton <jwe@octave.org>
parents: 25640
diff changeset
125 %define api.push-pull both
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
126 %parse-param { octave::base_parser& parser }
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
127 %lex-param { void *lexer.scanner }
16149
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
128
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
129 %union
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
130 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
131 int dummy_type;
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
132
2891
1a30f46e1870 [project @ 1997-04-28 01:49:00 by jwe]
jwe
parents: 2884
diff changeset
133 // The type of the basic tokens returned by the lexer.
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
134 octave::token *tok_val;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
135
3665
0689afb1d001 [project @ 2000-05-11 19:07:56 by jwe]
jwe
parents: 3544
diff changeset
136 // Comment strings that we need to deal with mid-rule.
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
137 octave::comment_list *comment_type;
3665
0689afb1d001 [project @ 2000-05-11 19:07:56 by jwe]
jwe
parents: 3544
diff changeset
138
2891
1a30f46e1870 [project @ 1997-04-28 01:49:00 by jwe]
jwe
parents: 2884
diff changeset
139 // Types for the nonterminals we generate.
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
140 char punct_type;
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
141 octave::tree *tree_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
142 octave::tree_matrix *tree_matrix_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
143 octave::tree_cell *tree_cell_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
144 octave::tree_expression *tree_expression_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
145 octave::tree_constant *tree_constant_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
146 octave::tree_fcn_handle *tree_fcn_handle_type;
26686
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
147 octave::tree_superclass_ref *tree_superclass_ref_type;
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
148 octave::tree_metaclass_query *tree_metaclass_query_type;
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
149 octave::tree_function_def *tree_function_def_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
150 octave::tree_anon_fcn_handle *tree_anon_fcn_handle_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
151 octave::tree_identifier *tree_identifier_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
152 octave::tree_index_expression *tree_index_expression_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
153 octave::tree_colon_expression *tree_colon_expression_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
154 octave::tree_argument_list *tree_argument_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
155 octave::tree_parameter_list *tree_parameter_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
156 octave::tree_command *tree_command_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
157 octave::tree_if_command *tree_if_command_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
158 octave::tree_if_clause *tree_if_clause_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
159 octave::tree_if_command_list *tree_if_command_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
160 octave::tree_switch_command *tree_switch_command_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
161 octave::tree_switch_case *tree_switch_case_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
162 octave::tree_switch_case_list *tree_switch_case_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
163 octave::tree_decl_elt *tree_decl_elt_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
164 octave::tree_decl_init_list *tree_decl_init_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
165 octave::tree_decl_command *tree_decl_command_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
166 octave::tree_statement *tree_statement_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
167 octave::tree_statement_list *tree_statement_list_type;
2891
1a30f46e1870 [project @ 1997-04-28 01:49:00 by jwe]
jwe
parents: 2884
diff changeset
168 octave_user_function *octave_user_function_type;
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
169
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
170 octave::tree_classdef *tree_classdef_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
171 octave::tree_classdef_attribute* tree_classdef_attribute_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
172 octave::tree_classdef_attribute_list* tree_classdef_attribute_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
173 octave::tree_classdef_superclass* tree_classdef_superclass_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
174 octave::tree_classdef_superclass_list* tree_classdef_superclass_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
175 octave::tree_classdef_body* tree_classdef_body_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
176 octave::tree_classdef_property* tree_classdef_property_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
177 octave::tree_classdef_property_list* tree_classdef_property_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
178 octave::tree_classdef_properties_block* tree_classdef_properties_block_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
179 octave::tree_classdef_methods_list* tree_classdef_methods_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
180 octave::tree_classdef_methods_block* tree_classdef_methods_block_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
181 octave::tree_classdef_event* tree_classdef_event_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
182 octave::tree_classdef_events_list* tree_classdef_events_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
183 octave::tree_classdef_events_block* tree_classdef_events_block_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
184 octave::tree_classdef_enum* tree_classdef_enum_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
185 octave::tree_classdef_enum_list* tree_classdef_enum_list_type;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
186 octave::tree_classdef_enum_block* tree_classdef_enum_block_type;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
187 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
188
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
189 // Tokens with line and column information.
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
190 %token <tok_val> '=' ':' '-' '+' '*' '/'
4018
a8621d87fbf5 [project @ 2002-08-05 03:17:25 by jwe]
jwe
parents: 4009
diff changeset
191 %token <tok_val> ADD_EQ SUB_EQ MUL_EQ DIV_EQ LEFTDIV_EQ POW_EQ
a8621d87fbf5 [project @ 2002-08-05 03:17:25 by jwe]
jwe
parents: 4009
diff changeset
192 %token <tok_val> EMUL_EQ EDIV_EQ ELEFTDIV_EQ EPOW_EQ AND_EQ OR_EQ
428
fa0453b25410 [project @ 1994-05-25 01:06:28 by jwe]
jwe
parents: 341
diff changeset
193 %token <tok_val> EXPR_AND_AND EXPR_OR_OR
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
194 %token <tok_val> EXPR_AND EXPR_OR EXPR_NOT
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
195 %token <tok_val> EXPR_LT EXPR_LE EXPR_EQ EXPR_NE EXPR_GE EXPR_GT
1276
cbdf7db98554 [project @ 1995-04-24 15:31:24 by jwe]
jwe
parents: 1266
diff changeset
196 %token <tok_val> LEFTDIV EMUL EDIV ELEFTDIV EPLUS EMINUS
16284
09881dab3aaf * lex.ll, oct-parse.in.yy (HERMITIAN): Rename token from QUOTE.
John W. Eaton <jwe@octave.org>
parents: 16279
diff changeset
197 %token <tok_val> HERMITIAN TRANSPOSE
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
198 %token <tok_val> PLUS_PLUS MINUS_MINUS POW EPOW
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
199 %token <tok_val> NUM IMAG_NUM
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
200 %token <tok_val> STRUCT_ELT
2883
0b3954110c77 [project @ 1997-04-24 09:57:05 by jwe]
jwe
parents: 2865
diff changeset
201 %token <tok_val> NAME
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
202 %token <tok_val> END
5279
bd32f770c09a [project @ 2005-04-12 21:55:31 by jwe]
jwe
parents: 5189
diff changeset
203 %token <tok_val> DQ_STRING SQ_STRING
13245
027a2186cd90 parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents: 13241
diff changeset
204 %token <tok_val> FOR PARFOR WHILE DO UNTIL
1491
893b416bb919 [project @ 1995-09-29 04:03:01 by jwe]
jwe
parents: 1489
diff changeset
205 %token <tok_val> IF ELSEIF ELSE
2764
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2745
diff changeset
206 %token <tok_val> SWITCH CASE OTHERWISE
1491
893b416bb919 [project @ 1995-09-29 04:03:01 by jwe]
jwe
parents: 1489
diff changeset
207 %token <tok_val> BREAK CONTINUE FUNC_RET
924
8b0920cc1d64 [project @ 1994-11-15 00:40:50 by jwe]
jwe
parents: 922
diff changeset
208 %token <tok_val> UNWIND CLEANUP
1489
3e705c864019 [project @ 1995-09-28 05:38:26 by jwe]
jwe
parents: 1371
diff changeset
209 %token <tok_val> TRY CATCH
14294
9e3983c8963c deprecate the static keyword
John W. Eaton <jwe@octave.org>
parents: 14293
diff changeset
210 %token <tok_val> GLOBAL PERSISTENT
4342
813effe14ee1 [project @ 2003-02-20 08:35:55 by jwe]
jwe
parents: 4318
diff changeset
211 %token <tok_val> FCN_HANDLE
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
212 %token <tok_val> CLASSDEF
13249
7861a5fd3479 accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents: 13246
diff changeset
213 %token <tok_val> PROPERTIES METHODS EVENTS ENUMERATION
9476
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
214 %token <tok_val> METAQUERY
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
215 %token <tok_val> SUPERCLASSREF
18520
932aca9a7c57 Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18419
diff changeset
216 %token <tok_val> FQ_IDENT
9476
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
217 %token <tok_val> GET SET
16627
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 16574
diff changeset
218 %token <tok_val> FCN
21064
a9f2c2d72892 handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21063
diff changeset
219 %token <tok_val> LEXICAL_ERROR
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
220
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
221 // Other tokens.
21064
a9f2c2d72892 handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21063
diff changeset
222 %token<dummy_type> END_OF_INPUT
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
223 %token<dummy_type> INPUT_FILE
7587
1f662945c2be handle varargin and varargout without keywords
John W. Eaton <jwe@octave.org>
parents: 7562
diff changeset
224 // %token VARARGIN VARARGOUT
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
225
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
226 %token<dummy_type> '(' ')' '[' ']' '{' '}' '.' ',' ';' '@' '\n'
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
227
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
228 // Nonterminals we construct.
24037
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
229 %type <dummy_type> indirect_ref_op decl_param_init
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
230 %type <dummy_type> push_fcn_symtab push_script_symtab begin_file
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
231 %type <dummy_type> param_list_beg param_list_end stmt_begin parse_error
23343
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
232 %type <dummy_type> parsing_local_fcns
16644
856cb7cba231 maint: periodic merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16595 16627
diff changeset
233 %type <comment_type> stash_comment
17657
df266c923b83 delete unnecessary tok_type semantic value in parser
John W. Eaton <jwe@octave.org>
parents: 17656
diff changeset
234 %type <tok_val> function_beg classdef_beg
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
235 %type <punct_type> sep_no_nl opt_sep_no_nl nl opt_nl sep opt_sep
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 572
diff changeset
236 %type <tree_type> input
5861
2a6cb4ed8f1e [project @ 2006-06-16 05:09:41 by jwe]
jwe
parents: 5848
diff changeset
237 %type <tree_constant_type> string constant magic_colon
2a6cb4ed8f1e [project @ 2006-06-16 05:09:41 by jwe]
jwe
parents: 5848
diff changeset
238 %type <tree_anon_fcn_handle_type> anon_fcn_handle
4342
813effe14ee1 [project @ 2003-02-20 08:35:55 by jwe]
jwe
parents: 4318
diff changeset
239 %type <tree_fcn_handle_type> fcn_handle
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
240 %type <tree_matrix_type> matrix_rows
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
241 %type <tree_cell_type> cell_rows
5102
b04b30d30c66 [project @ 2004-12-28 01:59:05 by jwe]
jwe
parents: 5013
diff changeset
242 %type <tree_expression_type> matrix cell
23600
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
243 %type <tree_expression_type> primary_expr oper_expr power_expr expr_no_assign
4207
fa3482b34599 [project @ 2002-12-03 18:22:05 by jwe]
jwe
parents: 4186
diff changeset
244 %type <tree_expression_type> simple_expr colon_expr assign_expr expression
17283
e6c0ac8ce5b6 eliminate parse conflicts introduced by changeset 923ce8b42db2
John W. Eaton <jwe@octave.org>
parents: 17281
diff changeset
245 %type <tree_identifier_type> identifier fcn_name magic_tilde
26686
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
246 %type <tree_superclass_ref_type> superclass_identifier
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
247 %type <tree_metaclass_query_type> meta_identifier
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
248 %type <tree_index_expression_type> word_list_cmd
3351
8623649c967c [project @ 1999-11-15 16:17:01 by jwe]
jwe
parents: 3347
diff changeset
249 %type <tree_argument_list_type> arg_list word_list assign_lhs
8623649c967c [project @ 1999-11-15 16:17:01 by jwe]
jwe
parents: 3347
diff changeset
250 %type <tree_argument_list_type> cell_or_matrix_row
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
251 %type <tree_parameter_list_type> opt_param_list param_list
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
252 %type <tree_parameter_list_type> param_list1 param_list2
723
1c072f20b522 [project @ 1994-09-21 16:00:10 by jwe]
jwe
parents: 666
diff changeset
253 %type <tree_parameter_list_type> return_list return_list1
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
254 %type <tree_command_type> command select_command loop_command
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
255 %type <tree_command_type> jump_command except_command
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
256 %type <tree_function_def_type> function
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
257 %type <tree_classdef_type> classdef
16211
3449bf257514 maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16205
diff changeset
258 %type <tree_command_type> file
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 572
diff changeset
259 %type <tree_if_command_type> if_command
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 572
diff changeset
260 %type <tree_if_clause_type> elseif_clause else_clause
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 572
diff changeset
261 %type <tree_if_command_list_type> if_cmd_list1 if_cmd_list
2764
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2745
diff changeset
262 %type <tree_switch_command_type> switch_command
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2745
diff changeset
263 %type <tree_switch_case_type> switch_case default_case
2c0f259cf83d [project @ 1997-03-01 02:30:26 by jwe]
jwe
parents: 2745
diff changeset
264 %type <tree_switch_case_list_type> case_list1 case_list
17317
56fe31b248de disallow ~ in global and persistent declaration lists
John W. Eaton <jwe@octave.org>
parents: 17316
diff changeset
265 %type <tree_decl_elt_type> decl2 param_list_elt
2846
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2825
diff changeset
266 %type <tree_decl_init_list_type> decl1
52e7c4509983 [project @ 1997-03-26 23:27:35 by jwe]
jwe
parents: 2825
diff changeset
267 %type <tree_decl_command_type> declaration
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
268 %type <tree_statement_type> statement function_end
627
739d16c30481 [project @ 1994-08-19 13:23:14 by jwe]
jwe
parents: 620
diff changeset
269 %type <tree_statement_list_type> simple_list simple_list1 list list1
17322
4c1ae06111c9 allow parser to accept empty statements (bug #37099)
John W. Eaton <jwe@octave.org>
parents: 17317
diff changeset
270 %type <tree_statement_list_type> opt_list
23343
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
271 %type <tree_statement_list_type> opt_fcn_list fcn_list fcn_list1
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
272 %type <tree_classdef_attribute_type> attr
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
273 %type <tree_classdef_attribute_list_type> attr_list opt_attr_list
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
274 %type <tree_classdef_superclass_type> superclass
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
275 %type <tree_classdef_superclass_list_type> superclass_list opt_superclass_list
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
276 %type <tree_classdef_body_type> class_body
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
277 %type <tree_classdef_property_type> class_property
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
278 %type <tree_classdef_property_list_type> property_list
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
279 %type <tree_classdef_properties_block_type> properties_block
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
280 %type <tree_classdef_methods_list_type> methods_list
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
281 %type <tree_classdef_methods_block_type> methods_block
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
282 %type <tree_classdef_event_type> class_event
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
283 %type <tree_classdef_events_list_type> events_list
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
284 %type <tree_classdef_events_block_type> events_block
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
285 %type <tree_classdef_enum_type> class_enum
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
286 %type <tree_classdef_enum_list_type> enum_list
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
287 %type <tree_classdef_enum_block_type> enum_block
18262
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
288 %type <tree_function_def_type> method_decl method
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
289 %type <octave_user_function_type> method_decl1
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
290
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
291 // Precedence and associativity.
21294
3d375b0905a0 eliminate unused << and >> operators from Octave scripting language
John W. Eaton <jwe@octave.org>
parents: 21159
diff changeset
292 %right '=' ADD_EQ SUB_EQ MUL_EQ DIV_EQ LEFTDIV_EQ POW_EQ EMUL_EQ EDIV_EQ ELEFTDIV_EQ EPOW_EQ OR_EQ AND_EQ
4023
ef3caf27cb9c [project @ 2002-08-07 06:54:41 by jwe]
jwe
parents: 4018
diff changeset
293 %left EXPR_OR_OR
ef3caf27cb9c [project @ 2002-08-07 06:54:41 by jwe]
jwe
parents: 4018
diff changeset
294 %left EXPR_AND_AND
ef3caf27cb9c [project @ 2002-08-07 06:54:41 by jwe]
jwe
parents: 4018
diff changeset
295 %left EXPR_OR
ef3caf27cb9c [project @ 2002-08-07 06:54:41 by jwe]
jwe
parents: 4018
diff changeset
296 %left EXPR_AND
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
297 %left EXPR_LT EXPR_LE EXPR_EQ EXPR_NE EXPR_GE EXPR_GT
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
298 %left ':'
1276
cbdf7db98554 [project @ 1995-04-24 15:31:24 by jwe]
jwe
parents: 1266
diff changeset
299 %left '-' '+' EPLUS EMINUS
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
300 %left '*' '/' LEFTDIV EMUL EDIV ELEFTDIV
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
301 %right UNARY EXPR_NOT
16284
09881dab3aaf * lex.ll, oct-parse.in.yy (HERMITIAN): Rename token from QUOTE.
John W. Eaton <jwe@octave.org>
parents: 16279
diff changeset
302 %left POW EPOW HERMITIAN TRANSPOSE
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
303 %right PLUS_PLUS MINUS_MINUS
3351
8623649c967c [project @ 1999-11-15 16:17:01 by jwe]
jwe
parents: 3347
diff changeset
304 %left '(' '.' '{'
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
305
17629
1e8f8900a041 clean up partially constructed parse tree objects on parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17622
diff changeset
306 // How to clean up if there is a parse error. We handle deleting tokens
1e8f8900a041 clean up partially constructed parse tree objects on parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17622
diff changeset
307 // and comments seperately and separators are just characters. The
1e8f8900a041 clean up partially constructed parse tree objects on parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17622
diff changeset
308 // remaining items are dynamically allocated parse tree objects that
17658
0c5f50706ba3 attempt to catch possible memory leaks in parser cleanup
John W. Eaton <jwe@octave.org>
parents: 17632
diff changeset
309 // must be deleted. Use the wildcard case (<*>) to detect unhandled
0c5f50706ba3 attempt to catch possible memory leaks in parser cleanup
John W. Eaton <jwe@octave.org>
parents: 17632
diff changeset
310 // cases (for example, a new semantic type is added but not handled
0c5f50706ba3 attempt to catch possible memory leaks in parser cleanup
John W. Eaton <jwe@octave.org>
parents: 17632
diff changeset
311 // here).
0c5f50706ba3 attempt to catch possible memory leaks in parser cleanup
John W. Eaton <jwe@octave.org>
parents: 17632
diff changeset
312
0c5f50706ba3 attempt to catch possible memory leaks in parser cleanup
John W. Eaton <jwe@octave.org>
parents: 17632
diff changeset
313 %destructor { } <tok_val>
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
314 %destructor { } <punct_type>
17658
0c5f50706ba3 attempt to catch possible memory leaks in parser cleanup
John W. Eaton <jwe@octave.org>
parents: 17632
diff changeset
315 %destructor { } <comment_type>
0c5f50706ba3 attempt to catch possible memory leaks in parser cleanup
John W. Eaton <jwe@octave.org>
parents: 17632
diff changeset
316 %destructor { } <>
0c5f50706ba3 attempt to catch possible memory leaks in parser cleanup
John W. Eaton <jwe@octave.org>
parents: 17632
diff changeset
317
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
318 %destructor { delete $$; } <tree_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
319 %destructor { delete $$; } <tree_matrix_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
320 %destructor { delete $$; } <tree_cell_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
321 %destructor { delete $$; } <tree_expression_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
322 %destructor { delete $$; } <tree_constant_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
323 %destructor { delete $$; } <tree_fcn_handle_type>
26686
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
324 %destructor { delete $$; } <tree_superclass_ref_type>
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
325 %destructor { delete $$; } <tree_metaclass_query_type>
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
326 %destructor { delete $$; } <tree_function_def_type>
19593
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
327 %destructor { delete $$; } <tree_anon_fcn_handle_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
328 %destructor { delete $$; } <tree_identifier_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
329 %destructor { delete $$; } <tree_index_expression_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
330 %destructor { delete $$; } <tree_argument_list_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
331 %destructor { delete $$; } <tree_parameter_list_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
332 %destructor { delete $$; } <tree_command_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
333 %destructor { delete $$; } <tree_if_command_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
334 %destructor { delete $$; } <tree_if_clause_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
335 %destructor { delete $$; } <tree_if_command_list_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
336 %destructor { delete $$; } <tree_switch_command_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
337 %destructor { delete $$; } <tree_switch_case_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
338 %destructor { delete $$; } <tree_switch_case_list_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
339 %destructor { delete $$; } <tree_decl_elt_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
340 %destructor { delete $$; } <tree_decl_init_list_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
341 %destructor { delete $$; } <tree_decl_command_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
342 %destructor { delete $$; } <tree_statement_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
343 %destructor { delete $$; } <tree_statement_list_type>
446c46af4b42 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18974
diff changeset
344 %destructor { delete $$; } <octave_user_function_type>
17658
0c5f50706ba3 attempt to catch possible memory leaks in parser cleanup
John W. Eaton <jwe@octave.org>
parents: 17632
diff changeset
345
18262
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
346 %destructor { delete $$; } <tree_classdef_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
347 %destructor { delete $$; } <tree_classdef_attribute_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
348 %destructor { delete $$; } <tree_classdef_attribute_list_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
349 %destructor { delete $$; } <tree_classdef_superclass_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
350 %destructor { delete $$; } <tree_classdef_superclass_list_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
351 %destructor { delete $$; } <tree_classdef_body_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
352 %destructor { delete $$; } <tree_classdef_property_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
353 %destructor { delete $$; } <tree_classdef_property_list_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
354 %destructor { delete $$; } <tree_classdef_properties_block_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
355 %destructor { delete $$; } <tree_classdef_methods_list_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
356 %destructor { delete $$; } <tree_classdef_methods_block_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
357 %destructor { delete $$; } <tree_classdef_event_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
358 %destructor { delete $$; } <tree_classdef_events_list_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
359 %destructor { delete $$; } <tree_classdef_events_block_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
360 %destructor { delete $$; } <tree_classdef_enum_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
361 %destructor { delete $$; } <tree_classdef_enum_list_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
362 %destructor { delete $$; } <tree_classdef_enum_block_type>
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
363
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
364 // Defining a generic destructor generates a warning if destructors are
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
365 // already explicitly declared for all types.
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
366 //
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
367 // %destructor {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
368 // warning_with_id
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
369 // ("Octave:parser-destructor",
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
370 // "possible memory leak in cleanup following parse error");
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
371 // } <*>
17629
1e8f8900a041 clean up partially constructed parse tree objects on parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17622
diff changeset
372
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 118
diff changeset
373 // Where to start.
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
374 %start input
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
375
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
376 %%
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
377
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
378 // ==============================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
379 // Statements and statement lists
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
380 // ==============================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
381
17322
4c1ae06111c9 allow parser to accept empty statements (bug #37099)
John W. Eaton <jwe@octave.org>
parents: 17317
diff changeset
382 input : simple_list '\n'
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
383 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
384 $$ = nullptr;
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
385 parser.m_stmt_list = $1;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
386 YYACCEPT;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
387 }
17322
4c1ae06111c9 allow parser to accept empty statements (bug #37099)
John W. Eaton <jwe@octave.org>
parents: 17317
diff changeset
388 | simple_list END_OF_INPUT
4c1ae06111c9 allow parser to accept empty statements (bug #37099)
John W. Eaton <jwe@octave.org>
parents: 17317
diff changeset
389 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
390 $$ = nullptr;
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
391 lexer.m_end_of_input = true;
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
392 parser.m_stmt_list = $1;
17322
4c1ae06111c9 allow parser to accept empty statements (bug #37099)
John W. Eaton <jwe@octave.org>
parents: 17317
diff changeset
393 YYACCEPT;
4c1ae06111c9 allow parser to accept empty statements (bug #37099)
John W. Eaton <jwe@octave.org>
parents: 17317
diff changeset
394 }
17326
f444e4cef9b9 avoid exiting Octave on parse error (bug #39862)
John W. Eaton <jwe@octave.org>
parents: 17322
diff changeset
395 | parse_error
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
396 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
397 $$ = nullptr;
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
398 YYABORT;
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
399 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
400 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
401
17322
4c1ae06111c9 allow parser to accept empty statements (bug #37099)
John W. Eaton <jwe@octave.org>
parents: 17317
diff changeset
402 simple_list : opt_sep_no_nl
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
403 {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
404 YYUSE ($1);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
405
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
406 $$ = nullptr;
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
407 }
17322
4c1ae06111c9 allow parser to accept empty statements (bug #37099)
John W. Eaton <jwe@octave.org>
parents: 17317
diff changeset
408 | simple_list1 opt_sep_no_nl
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
409 { $$ = parser.set_stmt_print_flag ($1, $2, false); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
410 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
411
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
412 simple_list1 : statement
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
413 { $$ = parser.make_statement_list ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
414 | simple_list1 sep_no_nl statement
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
415 { $$ = parser.append_statement_list ($1, $2, $3, false); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
416 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
417
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
418 opt_list : // empty
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
419 { $$ = new octave::tree_statement_list (); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
420 | list
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
421 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
422 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
423
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
424 list : list1 opt_sep
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
425 { $$ = parser.set_stmt_print_flag ($1, $2, true); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
426 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
427
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
428 list1 : statement
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
429 { $$ = parser.make_statement_list ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
430 | list1 sep statement
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
431 { $$ = parser.append_statement_list ($1, $2, $3, true); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
432 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
433
23343
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
434 opt_fcn_list : // empty
23635
b5a9cd6de1b8 avoid possible memory error in parser
John W. Eaton <jwe@octave.org>
parents: 23631
diff changeset
435 { $$ = new octave::tree_statement_list (); }
23343
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
436 | fcn_list
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
437 { $$ = $1; }
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
438 ;
23396
945b53af4655 maint: Strip trailing whitespace from source files.
John W. Eaton <jwe@octave.org>
parents: 23343
diff changeset
439
23343
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
440 fcn_list : fcn_list1 opt_sep
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
441 {
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
442 YYUSE ($2);
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
443
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
444 $$ = $1;
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
445 }
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
446 ;
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
447
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
448 fcn_list1 : function
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
449 {
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
450 octave::tree_statement *stmt = parser.make_statement ($1);
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
451 $$ = new octave::tree_statement_list (stmt);
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
452 }
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
453 | fcn_list1 opt_sep function
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
454 {
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
455 octave::tree_statement *stmt = parser.make_statement ($3);
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
456 $$ = parser.append_statement_list ($1, $2, stmt, false);
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
457 }
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
458 ;
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
459
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
460 statement : expression
17693
efbe746f8fa8 eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents: 17673
diff changeset
461 { $$ = parser.make_statement ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
462 | command
17693
efbe746f8fa8 eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents: 17673
diff changeset
463 { $$ = parser.make_statement ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
464 | word_list_cmd
17693
efbe746f8fa8 eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents: 17673
diff changeset
465 { $$ = parser.make_statement ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
466 ;
8746
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
467
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
468 // =================
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
469 // Word-list command
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
470 // =================
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
471
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
472 // These are not really like expressions since they can't appear on
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
473 // the RHS of an assignment. But they are also not like commands (IF,
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
474 // WHILE, etc.
5dd06f19e9be handle commands in the lexer
John W. Eaton <jwe@octave.org>
parents: 8745
diff changeset
475
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
476 word_list_cmd : identifier word_list
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
477 {
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
478 $$ = parser.make_index_expression ($1, $2, '(');
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
479 if (! $$)
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
480 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
481 // make_index_expression deleted $1 and $2.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
482 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
483 }
26662
05fc703b419a update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
484 $$->mark_word_list_cmd ();
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
485 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
486 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
487
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
488 word_list : string
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
489 { $$ = new octave::tree_argument_list ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
490 | word_list string
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
491 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
492 $1->append ($2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
493 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
494 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
495 ;
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
496
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
497 // ===========
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
498 // Expressions
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
499 // ===========
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
500
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
501 identifier : NAME
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
502 {
26661
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26595
diff changeset
503 $$ = new octave::tree_identifier ($1->sym_rec (),
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26595
diff changeset
504 $1->line (),
cf9e10ce3351 move variable values from symbol_record objects to stack_frame objects
John W. Eaton <jwe@octave.org>
parents: 26595
diff changeset
505 $1->column ());
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
506 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
507 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
508
9476
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
509 superclass_identifier
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
510 : SUPERCLASSREF
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
511 {
26718
9b0335f4bc74 revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents: 26716
diff changeset
512 std::string meth = $1->superclass_method_name ();
26686
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
513 std::string cls = $1->superclass_class_name ();
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
514
26718
9b0335f4bc74 revise naming of the parts of a superclass reference
John W. Eaton <jwe@octave.org>
parents: 26716
diff changeset
515 $$ = new octave::tree_superclass_ref (meth, cls,
26686
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
516 $1->line (),
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
517 $1->column ());
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
518 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
519 ;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11572
diff changeset
520
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
521 meta_identifier : METAQUERY
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
522 {
26686
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
523 std::string cls = $1->text ();
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
524
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
525 $$ = new octave::tree_metaclass_query (cls, $1->line (),
581d01526b34 eliminate unnecessary tree_funcall class
John W. Eaton <jwe@octave.org>
parents: 26662
diff changeset
526 $1->column ());
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
527 }
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11572
diff changeset
528 ;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
529
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
530 string : DQ_STRING
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
531 { $$ = parser.make_constant (DQ_STRING, $1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
532 | SQ_STRING
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
533 { $$ = parser.make_constant (SQ_STRING, $1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
534 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
535
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
536 constant : NUM
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
537 { $$ = parser.make_constant (NUM, $1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
538 | IMAG_NUM
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
539 { $$ = parser.make_constant (IMAG_NUM, $1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
540 | string
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
541 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
542 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
543
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
544 matrix : '[' matrix_rows ']'
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
545 { $$ = parser.finish_matrix ($2); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
546 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
547
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
548 matrix_rows : cell_or_matrix_row
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
549 { $$ = $1 ? new octave::tree_matrix ($1) : nullptr; }
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
550 | matrix_rows ';' cell_or_matrix_row
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
551 {
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
552 if ($1)
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
553 {
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
554 if ($3)
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
555 $1->append ($3);
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
556
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
557 $$ = $1;
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
558 }
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
559 else
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
560 $$ = $3 ? new octave::tree_matrix ($3) : nullptr;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
561 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
562 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
563
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
564 cell : '{' cell_rows '}'
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
565 { $$ = parser.finish_cell ($2); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
566 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
567
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
568 cell_rows : cell_or_matrix_row
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
569 { $$ = $1 ? new octave::tree_cell ($1) : nullptr; }
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
570 | cell_rows ';' cell_or_matrix_row
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
571 {
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
572 if ($1)
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
573 {
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
574 if ($3)
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
575 $1->append ($3);
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
576
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
577 $$ = $1;
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
578 }
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
579 else
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
580 $$ = $3 ? new octave::tree_cell ($3) : nullptr;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
581 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
582 ;
3351
8623649c967c [project @ 1999-11-15 16:17:01 by jwe]
jwe
parents: 3347
diff changeset
583
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
584 // tree_argument_list objects can't be empty or have leading or trailing
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
585 // commas, but those are all allowed in matrix and cell array rows.
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
586
3351
8623649c967c [project @ 1999-11-15 16:17:01 by jwe]
jwe
parents: 3347
diff changeset
587 cell_or_matrix_row
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
588 : // empty
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
589 { $$ = nullptr; }
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
590 | ','
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
591 { $$ = nullptr; }
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
592 | arg_list
16257
db7f07b22b9b 1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16251
diff changeset
593 { $$ = $1; }
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
594 | arg_list ','
16257
db7f07b22b9b 1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16251
diff changeset
595 { $$ = $1; }
16924
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
596 | ',' arg_list
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
597 { $$ = $2; }
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
598 | ',' arg_list ','
aebb54d99dba improve compatibility of parsing of matrices and cell arrays
John W. Eaton <jwe@octave.org>
parents: 16850
diff changeset
599 { $$ = $2; }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
600 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
601
26740
cf271740922a allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents: 26718
diff changeset
602 fcn_handle : FCN_HANDLE
cf271740922a allow parsing of function handles of the form @foo.bar
John W. Eaton <jwe@octave.org>
parents: 26718
diff changeset
603 { $$ = parser.make_fcn_handle ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
604 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
605
23600
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
606 anon_fcn_handle : '@' param_list stmt_begin expr_no_assign
13237
1bfca2bbea8b fix parsing of anonymous functions inside cell array lists.
John W. Eaton <jwe@octave.org>
parents: 13125
diff changeset
607 {
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
608 $$ = parser.make_anon_fcn_handle ($2, $4);
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
609 lexer.m_nesting_level.remove ();
13237
1bfca2bbea8b fix parsing of anonymous functions inside cell array lists.
John W. Eaton <jwe@octave.org>
parents: 13125
diff changeset
610 }
24283
81557c74be7f improve error message for invalid anonymous functions
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
611 | '@' param_list stmt_begin error
81557c74be7f improve error message for invalid anonymous functions
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
612 {
81557c74be7f improve error message for invalid anonymous functions
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
613 YYUSE ($2);
81557c74be7f improve error message for invalid anonymous functions
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
614
81557c74be7f improve error message for invalid anonymous functions
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
615 $$ = nullptr;
81557c74be7f improve error message for invalid anonymous functions
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
616 parser.bison_error ("anonymous function bodies must be single expressions");
81557c74be7f improve error message for invalid anonymous functions
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
617 YYABORT;
81557c74be7f improve error message for invalid anonymous functions
John W. Eaton <jwe@octave.org>
parents: 24270
diff changeset
618 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
619 ;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11572
diff changeset
620
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
621 primary_expr : identifier
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
622 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
623 | constant
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
624 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
625 | fcn_handle
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
626 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
627 | matrix
16257
db7f07b22b9b 1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16251
diff changeset
628 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
629 lexer.m_looking_at_matrix_or_assign_lhs = false;
16257
db7f07b22b9b 1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16251
diff changeset
630 $$ = $1;
db7f07b22b9b 1/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16251
diff changeset
631 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
632 | cell
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
633 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
634 | meta_identifier
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
635 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
636 | superclass_identifier
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
637 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
638 | '(' expression ')'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
639 { $$ = $2->mark_in_parens (); }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
640 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
641
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
642 magic_colon : ':'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
643 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
644 YYUSE ($1);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
645
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
646 octave_value tmp (octave_value::magic_colon_t);
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
647 $$ = new octave::tree_constant (tmp);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
648 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
649 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
650
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
651 magic_tilde : EXPR_NOT
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
652 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
653 YYUSE ($1);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
654
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
655 $$ = new octave::tree_black_hole ();
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
656 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
657 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
658
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
659 arg_list : expression
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
660 { $$ = new octave::tree_argument_list ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
661 | magic_colon
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
662 { $$ = new octave::tree_argument_list ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
663 | magic_tilde
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
664 { $$ = new octave::tree_argument_list ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
665 | arg_list ',' magic_colon
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
666 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
667 $1->append ($3);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
668 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
669 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
670 | arg_list ',' magic_tilde
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
671 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
672 $1->append ($3);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
673 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
674 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
675 | arg_list ',' expression
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
676 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
677 $1->append ($3);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
678 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
679 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
680 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
681
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
682 indirect_ref_op : '.'
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
683 {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
684 $$ = 0;
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
685 lexer.m_looking_at_indirect_ref = true;
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
686 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
687 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
688
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
689 oper_expr : primary_expr
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
690 { $$ = $1; }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
691 | oper_expr PLUS_PLUS
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
692 { $$ = parser.make_postfix_op (PLUS_PLUS, $1, $2); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
693 | oper_expr MINUS_MINUS
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
694 { $$ = parser.make_postfix_op (MINUS_MINUS, $1, $2); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
695 | oper_expr '(' ')'
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
696 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
697 $$ = parser.make_index_expression ($1, nullptr, '(');
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
698 if (! $$)
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
699 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
700 // make_index_expression deleted $1.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
701 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
702 }
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
703 }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
704 | oper_expr '(' arg_list ')'
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
705 {
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
706 $$ = parser.make_index_expression ($1, $3, '(');
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
707 if (! $$)
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
708 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
709 // make_index_expression deleted $1 and $3.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
710 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
711 }
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
712 }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
713 | oper_expr '{' '}'
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
714 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
715 $$ = parser.make_index_expression ($1, nullptr, '{');
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
716 if (! $$)
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
717 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
718 // make_index_expression deleted $1.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
719 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
720 }
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
721 }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
722 | oper_expr '{' arg_list '}'
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
723 {
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
724 $$ = parser.make_index_expression ($1, $3, '{');
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
725 if (! $$)
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
726 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
727 // make_index_expression deleted $1 and $3.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
728 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
729 }
16302
a4af67e0d22c oct-parse.in.yy: a{~}.b segfaults the interpreter (bug #37804)
Max Brister <max@2bass.com>
parents: 16294
diff changeset
730 }
16284
09881dab3aaf * lex.ll, oct-parse.in.yy (HERMITIAN): Rename token from QUOTE.
John W. Eaton <jwe@octave.org>
parents: 16279
diff changeset
731 | oper_expr HERMITIAN
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
732 { $$ = parser.make_postfix_op (HERMITIAN, $1, $2); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
733 | oper_expr TRANSPOSE
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
734 { $$ = parser.make_postfix_op (TRANSPOSE, $1, $2); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
735 | oper_expr indirect_ref_op STRUCT_ELT
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
736 { $$ = parser.make_indirect_ref ($1, $3->text ()); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
737 | oper_expr indirect_ref_op '(' expression ')'
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
738 { $$ = parser.make_indirect_ref ($1, $4); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
739 | PLUS_PLUS oper_expr %prec UNARY
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
740 { $$ = parser.make_prefix_op (PLUS_PLUS, $2, $1); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
741 | MINUS_MINUS oper_expr %prec UNARY
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
742 { $$ = parser.make_prefix_op (MINUS_MINUS, $2, $1); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
743 | EXPR_NOT oper_expr %prec UNARY
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
744 { $$ = parser.make_prefix_op (EXPR_NOT, $2, $1); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
745 | '+' oper_expr %prec UNARY
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
746 { $$ = parser.make_prefix_op ('+', $2, $1); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
747 | '-' oper_expr %prec UNARY
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
748 { $$ = parser.make_prefix_op ('-', $2, $1); }
17622
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
749 | oper_expr POW power_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
750 { $$ = parser.make_binary_op (POW, $1, $2, $3); }
17622
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
751 | oper_expr EPOW power_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
752 { $$ = parser.make_binary_op (EPOW, $1, $2, $3); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
753 | oper_expr '+' oper_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
754 { $$ = parser.make_binary_op ('+', $1, $2, $3); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
755 | oper_expr '-' oper_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
756 { $$ = parser.make_binary_op ('-', $1, $2, $3); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
757 | oper_expr '*' oper_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
758 { $$ = parser.make_binary_op ('*', $1, $2, $3); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
759 | oper_expr '/' oper_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
760 { $$ = parser.make_binary_op ('/', $1, $2, $3); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
761 | oper_expr EPLUS oper_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
762 { $$ = parser.make_binary_op ('+', $1, $2, $3); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
763 | oper_expr EMINUS oper_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
764 { $$ = parser.make_binary_op ('-', $1, $2, $3); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
765 | oper_expr EMUL oper_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
766 { $$ = parser.make_binary_op (EMUL, $1, $2, $3); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
767 | oper_expr EDIV oper_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
768 { $$ = parser.make_binary_op (EDIV, $1, $2, $3); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
769 | oper_expr LEFTDIV oper_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
770 { $$ = parser.make_binary_op (LEFTDIV, $1, $2, $3); }
12627
002948ae5bc0 fix precedence level of transpose operators (bug #32533)
John W. Eaton <jwe@octave.org>
parents: 12483
diff changeset
771 | oper_expr ELEFTDIV oper_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
772 { $$ = parser.make_binary_op (ELEFTDIV, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
773 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
774
17622
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
775 power_expr : primary_expr
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
776 { $$ = $1; }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
777 | power_expr PLUS_PLUS
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
778 { $$ = parser.make_postfix_op (PLUS_PLUS, $1, $2); }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
779 | power_expr MINUS_MINUS
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
780 { $$ = parser.make_postfix_op (MINUS_MINUS, $1, $2); }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
781 | power_expr '(' ')'
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
782 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
783 $$ = parser.make_index_expression ($1, nullptr, '(');
17622
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
784 if (! $$)
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
785 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
786 // make_index_expression deleted $1.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
787 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
788 }
17622
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
789 }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
790 | power_expr '(' arg_list ')'
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
791 {
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
792 $$ = parser.make_index_expression ($1, $3, '(');
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
793 if (! $$)
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
794 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
795 // make_index_expression deleted $1 and $3.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
796 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
797 }
17622
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
798 }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
799 | power_expr '{' '}'
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
800 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
801 $$ = parser.make_index_expression ($1, nullptr, '{');
17622
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
802 if (! $$)
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
803 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
804 // make_index_expression deleted $1.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
805 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
806 }
17622
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
807 }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
808 | power_expr '{' arg_list '}'
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
809 {
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
810 $$ = parser.make_index_expression ($1, $3, '{');
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
811 if (! $$)
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
812 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
813 // make_index_expression deleted $1 and $3.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
814 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
815 }
17622
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
816 }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
817 | power_expr indirect_ref_op STRUCT_ELT
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
818 { $$ = parser.make_indirect_ref ($1, $3->text ()); }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
819 | power_expr indirect_ref_op '(' expression ')'
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
820 { $$ = parser.make_indirect_ref ($1, $4); }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
821 | PLUS_PLUS power_expr %prec POW
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
822 { $$ = parser.make_prefix_op (PLUS_PLUS, $2, $1); }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
823 | MINUS_MINUS power_expr %prec POW
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
824 { $$ = parser.make_prefix_op (MINUS_MINUS, $2, $1); }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
825 | EXPR_NOT power_expr %prec POW
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
826 { $$ = parser.make_prefix_op (EXPR_NOT, $2, $1); }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
827 | '+' power_expr %prec POW
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
828 { $$ = parser.make_prefix_op ('+', $2, $1); }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
829 | '-' power_expr %prec POW
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
830 { $$ = parser.make_prefix_op ('-', $2, $1); }
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
831 ;
fd712a12fe53 compatibility for power operator precedence and direction (bug #33304)
Axel Mathéi <axel.mathei@gmail.com>
parents: 17618
diff changeset
832
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
833 colon_expr : oper_expr ':' oper_expr
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
834 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
835 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
836
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
837 $$ = parser.make_colon_expression ($1, $3);
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
838
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
839 if (! $$)
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
840 {
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
841 // finish_colon_expression deleted $1 and $3.
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
842 YYABORT;
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
843 }
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
844 }
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
845 | oper_expr ':' oper_expr ':' oper_expr
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
846 {
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
847 YYUSE ($2);
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
848 YYUSE ($4);
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
849
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
850 $$ = parser.make_colon_expression ($1, $5, $3);
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
851
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
852 if (! $$)
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
853 {
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
854 // finish_colon_expression deleted $1, $3, and $5.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
855 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
856 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
857 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
858 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
859
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
860 simple_expr : oper_expr
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
861 { $$ = $1; }
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
862 | colon_expr
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
863 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
864 | simple_expr EXPR_LT simple_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
865 { $$ = parser.make_binary_op (EXPR_LT, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
866 | simple_expr EXPR_LE simple_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
867 { $$ = parser.make_binary_op (EXPR_LE, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
868 | simple_expr EXPR_EQ simple_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
869 { $$ = parser.make_binary_op (EXPR_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
870 | simple_expr EXPR_GE simple_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
871 { $$ = parser.make_binary_op (EXPR_GE, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
872 | simple_expr EXPR_GT simple_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
873 { $$ = parser.make_binary_op (EXPR_GT, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
874 | simple_expr EXPR_NE simple_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
875 { $$ = parser.make_binary_op (EXPR_NE, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
876 | simple_expr EXPR_AND simple_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
877 { $$ = parser.make_binary_op (EXPR_AND, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
878 | simple_expr EXPR_OR simple_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
879 { $$ = parser.make_binary_op (EXPR_OR, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
880 | simple_expr EXPR_AND_AND simple_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
881 { $$ = parser.make_boolean_op (EXPR_AND_AND, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
882 | simple_expr EXPR_OR_OR simple_expr
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
883 { $$ = parser.make_boolean_op (EXPR_OR_OR, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
884 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
885
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
886 assign_lhs : simple_expr
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
887 {
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
888 $$ = parser.validate_matrix_for_assignment ($1);
16273
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
889
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
890 if ($$)
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
891 { lexer.m_looking_at_matrix_or_assign_lhs = false; }
16273
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
892 else
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
893 {
16277
8cb65fd72164 eliminate obsolete concepts of "pending local" and "forced" variables
John W. Eaton <jwe@octave.org>
parents: 16273
diff changeset
894 // validate_matrix_for_assignment deleted $1.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
895 YYABORT;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
896 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
897 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
898 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
899
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
900 assign_expr : assign_lhs '=' expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
901 { $$ = parser.make_assign_op ('=', $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
902 | assign_lhs ADD_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
903 { $$ = parser.make_assign_op (ADD_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
904 | assign_lhs SUB_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
905 { $$ = parser.make_assign_op (SUB_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
906 | assign_lhs MUL_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
907 { $$ = parser.make_assign_op (MUL_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
908 | assign_lhs DIV_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
909 { $$ = parser.make_assign_op (DIV_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
910 | assign_lhs LEFTDIV_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
911 { $$ = parser.make_assign_op (LEFTDIV_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
912 | assign_lhs POW_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
913 { $$ = parser.make_assign_op (POW_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
914 | assign_lhs EMUL_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
915 { $$ = parser.make_assign_op (EMUL_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
916 | assign_lhs EDIV_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
917 { $$ = parser.make_assign_op (EDIV_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
918 | assign_lhs ELEFTDIV_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
919 { $$ = parser.make_assign_op (ELEFTDIV_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
920 | assign_lhs EPOW_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
921 { $$ = parser.make_assign_op (EPOW_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
922 | assign_lhs AND_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
923 { $$ = parser.make_assign_op (AND_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
924 | assign_lhs OR_EQ expression
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
925 { $$ = parser.make_assign_op (OR_EQ, $1, $2, $3); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
926 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
927
23600
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
928 expr_no_assign : simple_expr
16273
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
929 {
23576
00e518162fda maint: Deprecate is_cell and replace with iscell.
Rik <rik@octave.org>
parents: 23553
diff changeset
930 if ($1 && ($1->is_matrix () || $1->iscell ()))
16273
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
931 {
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
932 if (parser.validate_array_list ($1))
16273
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
933 $$ = $1;
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
934 else
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
935 {
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
936 delete $1;
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
937 YYABORT;
16273
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
938 }
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
939 }
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
940 else
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
941 $$ = $1;
c5e5f6ccac5d 9/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16265
diff changeset
942 }
23600
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
943 | anon_fcn_handle
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
944 { $$ = $1; }
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
945 ;
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
946
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
947 expression : expr_no_assign
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
948 { $$ = $1; }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
949 | assign_expr
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
950 {
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
951 if (! $1)
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
952 YYABORT;
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
953
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
954 $$ = $1;
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
955 }
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
956
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
957 // ================================================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
958 // Commands, declarations, and function definitions
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
959 // ================================================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
960
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
961 command : declaration
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
962 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
963 | select_command
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
964 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
965 | loop_command
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
966 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
967 | jump_command
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
968 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
969 | except_command
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
970 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
971 | function
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
972 { $$ = $1; }
16203
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
973 | file
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
974 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
975 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
976
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
977 // =====================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
978 // Declaration statemnts
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
979 // =====================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
980
16263
9acb86e6ac90 4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16259
diff changeset
981 declaration : GLOBAL decl1
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
982 {
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
983 $$ = parser.make_decl_command (GLOBAL, $1, $2);
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
984 lexer.m_looking_at_decl_list = false;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
985 }
16263
9acb86e6ac90 4/10 commits reworking the lexer
John W. Eaton <jwe@octave.org>
parents: 16259
diff changeset
986 | PERSISTENT decl1
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
987 {
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
988 $$ = parser.make_decl_command (PERSISTENT, $1, $2);
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
989 lexer.m_looking_at_decl_list = false;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
990 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
991 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
992
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
993 decl1 : decl2
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
994 { $$ = new octave::tree_decl_init_list ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
995 | decl1 decl2
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
996 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
997 $1->append ($2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
998 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
999 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1000 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1001
7634
ae90e05ad299 fix parameter list initializer bug
John W. Eaton <jwe@octave.org>
parents: 7587
diff changeset
1002 decl_param_init : // empty
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1003 {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1004 $$ = 0;
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1005 lexer.m_looking_at_initializer_expression = true;
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1006 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1007
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1008 decl2 : identifier
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1009 { $$ = new octave::tree_decl_elt ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1010 | identifier '=' decl_param_init expression
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1011 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1012 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1013
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1014 lexer.m_looking_at_initializer_expression = false;
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1015 $$ = new octave::tree_decl_elt ($1, $4);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1016 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1017 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1018
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1019 // ====================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1020 // Selection statements
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1021 // ====================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1022
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1023 select_command : if_command
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1024 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1025 | switch_command
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1026 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1027 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1028
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1029 // ============
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1030 // If statement
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1031 // ============
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1032
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1033 if_command : IF stash_comment if_cmd_list END
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1034 {
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1035 if (! ($$ = parser.finish_if_command ($1, $3, $4, $2)))
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1036 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1037 // finish_if_command deleted $3.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1038 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1039 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1040 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1041 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1042
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1043 if_cmd_list : if_cmd_list1
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1044 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1045 | if_cmd_list1 else_clause
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1046 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1047 $1->append ($2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1048 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1049 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1050 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1051
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
1052 if_cmd_list1 : expression stmt_begin opt_sep opt_list
11091
5677f3f7b5fa Matlab compatible short-circuit behavior for & and | operators
John W. Eaton <jwe@octave.org>
parents: 11060
diff changeset
1053 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1054 YYUSE ($3);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1055
18127
d76f790b4eec enable do_braindead_shortcircuit_evaluation by default and deprecate
John W. Eaton <jwe@octave.org>
parents: 17796
diff changeset
1056 $1->mark_braindead_shortcircuit ();
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1057
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
1058 $$ = parser.start_if_command ($1, $4);
11091
5677f3f7b5fa Matlab compatible short-circuit behavior for & and | operators
John W. Eaton <jwe@octave.org>
parents: 11060
diff changeset
1059 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1060 | if_cmd_list1 elseif_clause
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1061 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1062 $1->append ($2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1063 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1064 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1065 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1066
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
1067 elseif_clause : ELSEIF stash_comment opt_sep expression stmt_begin opt_sep opt_list
11091
5677f3f7b5fa Matlab compatible short-circuit behavior for & and | operators
John W. Eaton <jwe@octave.org>
parents: 11060
diff changeset
1068 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1069 YYUSE ($3);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1070 YYUSE ($6);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1071
18127
d76f790b4eec enable do_braindead_shortcircuit_evaluation by default and deprecate
John W. Eaton <jwe@octave.org>
parents: 17796
diff changeset
1072 $4->mark_braindead_shortcircuit ();
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1073
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
1074 $$ = parser.make_elseif_clause ($1, $4, $7, $2);
11091
5677f3f7b5fa Matlab compatible short-circuit behavior for & and | operators
John W. Eaton <jwe@octave.org>
parents: 11060
diff changeset
1075 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1076 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1077
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1078 else_clause : ELSE stash_comment opt_sep opt_list
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1079 {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1080 YYUSE ($1);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1081 YYUSE ($3);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1082
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1083 $$ = new octave::tree_if_clause ($4, $2);
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1084 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1085 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1086
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1087 // ================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1088 // Switch statement
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1089 // ================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1090
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1091 switch_command : SWITCH stash_comment expression opt_sep case_list END
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1092 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1093 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1094
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1095 if (! ($$ = parser.finish_switch_command ($1, $3, $5, $6, $2)))
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1096 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1097 // finish_switch_command deleted $3 adn $5.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1098 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1099 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1100 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1101 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1102
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1103 case_list : // empty
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1104 { $$ = new octave::tree_switch_case_list (); }
11317
2da532d0f41c accept otherwise clause in switch statement without preceding case statements
John W. Eaton <jwe@octave.org>
parents: 11258
diff changeset
1105 | default_case
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1106 { $$ = new octave::tree_switch_case_list ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1107 | case_list1
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1108 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1109 | case_list1 default_case
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1110 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1111 $1->append ($2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1112 $$ = $1;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11572
diff changeset
1113 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1114 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1115
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1116 case_list1 : switch_case
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1117 { $$ = new octave::tree_switch_case_list ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1118 | case_list1 switch_case
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1119 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1120 $1->append ($2);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1121 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1122 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1123 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1124
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
1125 switch_case : CASE stash_comment opt_sep expression stmt_begin opt_sep opt_list
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1126 {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1127 YYUSE ($3);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1128 YYUSE ($6);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1129
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1130 $$ = parser.make_switch_case ($1, $4, $7, $2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1131 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1132 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1133
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1134 default_case : OTHERWISE stash_comment opt_sep opt_list
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1135 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1136 YYUSE ($1);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1137 YYUSE ($3);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1138
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1139 $$ = new octave::tree_switch_case ($4, $2);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1140 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1141 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1142
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1143 // =======
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1144 // Looping
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1145 // =======
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1146
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
1147 loop_command : WHILE stash_comment expression stmt_begin opt_sep opt_list END
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1148 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1149 YYUSE ($5);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1150
18127
d76f790b4eec enable do_braindead_shortcircuit_evaluation by default and deprecate
John W. Eaton <jwe@octave.org>
parents: 17796
diff changeset
1151 $3->mark_braindead_shortcircuit ();
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1152
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
1153 if (! ($$ = parser.make_while_command ($1, $3, $6, $7, $2)))
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1154 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1155 // make_while_command deleted $3 and $6.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1156 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1157 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1158 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1159 | DO stash_comment opt_sep opt_list UNTIL expression
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1160 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1161 YYUSE ($1);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1162 YYUSE ($3);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1163
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1164 $$ = parser.make_do_until_command ($5, $4, $6, $2);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1165 }
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
1166 | FOR stash_comment assign_lhs '=' expression stmt_begin opt_sep opt_list END
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1167 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1168 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1169 YYUSE ($7);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1170
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1171 if (! ($$ = parser.make_for_command (FOR, $1, $3, $5,
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1172 nullptr, $8, $9, $2)))
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1173 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1174 // make_for_command deleted $3, $5, and $8.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1175 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1176 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1177 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1178 | FOR stash_comment '(' assign_lhs '=' expression ')' opt_sep opt_list END
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1179 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1180 YYUSE ($5);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1181 YYUSE ($8);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1182
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1183 if (! ($$ = parser.make_for_command (FOR, $1, $4, $6,
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1184 nullptr, $9, $10, $2)))
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1185 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1186 // make_for_command deleted $4, $6, and $9.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1187 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1188 }
13245
027a2186cd90 parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents: 13241
diff changeset
1189 }
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
1190 | PARFOR stash_comment assign_lhs '=' expression stmt_begin opt_sep opt_list END
13245
027a2186cd90 parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents: 13241
diff changeset
1191 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1192 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1193 YYUSE ($7);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1194
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1195 if (! ($$ = parser.make_for_command (PARFOR, $1, $3, $5,
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1196 nullptr, $8, $9, $2)))
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1197 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1198 // make_for_command deleted $3, $5, and $8.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1199 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1200 }
13245
027a2186cd90 parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents: 13241
diff changeset
1201 }
027a2186cd90 parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents: 13241
diff changeset
1202 | PARFOR stash_comment '(' assign_lhs '=' expression ',' expression ')' opt_sep opt_list END
027a2186cd90 parfor keyword and infrastructure, but handle parfor as normal for loop for now
John W. Eaton <jwe@octave.org>
parents: 13241
diff changeset
1203 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1204 YYUSE ($5);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1205 YYUSE ($10);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1206
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1207 if (! ($$ = parser.make_for_command (PARFOR, $1, $4, $6,
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1208 $8, $11, $12, $2)))
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1209 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1210 // make_for_command deleted $4, $6, $8, and $11.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1211 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1212 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1213 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1214 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1215
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1216 // =======
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1217 // Jumping
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1218 // =======
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1219
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1220 jump_command : BREAK
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
1221 {
9c6661004167 error if break statement is in script file separate from loop (bug #39168)
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
1222 if (! ($$ = parser.make_break_command ($1)))
9c6661004167 error if break statement is in script file separate from loop (bug #39168)
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
1223 YYABORT;
9c6661004167 error if break statement is in script file separate from loop (bug #39168)
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
1224 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1225 | CONTINUE
26981
12532d392693 error if continue is used outside of a for loop (bug #55995)
John W. Eaton <jwe@octave.org>
parents: 26906
diff changeset
1226 {
12532d392693 error if continue is used outside of a for loop (bug #55995)
John W. Eaton <jwe@octave.org>
parents: 26906
diff changeset
1227 if (! ($$ = parser.make_continue_command ($1)))
12532d392693 error if continue is used outside of a for loop (bug #55995)
John W. Eaton <jwe@octave.org>
parents: 26906
diff changeset
1228 YYABORT;
12532d392693 error if continue is used outside of a for loop (bug #55995)
John W. Eaton <jwe@octave.org>
parents: 26906
diff changeset
1229 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1230 | FUNC_RET
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1231 { $$ = parser.make_return_command ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1232 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1233
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1234 // ==========
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1235 // Exceptions
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1236 // ==========
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1237
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1238 except_command : UNWIND stash_comment opt_sep opt_list CLEANUP
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1239 stash_comment opt_sep opt_list END
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1240 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1241 YYUSE ($3);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1242 YYUSE ($5);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1243 YYUSE ($7);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1244
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1245 if (! ($$ = parser.make_unwind_command ($1, $4, $8, $9, $2, $6)))
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1246 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1247 // make_unwind_command deleted $4 and $8.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1248 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1249 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1250 }
17283
e6c0ac8ce5b6 eliminate parse conflicts introduced by changeset 923ce8b42db2
John W. Eaton <jwe@octave.org>
parents: 17281
diff changeset
1251 | TRY stash_comment opt_sep opt_list CATCH stash_comment
e6c0ac8ce5b6 eliminate parse conflicts introduced by changeset 923ce8b42db2
John W. Eaton <jwe@octave.org>
parents: 17281
diff changeset
1252 opt_sep opt_list END
17249
923ce8b42db2 improve try-catch-statement to save exception to a variable (bug #33217)
Stefan Mahr <dac922@gmx.de>
parents: 17170
diff changeset
1253 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1254 YYUSE ($3);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1255 YYUSE ($5);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1256 YYUSE ($7);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1257
17283
e6c0ac8ce5b6 eliminate parse conflicts introduced by changeset 923ce8b42db2
John W. Eaton <jwe@octave.org>
parents: 17281
diff changeset
1258 if (! ($$ = parser.make_try_command ($1, $4, $7, $8, $9, $2, $6)))
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1259 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1260 // make_try_command deleted $4 and $8.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1261 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1262 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1263 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1264 | TRY stash_comment opt_sep opt_list END
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1265 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1266 YYUSE ($3);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1267
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1268 if (! ($$ = parser.make_try_command ($1, $4, 0, nullptr,
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1269 $5, $2, nullptr)))
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1270 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1271 // make_try_command deleted $4.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1272 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1273 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1274 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1275 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1276
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1277 // ===========================================
15466
d174210ce1ec use ' instead of ` in error messages, warnings and most comments
John W. Eaton <jwe@octave.org>
parents: 14189
diff changeset
1278 // Some 'subroutines' for function definitions
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1279 // ===========================================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1280
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1281 push_fcn_symtab : // empty
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1282 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1283 $$ = 0;
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1284
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1285 parser.m_curr_fcn_depth++;
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1286
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1287 if (parser.m_max_fcn_depth < parser.m_curr_fcn_depth)
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1288 parser.m_max_fcn_depth = parser.m_curr_fcn_depth;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1289
24354
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
1290 // Will get a real name later.
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1291 lexer.m_symtab_context.push (octave::symbol_scope ("parser:push_fcn_symtab"));
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1292 parser.m_function_scopes.push (lexer.m_symtab_context.curr_scope ());
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1293
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1294 if (! lexer.m_reading_script_file
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
1295 && parser.m_curr_fcn_depth == 0
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1296 && ! parser.m_parsing_subfunctions)
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1297 parser.m_primary_fcn_scope
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1298 = lexer.m_symtab_context.curr_scope ();
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1299
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1300 if (lexer.m_reading_script_file
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
1301 && parser.m_curr_fcn_depth > 0)
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1302 {
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1303 parser.bison_error ("nested functions not implemented in this context");
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1304 YYABORT;
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1305 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1306 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1307 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1308
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1309 // ===========================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1310 // List of function parameters
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1311 // ===========================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1312
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1313 param_list_beg : '('
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1314 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1315 $$ = 0;
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1316 lexer.m_looking_at_parameter_list = true;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1317
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1318 if (lexer.m_looking_at_function_handle)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1319 {
24354
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
1320 // Will get a real name later.
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1321 lexer.m_symtab_context.push (octave::symbol_scope ("parser:param_lsit_beg"));
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1322 lexer.m_looking_at_function_handle--;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1323 lexer.m_looking_at_anon_fcn_args = true;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1324 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1325 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1326 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1327
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1328 param_list_end : ')'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1329 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1330 $$ = 0;
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1331 lexer.m_looking_at_parameter_list = false;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1332 lexer.m_looking_for_object_index = false;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1333 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1334 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1335
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1336 opt_param_list : // empty
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1337 { $$ = nullptr; }
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1338 | param_list
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1339 { $$ = $1; }
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1340 ;
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1341
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1342 param_list : param_list_beg param_list1 param_list_end
16360
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 16320
diff changeset
1343 {
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 16320
diff changeset
1344 if ($2)
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 16320
diff changeset
1345 lexer.mark_as_variables ($2->variable_names ());
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 16320
diff changeset
1346
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 16320
diff changeset
1347 $$ = $2;
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 16320
diff changeset
1348 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1349 | param_list_beg error
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1350 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1351 $$ = nullptr;
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1352 parser.bison_error ("invalid parameter list");
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1353 YYABORT;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1354 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1355 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1356
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1357 param_list1 : // empty
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1358 { $$ = nullptr; }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1359 | param_list2
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1360 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1361 $1->mark_as_formal_parameters ();
23654
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
1362
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
1363 if (parser.validate_param_list ($1, octave::tree_parameter_list::in))
16360
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 16320
diff changeset
1364 {
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 16320
diff changeset
1365 lexer.mark_as_variables ($1->variable_names ());
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 16320
diff changeset
1366 $$ = $1;
11115c237231 recognize variables when parsing (bug #38576)
John W. Eaton <jwe@octave.org>
parents: 16320
diff changeset
1367 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1368 else
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1369 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1370 delete $1;
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1371 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1372 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1373 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1374 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1375
17317
56fe31b248de disallow ~ in global and persistent declaration lists
John W. Eaton <jwe@octave.org>
parents: 17316
diff changeset
1376 param_list2 : param_list_elt
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1377 { $$ = new octave::tree_parameter_list ($1); }
17317
56fe31b248de disallow ~ in global and persistent declaration lists
John W. Eaton <jwe@octave.org>
parents: 17316
diff changeset
1378 | param_list2 ',' param_list_elt
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1379 {
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1380 $1->append ($3);
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1381 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1382 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1383 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1384
17317
56fe31b248de disallow ~ in global and persistent declaration lists
John W. Eaton <jwe@octave.org>
parents: 17316
diff changeset
1385 param_list_elt : decl2
56fe31b248de disallow ~ in global and persistent declaration lists
John W. Eaton <jwe@octave.org>
parents: 17316
diff changeset
1386 { $$ = $1; }
56fe31b248de disallow ~ in global and persistent declaration lists
John W. Eaton <jwe@octave.org>
parents: 17316
diff changeset
1387 | magic_tilde
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1388 { $$ = new octave::tree_decl_elt ($1); }
17317
56fe31b248de disallow ~ in global and persistent declaration lists
John W. Eaton <jwe@octave.org>
parents: 17316
diff changeset
1389 ;
56fe31b248de disallow ~ in global and persistent declaration lists
John W. Eaton <jwe@octave.org>
parents: 17316
diff changeset
1390
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1391 // ===================================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1392 // List of function return value names
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1393 // ===================================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1394
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1395 return_list : '[' ']'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1396 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1397 lexer.m_looking_at_return_list = false;
17316
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1398
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1399 $$ = new octave::tree_parameter_list ();
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1400 }
17316
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1401 | identifier
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1402 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1403 lexer.m_looking_at_return_list = false;
17316
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1404
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1405 octave::tree_parameter_list *tmp = new octave::tree_parameter_list ($1);
17316
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1406
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1407 // Even though this parameter list can contain only
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1408 // a single identifier, we still need to validate it
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1409 // to check for varargin or varargout.
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1410
23654
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
1411 if (parser.validate_param_list (tmp, octave::tree_parameter_list::out))
17316
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1412 $$ = tmp;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1413 else
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1414 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1415 delete tmp;
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1416 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1417 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1418 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1419 | '[' return_list1 ']'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1420 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1421 lexer.m_looking_at_return_list = false;
17316
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1422
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1423 // Check for duplicate parameter names, varargin,
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1424 // or varargout.
8e2906e2fb26 avoid reduce/reduce conflict in parser rules
John W. Eaton <jwe@octave.org>
parents: 17283
diff changeset
1425
23654
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
1426 if (parser.validate_param_list ($2, octave::tree_parameter_list::out))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1427 $$ = $2;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1428 else
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1429 {
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1430 delete $2;
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1431 YYABORT;
17632
bd0a84de3375 further reduce memory leaks from parse errors (bug #40231)
John W. Eaton <jwe@octave.org>
parents: 17629
diff changeset
1432 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1433 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1434 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1435
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1436 return_list1 : identifier
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1437 { $$ = new octave::tree_parameter_list (new octave::tree_decl_elt ($1)); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1438 | return_list1 ',' identifier
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1439 {
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1440 $1->append (new octave::tree_decl_elt ($3));
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1441 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1442 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1443 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1444
16203
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
1445 // =======================
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
1446 // Script or function file
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
1447 // =======================
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
1448
23343
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
1449 parsing_local_fcns
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
1450 : // empty
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1451 { parser.m_parsing_local_functions = true; }
23343
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
1452 ;
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
1453
24037
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1454 push_script_symtab : // empty
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1455 {
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1456 $$ = 0;
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1457
24377
ea3458c1d884 improve handling of invalid symbol_scope objects (bug #52607)
John W. Eaton <jwe@octave.org>
parents: 24361
diff changeset
1458 // This scope may serve as the parent scope for local
ea3458c1d884 improve handling of invalid symbol_scope objects (bug #52607)
John W. Eaton <jwe@octave.org>
parents: 24361
diff changeset
1459 // functions in classdef files..
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1460 lexer.m_symtab_context.push (octave::symbol_scope ("parser:push_script_symtab"));
24037
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1461 }
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1462 ;
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1463
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1464 begin_file : push_script_symtab INPUT_FILE
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1465 { $$ = 0; }
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1466 ;
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1467
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1468 file : begin_file opt_nl opt_list END_OF_INPUT
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1469 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1470 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1471
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1472 if (lexer.m_reading_fcn_file)
17618
77eff9c6fb09 avoid memory leak when parsing function files (bug #40218)
John W. Eaton <jwe@octave.org>
parents: 17377
diff changeset
1473 {
77eff9c6fb09 avoid memory leak when parsing function files (bug #40218)
John W. Eaton <jwe@octave.org>
parents: 17377
diff changeset
1474 // Delete the dummy statement_list we created
77eff9c6fb09 avoid memory leak when parsing function files (bug #40218)
John W. Eaton <jwe@octave.org>
parents: 17377
diff changeset
1475 // after parsing the function. Any function
77eff9c6fb09 avoid memory leak when parsing function files (bug #40218)
John W. Eaton <jwe@octave.org>
parents: 17377
diff changeset
1476 // definitions found in the file have already
77eff9c6fb09 avoid memory leak when parsing function files (bug #40218)
John W. Eaton <jwe@octave.org>
parents: 17377
diff changeset
1477 // been stored in the symbol table or in
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1478 // base_parser::m_primary_fcn_ptr.
17618
77eff9c6fb09 avoid memory leak when parsing function files (bug #40218)
John W. Eaton <jwe@octave.org>
parents: 17377
diff changeset
1479
24037
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1480 // Unused symbol table context.
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1481 lexer.m_symtab_context.pop ();
17618
77eff9c6fb09 avoid memory leak when parsing function files (bug #40218)
John W. Eaton <jwe@octave.org>
parents: 17377
diff changeset
1482
77eff9c6fb09 avoid memory leak when parsing function files (bug #40218)
John W. Eaton <jwe@octave.org>
parents: 17377
diff changeset
1483 delete $3;
77eff9c6fb09 avoid memory leak when parsing function files (bug #40218)
John W. Eaton <jwe@octave.org>
parents: 17377
diff changeset
1484 }
77eff9c6fb09 avoid memory leak when parsing function files (bug #40218)
John W. Eaton <jwe@octave.org>
parents: 17377
diff changeset
1485 else
16203
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
1486 {
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1487 octave::tree_statement *end_of_script
16627
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 16574
diff changeset
1488 = parser.make_end ("endscript", true,
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1489 lexer.m_input_line_number,
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1490 lexer.m_current_input_column);
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1491
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1492 parser.make_script ($3, end_of_script);
16203
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
1493 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1494
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1495 $$ = nullptr;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1496 }
24037
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1497 | begin_file opt_nl classdef parsing_local_fcns opt_sep opt_fcn_list END_OF_INPUT
16211
3449bf257514 maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16205
diff changeset
1498 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1499 YYUSE ($2);
23343
49f051ef6f2f local functions in classdef files (bug #41723)
John W. Eaton <jwe@octave.org>
parents: 23342
diff changeset
1500 YYUSE ($5);
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1501
24037
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1502 // Unused symbol table context.
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1503 lexer.m_symtab_context.pop ();
24037
21915520ac7b use more direct method for non-local symbol access (bug #38236)
John W. Eaton <jwe@octave.org>
parents: 23850
diff changeset
1504
24067
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
1505 parser.finish_classdef_file ($3, $6);
16211
3449bf257514 maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16205
diff changeset
1506
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1507 $$ = nullptr;
16211
3449bf257514 maint: fix botched merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16205
diff changeset
1508 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1509 ;
7715
5b4d278ec828 parse scripts completely before executing
John W. Eaton <jwe@octave.org>
parents: 7699
diff changeset
1510
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1511 // ===================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1512 // Function definition
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1513 // ===================
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1514
16627
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 16574
diff changeset
1515 function_beg : push_fcn_symtab FCN
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1516 {
16627
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 16574
diff changeset
1517 $$ = $2;
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1518 if (lexer.m_reading_classdef_file
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1519 || lexer.m_parsing_classdef)
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1520 lexer.m_maybe_classdef_get_set_method = true;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1521 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1522 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1523
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1524 fcn_name : identifier
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1525 {
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
1526 std::string id = $1->name ();
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
1527
24069
f8b8a8e6bd79 make local functions and method names unique for parser (Bug #52075)
Piotr Held <pjheld@gmail.com>
parents: 24067
diff changeset
1528 // Make classdef local functions unique from
f8b8a8e6bd79 make local functions and method names unique for parser (Bug #52075)
Piotr Held <pjheld@gmail.com>
parents: 24067
diff changeset
1529 // classdef methods.
f8b8a8e6bd79 make local functions and method names unique for parser (Bug #52075)
Piotr Held <pjheld@gmail.com>
parents: 24067
diff changeset
1530
f8b8a8e6bd79 make local functions and method names unique for parser (Bug #52075)
Piotr Held <pjheld@gmail.com>
parents: 24067
diff changeset
1531 if (parser.m_parsing_local_functions
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
1532 && parser.m_curr_fcn_depth == 0)
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1533 id = lexer.m_fcn_file_name + ">" + id;
24069
f8b8a8e6bd79 make local functions and method names unique for parser (Bug #52075)
Piotr Held <pjheld@gmail.com>
parents: 24067
diff changeset
1534
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1535 if (! parser.m_function_scopes.name_current_scope (id))
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
1536 {
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
1537 parser.bison_error ("duplicate subfunction or nested function name",
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
1538 $1->line (), $1->column ());
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
1539
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
1540 delete $1;
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
1541
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
1542 YYABORT;
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
1543 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1544
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
1545 octave::symbol_scope curr_scope
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1546 = lexer.m_symtab_context.curr_scope ();
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
1547 curr_scope.cache_name (id);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1548
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1549 lexer.m_parsed_function_name.top () = true;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1550 lexer.m_maybe_classdef_get_set_method = false;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11572
diff changeset
1551
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1552 $$ = $1;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1553 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1554 | GET '.' identifier
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1555 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1556 YYUSE ($1);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1557
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1558 lexer.m_parsed_function_name.top () = true;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1559 lexer.m_maybe_classdef_get_set_method = false;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1560 lexer.m_parsing_classdef_get_method = true;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1561 $$ = $3;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1562 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1563 | SET '.' identifier
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1564 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1565 YYUSE ($1);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1566
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1567 lexer.m_parsed_function_name.top () = true;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1568 lexer.m_maybe_classdef_get_set_method = false;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1569 lexer.m_parsing_classdef_set_method = true;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1570 $$ = $3;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1571 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1572 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1573
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1574 function_end : END
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1575 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1576 parser.m_endfunction_found = true;
21071
f25c14056b7c overhaul parser error handling for end token mismatch
John W. Eaton <jwe@octave.org>
parents: 21066
diff changeset
1577
23398
d4ef04757ead eliminate some compiler warnings
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
1578 if (parser.end_token_ok ($1, octave::token::function_end))
16627
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 16574
diff changeset
1579 $$ = parser.make_end ("endfunction", false,
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 16574
diff changeset
1580 $1->line (), $1->column ());
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1581 else
21071
f25c14056b7c overhaul parser error handling for end token mismatch
John W. Eaton <jwe@octave.org>
parents: 21066
diff changeset
1582 {
23398
d4ef04757ead eliminate some compiler warnings
John W. Eaton <jwe@octave.org>
parents: 23396
diff changeset
1583 parser.end_token_error ($1, octave::token::function_end);
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1584 YYABORT;
21071
f25c14056b7c overhaul parser error handling for end token mismatch
John W. Eaton <jwe@octave.org>
parents: 21066
diff changeset
1585 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1586 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1587 | END_OF_INPUT
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1588 {
9474
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
1589 // A lot of tests are based on the assumption that this is OK
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1590 // if (lexer.m_reading_script_file)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1591 // {
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1592 // parser.bison_error ("function body open at end of script");
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1593 // YYABORT;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1594 // }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1595
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
1596 if (parser.m_endfunction_found)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1597 {
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1598 parser.bison_error ("inconsistent function endings -- "
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1599 "if one function is explicitly ended, "
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1600 "so must all the others");
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1601 YYABORT;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1602 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1603
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1604 if (! (lexer.m_reading_fcn_file || lexer.m_reading_script_file
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1605 || lexer.input_from_eval_string ()))
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1606 {
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1607 parser.bison_error ("function body open at end of input");
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1608 YYABORT;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1609 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1610
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1611 if (lexer.m_reading_classdef_file)
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1612 {
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1613 parser.bison_error ("classdef body open at end of input");
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1614 YYABORT;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1615 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1616
16627
de91b1621260 adjust location of eof marker for files with subfunctions but no explicit end statements
John W. Eaton <jwe@octave.org>
parents: 16574
diff changeset
1617 $$ = parser.make_end ("endfunction", true,
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1618 lexer.m_input_line_number,
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1619 lexer.m_current_input_column);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1620 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1621 ;
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
1622
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1623 function : function_beg stash_comment fcn_name
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1624 opt_param_list opt_sep opt_list function_end
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1625 {
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1626 YYUSE ($5);
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1627
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1628 $$ = parser.make_function ($1, nullptr, $3, $4, $6, $7, $2);
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1629 }
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1630 | function_beg stash_comment return_list '=' fcn_name
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1631 opt_param_list opt_sep opt_list function_end
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1632 {
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1633 YYUSE ($4);
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1634 YYUSE ($7);
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1635
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1636 $$ = parser.make_function ($1, $3, $5, $6, $8, $9, $2);
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1637 }
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1638 ;
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
1639
9476
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
1640 // ========
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
1641 // Classdef
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
1642 // ========
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
1643
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1644 classdef_beg : CLASSDEF
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1645 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1646 if (! lexer.m_reading_classdef_file)
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1647 {
16289
bde729ba8381 maint: periodic merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16286 16288
diff changeset
1648 parser.bison_error ("classdef must appear inside a file containing only a class definition");
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1649 YYABORT;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1650 }
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1651
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23577
diff changeset
1652 // Create invalid parent scope.
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1653 lexer.m_symtab_context.push (octave::symbol_scope ());
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1654 lexer.m_parsing_classdef = true;
26709
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1655 lexer.m_parsing_classdef_decl = true;
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1656 $$ = $1;
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1657 }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1658 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1659
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1660 classdef : classdef_beg stash_comment opt_attr_list identifier opt_superclass_list opt_sep class_body opt_sep END
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1661 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1662 YYUSE ($6);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1663 YYUSE ($8);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1664
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1665 lexer.m_parsing_classdef = false;
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
1666
16289
bde729ba8381 maint: periodic merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16286 16288
diff changeset
1667 if (! ($$ = parser.make_classdef ($1, $3, $4, $5, $7, $9, $2)))
17656
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1668 {
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1669 // make_classdef deleted $3, $4, $5, and $7.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1670 YYABORT;
17656
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1671 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1672 }
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1673 | classdef_beg stash_comment opt_attr_list identifier opt_superclass_list opt_sep END
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1674 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1675 YYUSE ($6);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1676
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1677 lexer.m_parsing_classdef = false;
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1678
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1679 if (! ($$ = parser.make_classdef ($1, $3, $4, $5, nullptr,
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1680 $7, $2)))
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1681 {
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1682 // make_classdef deleted $3, $4, and $5.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1683 YYABORT;
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1684 }
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1685 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1686 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1687
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1688 opt_attr_list : // empty
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1689 { $$ = nullptr; }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1690 | '(' attr_list ')'
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1691 { $$ = $2; }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1692 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1693
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1694 attr_list : attr
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1695 { $$ = new octave::tree_classdef_attribute_list ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1696 | attr_list ',' attr
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1697 {
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1698 $1->append ($3);
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1699 $$ = $1;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1700 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1701 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1702
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1703 attr : identifier
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1704 { $$ = new octave::tree_classdef_attribute ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1705 | identifier '=' decl_param_init expression
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1706 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1707 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1708
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1709 lexer.m_looking_at_initializer_expression = false;
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1710 $$ = new octave::tree_classdef_attribute ($1, $4);
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1711 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1712 | EXPR_NOT identifier
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1713 {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1714 YYUSE ($1);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1715
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1716 $$ = new octave::tree_classdef_attribute ($2, false);
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1717 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1718 ;
9476
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
1719
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1720 opt_superclass_list
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1721 : // empty
26709
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1722 {
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1723 lexer.m_parsing_classdef_decl = false;
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1724 lexer.m_parsing_classdef_superclass = false;
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1725 $$ = nullptr;
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1726 }
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1727 | superclass_list
26709
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1728 {
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1729 lexer.m_parsing_classdef_decl = false;
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1730 lexer.m_parsing_classdef_superclass = false;
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1731 $$ = $1;
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1732 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1733 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1734
26709
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1735 superclass_list : EXPR_LT superclass
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1736 {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1737 YYUSE ($1);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1738
26709
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1739 $$ = new octave::tree_classdef_superclass_list ($2);
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1740 }
26709
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1741 | superclass_list EXPR_AND superclass
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1742 {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1743 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1744
26709
17e7d310def8 revamp parsing of superclass identifiers in classdef decls
John W. Eaton <jwe@octave.org>
parents: 26707
diff changeset
1745 $1->append ($3);
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1746 $$ = $1;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1747 }
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1748 ;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1749
18520
932aca9a7c57 Allow multi-level classdef package.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18419
diff changeset
1750 superclass : FQ_IDENT
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1751 { $$ = new octave::tree_classdef_superclass ($1->text ()); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1752 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1753
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1754 class_body : properties_block
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1755 { $$ = new octave::tree_classdef_body ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1756 | methods_block
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1757 { $$ = new octave::tree_classdef_body ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1758 | events_block
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1759 { $$ = new octave::tree_classdef_body ($1); }
13249
7861a5fd3479 accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents: 13246
diff changeset
1760 | enum_block
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1761 { $$ = new octave::tree_classdef_body ($1); }
13250
f6bbdea030b2 use opt_sep instead of literal '\n' in parser rules for classdef
John W. Eaton <jwe@octave.org>
parents: 13249
diff changeset
1762 | class_body opt_sep properties_block
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1763 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1764 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1765
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1766 $1->append ($3);
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1767 $$ = $1;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1768 }
13250
f6bbdea030b2 use opt_sep instead of literal '\n' in parser rules for classdef
John W. Eaton <jwe@octave.org>
parents: 13249
diff changeset
1769 | class_body opt_sep methods_block
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1770 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1771 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1772
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1773 $1->append ($3);
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1774 $$ = $1;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1775 }
13250
f6bbdea030b2 use opt_sep instead of literal '\n' in parser rules for classdef
John W. Eaton <jwe@octave.org>
parents: 13249
diff changeset
1776 | class_body opt_sep events_block
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1777 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1778 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1779
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1780 $1->append ($3);
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1781 $$ = $1;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1782 }
13250
f6bbdea030b2 use opt_sep instead of literal '\n' in parser rules for classdef
John W. Eaton <jwe@octave.org>
parents: 13249
diff changeset
1783 | class_body opt_sep enum_block
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1784 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1785 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1786
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1787 $1->append ($3);
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1788 $$ = $1;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1789 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1790 ;
9476
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
1791
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
1792 properties_block
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1793 : PROPERTIES stash_comment opt_attr_list opt_sep property_list opt_sep END
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1794 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1795 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1796 YYUSE ($6);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1797
16289
bde729ba8381 maint: periodic merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16286 16288
diff changeset
1798 if (! ($$ = parser.make_classdef_properties_block
17656
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1799 ($1, $3, $5, $7, $2)))
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1800 {
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1801 // make_classdef_properties_block delete $3 and $5.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1802 YYABORT;
17656
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1803 }
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1804 }
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1805 | PROPERTIES stash_comment opt_attr_list opt_sep END
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1806 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1807 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1808
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1809 if (! ($$ = parser.make_classdef_properties_block
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1810 ($1, $3, nullptr, $5, $2)))
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1811 {
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1812 // make_classdef_properties_block delete $3.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1813 YYABORT;
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1814 }
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1815 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1816 ;
9476
d9b25c5b8ee5 handle classdef syntax in lexer and parser
Ryan Rusaw
parents: 9474
diff changeset
1817
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1818 property_list
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1819 : class_property
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1820 { $$ = new octave::tree_classdef_property_list ($1); }
22879
194481349d22 don't require semicolon between property list elements (bug #49819)
John W. Eaton <jwe@octave.org>
parents: 22712
diff changeset
1821 | property_list sep class_property
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1822 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1823 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1824
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1825 $1->append ($3);
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1826 $$ = $1;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1827 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1828 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1829
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1830 class_property : identifier
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1831 { $$ = new octave::tree_classdef_property ($1); }
22879
194481349d22 don't require semicolon between property list elements (bug #49819)
John W. Eaton <jwe@octave.org>
parents: 22712
diff changeset
1832 | identifier '=' decl_param_init expression
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1833 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1834 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1835
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1836 lexer.m_looking_at_initializer_expression = false;
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1837 $$ = new octave::tree_classdef_property ($1, $4);
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1838 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1839 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1840
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1841 methods_block : METHODS stash_comment opt_attr_list opt_sep methods_list opt_sep END
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1842 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1843 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1844 YYUSE ($6);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1845
16289
bde729ba8381 maint: periodic merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16286 16288
diff changeset
1846 if (! ($$ = parser.make_classdef_methods_block
17656
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1847 ($1, $3, $5, $7, $2)))
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1848 {
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1849 // make_classdef_methods_block deleted $3 and $5.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1850 YYABORT;
17656
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1851 }
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1852 }
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1853 | METHODS stash_comment opt_attr_list opt_sep END
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1854 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1855 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1856
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1857 if (! ($$ = parser.make_classdef_methods_block
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1858 ($1, $3, nullptr, $5, $2)))
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1859 {
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1860 // make_classdef_methods_block deleted $3.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1861 YYABORT;
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1862 }
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1863 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1864 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1865 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1866
18262
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
1867 method_decl1 : identifier
18308
c1baf94184af * oct-parse.in.yy: Suppress TAB characters.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18304
diff changeset
1868 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1869 if (! ($$ = parser.start_classdef_external_method ($1, nullptr)))
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1870 YYABORT;
18262
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
1871 }
18308
c1baf94184af * oct-parse.in.yy: Suppress TAB characters.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18304
diff changeset
1872 | identifier param_list
18341
02b349ccf0ec Allow "end" method declaration/definition in classde files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18308
diff changeset
1873 {
02b349ccf0ec Allow "end" method declaration/definition in classde files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18308
diff changeset
1874 if (! ($$ = parser.start_classdef_external_method ($1, $2)))
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1875 YYABORT;
18262
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
1876 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1877 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1878
18262
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
1879 method_decl : stash_comment method_decl1
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1880 { $$ = parser.finish_classdef_external_method ($2, nullptr, $1); }
18341
02b349ccf0ec Allow "end" method declaration/definition in classde files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18308
diff changeset
1881 | stash_comment return_list '='
02b349ccf0ec Allow "end" method declaration/definition in classde files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18308
diff changeset
1882 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1883 YYUSE ($3);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1884
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1885 lexer.m_defining_func++;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1886 lexer.m_parsed_function_name.push (false);
18341
02b349ccf0ec Allow "end" method declaration/definition in classde files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18308
diff changeset
1887 }
02b349ccf0ec Allow "end" method declaration/definition in classde files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18308
diff changeset
1888 method_decl1
02b349ccf0ec Allow "end" method declaration/definition in classde files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18308
diff changeset
1889 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1890 lexer.m_defining_func--;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
1891 lexer.m_parsed_function_name.pop ();
18341
02b349ccf0ec Allow "end" method declaration/definition in classde files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18308
diff changeset
1892 $$ = parser.finish_classdef_external_method ($5, $2, $1);
02b349ccf0ec Allow "end" method declaration/definition in classde files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18308
diff changeset
1893 }
18262
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
1894 ;
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
1895
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
1896 method : method_decl
18308
c1baf94184af * oct-parse.in.yy: Suppress TAB characters.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18304
diff changeset
1897 { $$ = $1; }
c1baf94184af * oct-parse.in.yy: Suppress TAB characters.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18304
diff changeset
1898 | function
18262
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
1899 { $$ = $1; }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1900 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1901
18262
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
1902 methods_list : method
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1903 {
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1904 octave_value fcn;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1905 if ($1)
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1906 fcn = $1->function ();
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1907 delete $1;
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1908 $$ = new octave::tree_classdef_methods_list (fcn);
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1909 }
18262
69990d5edcc2 Allow to parse external methods declaration in classdef files.
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18158
diff changeset
1910 | methods_list opt_sep method
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1911 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1912 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1913
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1914 octave_value fcn;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1915 if ($3)
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1916 fcn = $3->function ();
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1917 delete $3;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1918
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1919 $1->append (fcn);
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1920 $$ = $1;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1921 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1922 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1923
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1924 events_block : EVENTS stash_comment opt_attr_list opt_sep events_list opt_sep END
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1925 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1926 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1927 YYUSE ($6);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1928
16289
bde729ba8381 maint: periodic merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16286 16288
diff changeset
1929 if (! ($$ = parser.make_classdef_events_block
17656
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1930 ($1, $3, $5, $7, $2)))
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1931 {
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1932 // make_classdef_events_block deleted $3 and $5.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1933 YYABORT;
17656
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1934 }
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1935 }
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1936 | EVENTS stash_comment opt_attr_list opt_sep END
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1937 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1938 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1939
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1940 if (! ($$ = parser.make_classdef_events_block
23798
771310737137 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23796
diff changeset
1941 ($1, $3, nullptr, $5, $2)))
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1942 {
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1943 // make_classdef_events_block deleted $3.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1944 YYABORT;
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1945 }
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1946 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1947 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1948
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1949 events_list : class_event
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1950 { $$ = new octave::tree_classdef_events_list ($1); }
13250
f6bbdea030b2 use opt_sep instead of literal '\n' in parser rules for classdef
John W. Eaton <jwe@octave.org>
parents: 13249
diff changeset
1951 | events_list opt_sep class_event
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1952 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1953 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1954
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1955 $1->append ($3);
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1956 $$ = $1;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1957 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1958 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1959
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1960 class_event : identifier
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1961 { $$ = new octave::tree_classdef_event ($1); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
1962 ;
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11572
diff changeset
1963
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1964 enum_block : ENUMERATION stash_comment opt_attr_list opt_sep enum_list opt_sep END
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1965 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1966 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1967 YYUSE ($6);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1968
16289
bde729ba8381 maint: periodic merge of default to classdef
John W. Eaton <jwe@octave.org>
parents: 16286 16288
diff changeset
1969 if (! ($$ = parser.make_classdef_enum_block
17656
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1970 ($1, $3, $5, $7, $2)))
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1971 {
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1972 // make_classdef_enum_block deleted $3 and $5.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1973 YYABORT;
17656
2b1047efc4fb don't leak memory when parsing classdef objects fails
John W. Eaton <jwe@octave.org>
parents: 17654
diff changeset
1974 }
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1975 }
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1976 | ENUMERATION stash_comment opt_attr_list opt_sep END
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1977 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1978 YYUSE ($4);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1979
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1980 if (! ($$ = parser.make_classdef_enum_block
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
1981 ($1, $3, nullptr, $5, $2)))
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1982 {
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1983 // make_classdef_enum_block deleted $3.
21073
f7cc48f601d2 additional reworking of error handling in the parser (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21071
diff changeset
1984 YYABORT;
18419
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1985 }
9154dc252f47 Allow empty classdef or methods/properties/... blocks
Michael Goffioul <michael.goffioul@gmail.com>
parents: 18395
diff changeset
1986 }
13249
7861a5fd3479 accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents: 13246
diff changeset
1987 ;
7861a5fd3479 accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents: 13246
diff changeset
1988
7861a5fd3479 accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents: 13246
diff changeset
1989 enum_list : class_enum
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
1990 { $$ = new octave::tree_classdef_enum_list ($1); }
13250
f6bbdea030b2 use opt_sep instead of literal '\n' in parser rules for classdef
John W. Eaton <jwe@octave.org>
parents: 13249
diff changeset
1991 | enum_list opt_sep class_enum
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1992 {
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1993 YYUSE ($2);
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
1994
15037
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1995 $1->append ($3);
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1996 $$ = $1;
56b8eb7c9c04 improvements in parsing classdef
John W. Eaton <jwe@octave.org>
parents: 14846
diff changeset
1997 }
13249
7861a5fd3479 accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents: 13246
diff changeset
1998 ;
7861a5fd3479 accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents: 13246
diff changeset
1999
7861a5fd3479 accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents: 13246
diff changeset
2000 class_enum : identifier '(' expression ')'
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
2001 { $$ = new octave::tree_classdef_enum ($1, $3); }
13249
7861a5fd3479 accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents: 13246
diff changeset
2002 ;
7861a5fd3479 accept enumeration keyword
John W. Eaton <jwe@octave.org>
parents: 13246
diff changeset
2003
2970
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
2004 // =============
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
2005 // Miscellaneous
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
2006 // =============
b9e64477f703 [project @ 1997-05-15 18:04:21 by jwe]
jwe
parents: 2961
diff changeset
2007
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
2008 stmt_begin : // empty
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
2009 {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
2010 $$ = 0;
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2011 lexer.m_at_beginning_of_statement = true;
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
2012 }
16681
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
2013 ;
d3619d4d267c recognize character string at beginning of statement (bug #38926, #38958)
John W. Eaton <jwe@octave.org>
parents: 16627
diff changeset
2014
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2015 stash_comment : // empty
17693
efbe746f8fa8 eliminate octave_comment_buffer singleton
John W. Eaton <jwe@octave.org>
parents: 17673
diff changeset
2016 { $$ = lexer.get_comment (); }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2017 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2018
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2019 parse_error : LEXICAL_ERROR
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
2020 {
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
2021 $$ = 0;
21064
a9f2c2d72892 handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21063
diff changeset
2022 std::string msg = $1->text ();
a9f2c2d72892 handle lexical errors as parser errors (bug #46877)
John W. Eaton <jwe@octave.org>
parents: 21063
diff changeset
2023 parser.bison_error (msg.c_str ());
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
2024 }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2025 | error
19778
bf737d927707 eliminate bison warnings from oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 19709
diff changeset
2026 { $$ = 0; }
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2027 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2028
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2029 sep_no_nl : ','
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2030 { $$ = ','; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2031 | ';'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2032 { $$ = ';'; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2033 | sep_no_nl ','
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2034 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2035 | sep_no_nl ';'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2036 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2037 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2038
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2039 opt_sep_no_nl : // empty
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2040 { $$ = 0; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2041 | sep_no_nl
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2042 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2043 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2044
16203
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2045 opt_nl : // empty
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2046 { $$ = 0; }
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2047 | nl
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2048 { $$ = $1; }
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2049 ;
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2050
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2051 nl : '\n'
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2052 { $$ = '\n'; }
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2053 | nl '\n'
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2054 { $$ = $1; }
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2055 ;
127cccb037bf move more global parser and lexer variables to classes
John W. Eaton <jwe@octave.org>
parents: 16199
diff changeset
2056
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2057 sep : ','
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2058 { $$ = ','; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2059 | ';'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2060 { $$ = ';'; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2061 | '\n'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2062 { $$ = '\n'; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2063 | sep ','
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2064 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2065 | sep ';'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2066 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2067 | sep '\n'
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2068 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2069 ;
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2070
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2071 opt_sep : // empty
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2072 { $$ = 0; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2073 | sep
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2074 { $$ = $1; }
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
2075 ;
2525
8561d88be5f2 [project @ 1996-11-17 21:23:31 by jwe]
jwe
parents: 2524
diff changeset
2076
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2077 %%
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2078
21023
ec532a439c6f rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 21021
diff changeset
2079 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC)
24444
53ca76c5cc8d maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents: 24377
diff changeset
2080 // Restore prevailing warning state for remainder of the file.
53ca76c5cc8d maint: Indent pragmas as other preprocessor directives.
John W. Eaton <jwe@octave.org>
parents: 24377
diff changeset
2081 # pragma GCC diagnostic pop
21023
ec532a439c6f rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 21021
diff changeset
2082 #endif
ec532a439c6f rework method of disabling warnings from GCC
John W. Eaton <jwe@octave.org>
parents: 21021
diff changeset
2083
666
fb4f6556b443 [project @ 1994-09-06 21:22:46 by jwe]
jwe
parents: 627
diff changeset
2084 // Generic error messages.
fb4f6556b443 [project @ 1994-09-06 21:22:46 by jwe]
jwe
parents: 627
diff changeset
2085
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
2086 #undef lexer
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2087 #undef scanner
16149
49dfba4fd3c5 use pure parser and reentrant lexer interfaces
John W. Eaton <jwe@octave.org>
parents: 16147
diff changeset
2088
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2089 static void
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2090 yyerror (octave::base_parser& parser, const char *s)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2091 {
16288
fe3b9a51e625 rename curr_lexer, curr_parser, CURR_LEXER
John W. Eaton <jwe@octave.org>
parents: 16287
diff changeset
2092 parser.bison_error (s);
16142
26d65d677557 rename yyerror to bison_error and make it a member of octave_parser class
John W. Eaton <jwe@octave.org>
parents: 16139
diff changeset
2093 }
26d65d677557 rename yyerror to bison_error and make it a member of octave_parser class
John W. Eaton <jwe@octave.org>
parents: 16139
diff changeset
2094
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2095 namespace octave
16157
335041cc657a optionally use push parser interface
John W. Eaton <jwe@octave.org>
parents: 16153
diff changeset
2096 {
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2097 size_t
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2098 base_parser::parent_scope_info::size (void) const
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2099 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2100 return m_info.size ();
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2101 }
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2102
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2103 void
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2104 base_parser::parent_scope_info::push (const value_type& elt)
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2105 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2106 m_info.push_back (elt);
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2107 }
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2108
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2109 void
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
2110 base_parser::parent_scope_info::push (const symbol_scope& scope)
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2111 {
23602
214cb58ccc1c use pointer to scope instead of scope id
John W. Eaton <jwe@octave.org>
parents: 23600
diff changeset
2112 push (value_type (scope, ""));
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2113 }
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2114
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2115 void
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2116 base_parser::parent_scope_info::pop (void)
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2117 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2118 m_info.pop_back ();
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2119 }
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2120
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2121 bool
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2122 base_parser::parent_scope_info::name_ok (const std::string& name)
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2123 {
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2124 // Name can't be the same as any parent function or any other
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2125 // function we've already seen. We could maintain a complex
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2126 // tree structure of names, or we can just store the set of
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2127 // full names of all the functions, which must be unique.
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2128
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2129 std::string full_name;
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2130
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2131 for (size_t i = 0; i < size()-1; i++)
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2132 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2133 const value_type& elt = m_info[i];
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2134
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2135 if (name == elt.second)
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2136 return false;
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2137
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2138 full_name += elt.second + ">";
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2139 }
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2140
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2141 full_name += name;
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2142
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2143 if (m_all_names.find (full_name) != m_all_names.end ())
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2144 return false;
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2145
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2146 m_all_names.insert (full_name);
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2147
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2148 return true;
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2149 }
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2150
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2151 bool
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2152 base_parser::parent_scope_info::name_current_scope (const std::string& name)
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2153 {
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2154 if (! name_ok (name))
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2155 return false;
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2156
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2157 if (size () > 0)
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2158 m_info.back().second = name;
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2159
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2160 return true;
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2161 }
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2162
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
2163 symbol_scope
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2164 base_parser::parent_scope_info::parent_scope (void) const
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2165 {
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
2166 return size () > 1 ? m_info[size()-2].first : symbol_scope ();
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2167 }
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2168
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2169 std::string
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2170 base_parser::parent_scope_info::parent_name (void) const
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2171 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2172 return m_info[size()-2].second;
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2173 }
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2174
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2175 void base_parser::parent_scope_info::clear (void)
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2176 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2177 m_info.clear ();
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2178 m_all_names.clear ();
23054
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2179 }
564e959a0e89 avoid invalid nested function and subfunctions definitions (bug #50014)
John W. Eaton <jwe@octave.org>
parents: 23052
diff changeset
2180
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2181 base_parser::base_parser (base_lexer& lxr)
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2182 : m_endfunction_found (false), m_autoloading (false),
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2183 m_fcn_file_from_relative_lookup (false),
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2184 m_parsing_subfunctions (false), m_parsing_local_functions (false),
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
2185 m_max_fcn_depth (-1), m_curr_fcn_depth (-1), m_primary_fcn_scope (),
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2186 m_curr_class_name (), m_curr_package_name (), m_function_scopes (),
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2187 m_primary_fcn_ptr (nullptr), m_subfunction_names (),
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2188 m_classdef_object (nullptr), m_stmt_list (nullptr), m_lexer (lxr),
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2189 m_parser_state (yypstate_new ())
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2190 { }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2191
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2192 base_parser::~base_parser (void)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2193 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2194 delete m_stmt_list;
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2195
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2196 delete &m_lexer;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2197
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2198 // FIXME: Deleting the internal Bison parser state structure does
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2199 // not clean up any partial parse trees in the event of an interrupt or
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2200 // error. It's not clear how to safely do that with the C language
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2201 // parser that Bison generates. The C++ language parser that Bison
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2202 // generates would do it for us automatically whenever an exception
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2203 // is thrown while parsing input, but there is currently no C++
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2204 // interface for a push parser.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2205
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2206 yypstate_delete (static_cast<yypstate *> (m_parser_state));
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2207 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2208
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2209 void
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2210 base_parser::reset (void)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2211 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2212 m_endfunction_found = false;
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2213 m_autoloading = false;
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2214 m_fcn_file_from_relative_lookup = false;
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2215 m_parsing_subfunctions = false;
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2216 m_parsing_local_functions = false;
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
2217 m_max_fcn_depth = -1;
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
2218 m_curr_fcn_depth = -1;
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
2219 m_primary_fcn_scope = symbol_scope ();
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2220 m_curr_class_name = "";
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2221 m_curr_package_name = "";
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2222 m_function_scopes.clear ();
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2223 m_primary_fcn_ptr = nullptr;
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2224 m_subfunction_names.clear ();
23806
6925c8d2cd87 oct-parse.in.yy: Initialize m_classdef_object to nullptr when parser is reset.
Rik <rik@octave.org>
parents: 23798
diff changeset
2225 m_classdef_object = nullptr;
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2226
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2227 delete m_stmt_list;
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2228 m_stmt_list = nullptr;
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2229
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2230 m_lexer.reset ();
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2231
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2232 yypstate_delete (static_cast<yypstate *> (m_parser_state));
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
2233 m_parser_state = yypstate_new ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2234 }
25442
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2235
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2236 // Error mesages for mismatched end tokens.
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2237
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2238 static std::string
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2239 end_token_as_string (token::end_tok_type ettype)
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2240 {
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2241 std::string retval = "<unknown>";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2242
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2243 switch (ettype)
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2244 {
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2245 case token::simple_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2246 retval = "end";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2247 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2248
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2249 case token::classdef_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2250 retval = "endclassdef";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2251 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2252
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2253 case token::enumeration_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2254 retval = "endenumeration";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2255 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2256
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2257 case token::events_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2258 retval = "endevents";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2259 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2260
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2261 case token::for_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2262 retval = "endfor";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2263 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2264
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2265 case token::function_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2266 retval = "endfunction";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2267 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2268
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2269 case token::if_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2270 retval = "endif";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2271 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2272
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2273 case token::methods_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2274 retval = "endmethods";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2275 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2276
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2277 case token::parfor_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2278 retval = "endparfor";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2279 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2280
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2281 case token::properties_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2282 retval = "endproperties";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2283 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2284
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2285 case token::switch_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2286 retval = "endswitch";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2287 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2288
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2289 case token::try_catch_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2290 retval = "end_try_catch";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2291 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2292
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2293 case token::unwind_protect_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2294 retval = "end_unwind_protect";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2295 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2296
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2297 case token::while_end:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2298 retval = "endwhile";
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2299 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2300
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2301 default:
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2302 panic_impossible ();
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2303 break;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2304 }
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2305
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2306 return retval;
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2307 }
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
2308
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2309 void
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2310 base_parser::end_token_error (token *tok, token::end_tok_type expected)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2311 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2312 std::string msg = ("'" + end_token_as_string (expected)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2313 + "' command matched by '"
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2314 + end_token_as_string (tok->ettype ()) + "'");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2315
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2316 bison_error (msg, tok->line (), tok->column ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2317 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2318
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2319 // Check to see that end tokens are properly matched.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2320
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2321 bool
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2322 base_parser::end_token_ok (token *tok, token::end_tok_type expected)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2323 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2324 token::end_tok_type ettype = tok->ettype ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2325
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2326 return ettype == expected || ettype == token::simple_end;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2327 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2328
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2329 // Maybe print a warning if an assignment expression is used as the
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2330 // test in a logical expression.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2331
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2332 void
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2333 base_parser::maybe_warn_assign_as_truth_value (tree_expression *expr)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2334 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2335 if (expr->is_assignment_expression ()
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2336 && expr->paren_count () < 2)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2337 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2338 if (m_lexer.m_fcn_file_full_name.empty ())
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2339 warning_with_id
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2340 ("Octave:assign-as-truth-value",
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2341 "suggest parenthesis around assignment used as truth value");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2342 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2343 warning_with_id
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2344 ("Octave:assign-as-truth-value",
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2345 "suggest parenthesis around assignment used as truth value near line %d, column %d in file '%s'",
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2346 expr->line (), expr->column (), m_lexer.m_fcn_file_full_name.c_str ());
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2347 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2348 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2349
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2350 // Maybe print a warning about switch labels that aren't constants.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2351
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2352 void
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2353 base_parser::maybe_warn_variable_switch_label (tree_expression *expr)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2354 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2355 if (! expr->is_constant ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2356 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2357 if (m_lexer.m_fcn_file_full_name.empty ())
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2358 warning_with_id ("Octave:variable-switch-label",
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2359 "variable switch label");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2360 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2361 warning_with_id
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2362 ("Octave:variable-switch-label",
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2363 "variable switch label near line %d, column %d in file '%s'",
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2364 expr->line (), expr->column (), m_lexer.m_fcn_file_full_name.c_str ());
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2365 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2366 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2367
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2368 // Make a constant.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2369
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2370 tree_constant *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2371 base_parser::make_constant (int op, token *tok_val)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2372 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2373 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2374 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2375
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2376 tree_constant *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2377
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2378 switch (op)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2379 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2380 case NUM:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2381 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2382 octave_value tmp (tok_val->number ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2383 retval = new tree_constant (tmp, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2384 retval->stash_original_text (tok_val->text_rep ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2385 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2386 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2387
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2388 case IMAG_NUM:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2389 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2390 octave_value tmp (Complex (0.0, tok_val->number ()));
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2391 retval = new tree_constant (tmp, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2392 retval->stash_original_text (tok_val->text_rep ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2393 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2394 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2395
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2396 case DQ_STRING:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2397 case SQ_STRING:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2398 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2399 std::string txt = tok_val->text ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2400
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2401 char delim = op == DQ_STRING ? '"' : '\'';
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2402 octave_value tmp (txt, delim);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2403
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2404 if (txt.empty ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2405 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2406 if (op == DQ_STRING)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2407 tmp = octave_null_str::instance;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2408 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2409 tmp = octave_null_sq_str::instance;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2410 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2411
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2412 retval = new tree_constant (tmp, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2413
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2414 if (op == DQ_STRING)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2415 txt = undo_string_escapes (txt);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2416
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2417 // FIXME: maybe this should also be handled by
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2418 // tok_val->text_rep () for character strings?
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2419 retval->stash_original_text (delim + txt + delim);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2420 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2421 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2422
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2423 default:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2424 panic_impossible ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2425 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2426 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2427
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2428 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2429 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2430
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2431 // Make a function handle.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2432
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2433 tree_fcn_handle *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2434 base_parser::make_fcn_handle (token *tok_val)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2435 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2436 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2437 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2438
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2439 tree_fcn_handle *retval = new tree_fcn_handle (tok_val->text (), l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2440
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2441 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2442 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2443
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2444 // Make an anonymous function handle.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2445
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2446 tree_anon_fcn_handle *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2447 base_parser::make_anon_fcn_handle (tree_parameter_list *param_list,
23600
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
2448 tree_expression *expr)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2449 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2450 // FIXME: need to get these from the location of the @ symbol.
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2451 int l = m_lexer.m_input_line_number;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2452 int c = m_lexer.m_current_input_column;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2453
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2454 symbol_scope fcn_scope = m_lexer.m_symtab_context.curr_scope ();
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2455 symbol_scope parent_scope = m_lexer.m_symtab_context.parent_scope ();
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2456
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2457 m_lexer.m_symtab_context.pop ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2458
23600
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
2459 expr->set_print_flag (false);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2460
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
2461 fcn_scope.mark_static ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2462
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2463 tree_anon_fcn_handle *retval
23600
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
2464 = new tree_anon_fcn_handle (param_list, expr, fcn_scope,
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23577
diff changeset
2465 parent_scope, l, c);
23600
db947ba52118 explicitly limit anonymous functions to a single expression
John W. Eaton <jwe@octave.org>
parents: 23599
diff changeset
2466
24354
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2467 std::ostringstream buf;
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2468
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2469 tree_print_code tpc (buf);
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2470
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2471 retval->accept (tpc);
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2472
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2473 std::string file = m_lexer.m_fcn_file_full_name;
24354
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2474 if (! file.empty ())
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2475 buf << ": file: " << file;
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2476 else if (m_lexer.input_from_terminal ())
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2477 buf << ": *terminal input*";
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2478 else if (m_lexer.input_from_eval_string ())
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2479 buf << ": *eval string*";
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2480 buf << ": line: " << l << " column: " << c;
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2481
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2482 std::string scope_name = buf.str ();
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2483
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
2484 fcn_scope.cache_name (scope_name);
24354
11d3603dd880 give names to anonymous function scopes
John W. Eaton <jwe@octave.org>
parents: 24297
diff changeset
2485
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2486 // FIXME: Stash the filename. This does not work and produces
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2487 // errors when executed.
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2488 //retval->stash_file_name (m_lexer.m_fcn_file_name);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2489
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2490 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2491 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2492
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2493 // Build a colon expression.
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2494
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2495 tree_expression *
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2496 base_parser::make_colon_expression (tree_expression *base,
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2497 tree_expression *limit,
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2498 tree_expression *incr)
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2499 {
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2500 tree_expression *retval = nullptr;
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2501
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
2502 interpreter& interp = __get_interpreter__ ("finish_colon_expression");
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
2503 error_system& es = interp.get_error_system ();
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
2504
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
2505 unwind_protect frame;
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2506
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
2507 frame.add_method (es, &error_system::set_discard_warning_messages,
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
2508 es.discard_warning_messages ());
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
2509
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
2510 es.discard_warning_messages (true);
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2511
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2512 if (! base || ! limit)
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2513 {
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2514 delete base;
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2515 delete limit;
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2516 delete incr;
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2517
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2518 return retval;
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2519 }
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2520
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2521 int l = base->line ();
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2522 int c = base->column ();
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2523
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2524 tree_colon_expression *e
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2525 = new tree_colon_expression (base, limit, incr, l, c);
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2526
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2527 if (base->is_constant () && limit->is_constant ()
26404
abca0c2690b7 oct-parse.yy: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents: 26376
diff changeset
2528 && (! incr || incr->is_constant ()))
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2529 {
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2530 try
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2531 {
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
2532 tree_evaluator& tw = interp.get_evaluator ();
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2533
27371
fcaecdbc8d8a don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents: 27216
diff changeset
2534 octave_value tmp = e->evaluate (tw);
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2535
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2536 tree_constant *tc_retval
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2537 = new tree_constant (tmp, e->line (), e->column ());
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2538
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2539 std::ostringstream buf;
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2540
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2541 tree_print_code tpc (buf);
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2542
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2543 e->accept (tpc);
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2544
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2545 tc_retval->stash_original_text (buf.str ());
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2546
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2547 delete e;
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2548
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2549 retval = tc_retval;
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2550 }
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
2551 catch (const execution_exception&)
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2552 {
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
2553 interpreter::recover_from_exception ();
23655
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2554 }
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2555 }
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2556 else
bbcc1e08aaed improve colon expression construction and avoid possible memory leak
John W. Eaton <jwe@octave.org>
parents: 23654
diff changeset
2557 retval = e;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2558
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2559 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2560 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2561
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2562 // Build a binary expression.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2563
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2564 tree_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2565 base_parser::make_binary_op (int op, tree_expression *op1,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2566 token *tok_val, tree_expression *op2)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2567 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2568 octave_value::binary_op t = octave_value::unknown_binary_op;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2569
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2570 switch (op)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2571 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2572 case POW:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2573 t = octave_value::op_pow;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2574 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2575
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2576 case EPOW:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2577 t = octave_value::op_el_pow;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2578 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2579
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2580 case '+':
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2581 t = octave_value::op_add;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2582 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2583
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2584 case '-':
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2585 t = octave_value::op_sub;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2586 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2587
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2588 case '*':
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2589 t = octave_value::op_mul;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2590 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2591
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2592 case '/':
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2593 t = octave_value::op_div;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2594 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2595
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2596 case EMUL:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2597 t = octave_value::op_el_mul;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2598 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2599
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2600 case EDIV:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2601 t = octave_value::op_el_div;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2602 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2603
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2604 case LEFTDIV:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2605 t = octave_value::op_ldiv;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2606 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2607
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2608 case ELEFTDIV:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2609 t = octave_value::op_el_ldiv;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2610 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2611
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2612 case EXPR_LT:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2613 t = octave_value::op_lt;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2614 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2615
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2616 case EXPR_LE:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2617 t = octave_value::op_le;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2618 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2619
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2620 case EXPR_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2621 t = octave_value::op_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2622 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2623
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2624 case EXPR_GE:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2625 t = octave_value::op_ge;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2626 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2627
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2628 case EXPR_GT:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2629 t = octave_value::op_gt;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2630 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2631
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2632 case EXPR_NE:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2633 t = octave_value::op_ne;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2634 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2635
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2636 case EXPR_AND:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2637 t = octave_value::op_el_and;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2638 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2639
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2640 case EXPR_OR:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2641 t = octave_value::op_el_or;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2642 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2643
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2644 default:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2645 panic_impossible ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2646 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2647 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2648
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2649 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2650 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2651
25829
8ac4bfa55053 restore optimization for compound transpose-mul/div ops (bug #45890)
John W. Eaton <jwe@octave.org>
parents: 25753
diff changeset
2652 return maybe_compound_binary_expression (op1, op2, l, c, t);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2653 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2654
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2655 // Build a boolean expression.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2656
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2657 tree_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2658 base_parser::make_boolean_op (int op, tree_expression *op1,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2659 token *tok_val, tree_expression *op2)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2660 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2661 tree_boolean_expression::type t;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2662
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2663 switch (op)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2664 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2665 case EXPR_AND_AND:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2666 t = tree_boolean_expression::bool_and;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2667 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2668
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2669 case EXPR_OR_OR:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2670 t = tree_boolean_expression::bool_or;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2671 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2672
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2673 default:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2674 panic_impossible ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2675 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2676 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2677
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2678 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2679 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2680
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2681 return new tree_boolean_expression (op1, op2, l, c, t);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2682 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2683
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2684 // Build a prefix expression.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2685
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2686 tree_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2687 base_parser::make_prefix_op (int op, tree_expression *op1, token *tok_val)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2688 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2689 octave_value::unary_op t = octave_value::unknown_unary_op;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2690
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2691 switch (op)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2692 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2693 case EXPR_NOT:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2694 t = octave_value::op_not;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2695 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2696
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2697 case '+':
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2698 t = octave_value::op_uplus;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2699 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2700
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2701 case '-':
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2702 t = octave_value::op_uminus;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2703 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2704
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2705 case PLUS_PLUS:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2706 t = octave_value::op_incr;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2707 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2708
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2709 case MINUS_MINUS:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2710 t = octave_value::op_decr;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2711 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2712
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2713 default:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2714 panic_impossible ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2715 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2716 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2717
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2718 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2719 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2720
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2721 return new tree_prefix_expression (op1, l, c, t);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2722 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2723
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2724 // Build a postfix expression.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2725
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2726 tree_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2727 base_parser::make_postfix_op (int op, tree_expression *op1, token *tok_val)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2728 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2729 octave_value::unary_op t = octave_value::unknown_unary_op;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2730
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2731 switch (op)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2732 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2733 case HERMITIAN:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2734 t = octave_value::op_hermitian;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2735 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2736
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2737 case TRANSPOSE:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2738 t = octave_value::op_transpose;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2739 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2740
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2741 case PLUS_PLUS:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2742 t = octave_value::op_incr;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2743 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2744
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2745 case MINUS_MINUS:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2746 t = octave_value::op_decr;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2747 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2748
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2749 default:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2750 panic_impossible ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2751 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2752 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2753
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2754 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2755 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2756
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2757 return new tree_postfix_expression (op1, l, c, t);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2758 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2759
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2760 // Build an unwind-protect command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2761
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2762 tree_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2763 base_parser::make_unwind_command (token *unwind_tok,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2764 tree_statement_list *body,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2765 tree_statement_list *cleanup_stmts,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2766 token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
2767 comment_list *lc,
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
2768 comment_list *mc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2769 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2770 tree_command *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2771
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2772 if (end_token_ok (end_tok, token::unwind_protect_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2773 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2774 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2775
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2776 int l = unwind_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2777 int c = unwind_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2778
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2779 retval = new tree_unwind_protect_command (body, cleanup_stmts,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2780 lc, mc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2781 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2782 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2783 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2784 delete body;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2785 delete cleanup_stmts;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2786
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2787 end_token_error (end_tok, token::unwind_protect_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2788 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2789
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2790 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2791 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2792
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2793 // Build a try-catch command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2794
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2795 tree_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2796 base_parser::make_try_command (token *try_tok,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2797 tree_statement_list *body,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2798 char catch_sep,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2799 tree_statement_list *cleanup_stmts,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2800 token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
2801 comment_list *lc,
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
2802 comment_list *mc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2803 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2804 tree_command *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2805
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2806 if (end_token_ok (end_tok, token::try_catch_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2807 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2808 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2809
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2810 int l = try_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2811 int c = try_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2812
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2813 tree_identifier *id = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2814
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2815 if (! catch_sep && cleanup_stmts && ! cleanup_stmts->empty ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2816 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2817 tree_statement *stmt = cleanup_stmts->front ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2818
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2819 if (stmt)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2820 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2821 tree_expression *expr = stmt->expression ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2822
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2823 if (expr && expr->is_identifier ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2824 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2825 id = dynamic_cast<tree_identifier *> (expr);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2826
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2827 cleanup_stmts->pop_front ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2828
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2829 stmt->set_expression (nullptr);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2830 delete stmt;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2831 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2832 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2833 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2834
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2835 retval = new tree_try_catch_command (body, cleanup_stmts, id,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2836 lc, mc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2837 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2838 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2839 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2840 delete body;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2841 delete cleanup_stmts;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2842
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2843 end_token_error (end_tok, token::try_catch_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2844 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2845
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2846 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2847 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2848
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2849 // Build a while command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2850
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2851 tree_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2852 base_parser::make_while_command (token *while_tok,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2853 tree_expression *expr,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2854 tree_statement_list *body,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2855 token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
2856 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2857 {
23798
771310737137 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23796
diff changeset
2858 tree_command *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2859
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2860 maybe_warn_assign_as_truth_value (expr);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2861
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2862 if (end_token_ok (end_tok, token::while_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2863 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2864 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2865
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2866 m_lexer.m_looping--;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2867
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2868 int l = while_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2869 int c = while_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2870
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2871 retval = new tree_while_command (expr, body, lc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2872 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2873 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2874 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2875 delete expr;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2876 delete body;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2877
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2878 end_token_error (end_tok, token::while_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2879 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2880
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2881 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2882 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2883
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2884 // Build a do-until command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2885
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2886 tree_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2887 base_parser::make_do_until_command (token *until_tok,
16287
04a7953496a7 create base class for parser; use reference for curr_lexer
John W. Eaton <jwe@octave.org>
parents: 16285
diff changeset
2888 tree_statement_list *body,
04a7953496a7 create base class for parser; use reference for curr_lexer
John W. Eaton <jwe@octave.org>
parents: 16285
diff changeset
2889 tree_expression *expr,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
2890 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2891 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2892 maybe_warn_assign_as_truth_value (expr);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2893
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2894 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2895
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2896 m_lexer.m_looping--;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2897
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2898 int l = until_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2899 int c = until_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2900
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2901 return new tree_do_until_command (expr, body, lc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2902 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2903
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2904 // Build a for command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2905
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2906 tree_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2907 base_parser::make_for_command (int tok_id, token *for_tok,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2908 tree_argument_list *lhs,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2909 tree_expression *expr,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2910 tree_expression *maxproc,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2911 tree_statement_list *body,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2912 token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
2913 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2914 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2915 tree_command *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2916
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2917 bool parfor = tok_id == PARFOR;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2918
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2919 if (end_token_ok (end_tok, parfor ? token::parfor_end : token::for_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2920 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2921 expr->mark_as_for_cmd_expr ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2922
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2923 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2924
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2925 m_lexer.m_looping--;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2926
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2927 int l = for_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2928 int c = for_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2929
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2930 if (lhs->length () == 1)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2931 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2932 tree_expression *tmp = lhs->remove_front ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2933
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2934 retval = new tree_simple_for_command (parfor, tmp, expr, maxproc,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2935 body, lc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2936
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2937 delete lhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2938 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2939 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2940 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2941 if (parfor)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2942 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2943 delete lhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2944 delete expr;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2945 delete maxproc;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2946 delete body;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2947
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2948 bison_error ("invalid syntax for parfor statement");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2949 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2950 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2951 retval = new tree_complex_for_command (lhs, expr, body,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2952 lc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2953 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2954 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2955 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2956 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2957 delete lhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2958 delete expr;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2959 delete maxproc;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2960 delete body;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2961
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2962 end_token_error (end_tok, parfor ? token::parfor_end : token::for_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2963 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2964
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2965 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2966 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2967
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2968 // Build a break command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2969
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2970 tree_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2971 base_parser::make_break_command (token *break_tok)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2972 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2973 int l = break_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2974 int c = break_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2975
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
2976 if (! m_lexer.m_looping)
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
2977 {
26998
258195ea1a76 Simplify error messages when break or continue statements fail to parse (bug #55995).
Rik <rik@octave.org>
parents: 26981
diff changeset
2978 bison_error ("break must appear within a loop");
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
2979 return nullptr;
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
2980 }
9c6661004167 error if break statement is in script file separate from loop (bug #39168)
John W. Eaton <jwe@octave.org>
parents: 22755
diff changeset
2981 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
2982 return new tree_break_command (l, c);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2983 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2984
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2985 // Build a continue command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2986
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2987 tree_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2988 base_parser::make_continue_command (token *continue_tok)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2989 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2990 int l = continue_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2991 int c = continue_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
2992
26981
12532d392693 error if continue is used outside of a for loop (bug #55995)
John W. Eaton <jwe@octave.org>
parents: 26906
diff changeset
2993 if (! m_lexer.m_looping)
12532d392693 error if continue is used outside of a for loop (bug #55995)
John W. Eaton <jwe@octave.org>
parents: 26906
diff changeset
2994 {
26998
258195ea1a76 Simplify error messages when break or continue statements fail to parse (bug #55995).
Rik <rik@octave.org>
parents: 26981
diff changeset
2995 bison_error ("continue must appear within a loop");
26981
12532d392693 error if continue is used outside of a for loop (bug #55995)
John W. Eaton <jwe@octave.org>
parents: 26906
diff changeset
2996 return nullptr;
12532d392693 error if continue is used outside of a for loop (bug #55995)
John W. Eaton <jwe@octave.org>
parents: 26906
diff changeset
2997 }
12532d392693 error if continue is used outside of a for loop (bug #55995)
John W. Eaton <jwe@octave.org>
parents: 26906
diff changeset
2998 else
12532d392693 error if continue is used outside of a for loop (bug #55995)
John W. Eaton <jwe@octave.org>
parents: 26906
diff changeset
2999 return new tree_continue_command (l, c);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3000 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3001
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3002 // Build a return command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3003
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3004 tree_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3005 base_parser::make_return_command (token *return_tok)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3006 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3007 int l = return_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3008 int c = return_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3009
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3010 return new tree_return_command (l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3011 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3012
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3013 // Start an if command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3014
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3015 tree_if_command_list *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3016 base_parser::start_if_command (tree_expression *expr,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3017 tree_statement_list *list)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3018 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3019 maybe_warn_assign_as_truth_value (expr);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3020
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3021 tree_if_clause *t = new tree_if_clause (expr, list);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3022
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3023 return new tree_if_command_list (t);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3024 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3025
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3026 // Finish an if command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3027
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3028 tree_if_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3029 base_parser::finish_if_command (token *if_tok,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3030 tree_if_command_list *list,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3031 token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3032 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3033 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3034 tree_if_command *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3035
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3036 if (end_token_ok (end_tok, token::if_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3037 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3038 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3039
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3040 int l = if_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3041 int c = if_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3042
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3043 if (list && ! list->empty ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3044 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3045 tree_if_clause *elt = list->front ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3046
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3047 if (elt)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3048 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3049 elt->line (l);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3050 elt->column (c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3051 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3052 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3053
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3054 retval = new tree_if_command (list, lc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3055 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3056 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3057 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3058 delete list;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3059
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3060 end_token_error (end_tok, token::if_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3061 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3062
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3063 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3064 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3065
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3066 // Build an elseif clause.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3067
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3068 tree_if_clause *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3069 base_parser::make_elseif_clause (token *elseif_tok,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3070 tree_expression *expr,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3071 tree_statement_list *list,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3072 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3073 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3074 maybe_warn_assign_as_truth_value (expr);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3075
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3076 int l = elseif_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3077 int c = elseif_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3078
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3079 return new tree_if_clause (expr, list, lc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3080 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3081
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3082 // Finish a switch command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3083
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3084 tree_switch_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3085 base_parser::finish_switch_command (token *switch_tok,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3086 tree_expression *expr,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3087 tree_switch_case_list *list,
16287
04a7953496a7 create base class for parser; use reference for curr_lexer
John W. Eaton <jwe@octave.org>
parents: 16285
diff changeset
3088 token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3089 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3090 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3091 tree_switch_command *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3092
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3093 if (end_token_ok (end_tok, token::switch_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3094 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3095 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3096
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3097 int l = switch_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3098 int c = switch_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3099
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3100 if (list && ! list->empty ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3101 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3102 tree_switch_case *elt = list->front ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3103
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3104 if (elt)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3105 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3106 elt->line (l);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3107 elt->column (c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3108 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3109 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3110
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3111 retval = new tree_switch_command (expr, list, lc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3112 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3113 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3114 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3115 delete expr;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3116 delete list;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3117
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3118 end_token_error (end_tok, token::switch_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3119 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3120
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3121 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3122 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3123
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3124 // Build a switch case.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3125
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3126 tree_switch_case *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3127 base_parser::make_switch_case (token *case_tok,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3128 tree_expression *expr,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3129 tree_statement_list *list,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3130 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3131 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3132 maybe_warn_variable_switch_label (expr);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3133
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3134 int l = case_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3135 int c = case_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3136
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3137 return new tree_switch_case (expr, list, lc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3138 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3139
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3140 // Build an assignment to a variable.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3141
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3142 tree_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3143 base_parser::make_assign_op (int op, tree_argument_list *lhs,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3144 token *eq_tok, tree_expression *rhs)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3145 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3146 octave_value::assign_op t = octave_value::unknown_assign_op;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3147
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3148 switch (op)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3149 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3150 case '=':
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3151 t = octave_value::op_asn_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3152 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3153
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3154 case ADD_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3155 t = octave_value::op_add_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3156 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3157
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3158 case SUB_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3159 t = octave_value::op_sub_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3160 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3161
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3162 case MUL_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3163 t = octave_value::op_mul_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3164 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3165
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3166 case DIV_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3167 t = octave_value::op_div_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3168 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3169
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3170 case LEFTDIV_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3171 t = octave_value::op_ldiv_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3172 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3173
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3174 case POW_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3175 t = octave_value::op_pow_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3176 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3177
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3178 case EMUL_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3179 t = octave_value::op_el_mul_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3180 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3181
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3182 case EDIV_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3183 t = octave_value::op_el_div_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3184 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3185
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3186 case ELEFTDIV_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3187 t = octave_value::op_el_ldiv_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3188 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3189
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3190 case EPOW_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3191 t = octave_value::op_el_pow_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3192 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3193
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3194 case AND_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3195 t = octave_value::op_el_and_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3196 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3197
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3198 case OR_EQ:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3199 t = octave_value::op_el_or_eq;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3200 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3201
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3202 default:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3203 panic_impossible ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3204 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3205 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3206
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3207 int l = eq_tok->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3208 int c = eq_tok->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3209
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3210 if (! lhs->is_simple_assign_lhs () && t != octave_value::op_asn_eq)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3211 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3212 // Multiple assignments like [x,y] OP= rhs are only valid for
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3213 // '=', not '+=', etc.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3214
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3215 delete lhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3216 delete rhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3217
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3218 bison_error ("computed multiple assignment not allowed", l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3219
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3220 return nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3221 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3222
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3223 if (lhs->is_simple_assign_lhs ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3224 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3225 // We are looking at a simple assignment statement like x = rhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3226
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3227 tree_expression *tmp = lhs->remove_front ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3228
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3229 if ((tmp->is_identifier () || tmp->is_index_expression ())
26059
da2bbcf1fbcd Deprecate C++ function is_keyword in favor of iskeyword for readability.
Rik <rik@octave.org>
parents: 26040
diff changeset
3230 && iskeyword (tmp->name ()))
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3231 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3232 std::string kw = tmp->name ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3233
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3234 delete tmp;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3235 delete lhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3236 delete rhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3237
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3238 bison_error ("invalid assignment to keyword \"" + kw + "\"", l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3239
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3240 return nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3241 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3242
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3243 delete lhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3244
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3245 return new tree_simple_assignment (tmp, rhs, false, l, c, t);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3246 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3247 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3248 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3249 std::list<std::string> names = lhs->variable_names ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3250
22872
551ac93c984c maint: Use C++ range feature to simplify some for loops in libinterp/parse-tree
Rik <rik@octave.org>
parents: 22785
diff changeset
3251 for (const auto& kw : names)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3252 {
26059
da2bbcf1fbcd Deprecate C++ function is_keyword in favor of iskeyword for readability.
Rik <rik@octave.org>
parents: 26040
diff changeset
3253 if (iskeyword (kw))
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3254 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3255 delete lhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3256 delete rhs;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3257
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3258 bison_error ("invalid assignment to keyword \"" + kw + "\"",
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3259 l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3260
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3261 return nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3262 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3263 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3264
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3265 return new tree_multi_assignment (lhs, rhs, false, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3266 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3267 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3268
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3269 // Define a script.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3270
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3271 void
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3272 base_parser::make_script (tree_statement_list *cmds,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3273 tree_statement *end_script)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3274 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3275 if (! cmds)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3276 cmds = new tree_statement_list ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3277
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3278 cmds->append (end_script);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3279
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3280 symbol_scope script_scope = m_lexer.m_symtab_context.curr_scope ();
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3281
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3282 script_scope.cache_name (m_lexer.m_fcn_file_full_name);
24063
c81ed514ca2c give script scopes names
John W. Eaton <jwe@octave.org>
parents: 24045
diff changeset
3283
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3284 octave_user_script *script
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3285 = new octave_user_script (m_lexer.m_fcn_file_full_name,
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3286 m_lexer.m_fcn_file_name, script_scope,
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3287 cmds, m_lexer.m_help_text);
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3288
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3289 m_lexer.m_symtab_context.pop ();
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3290 m_lexer.m_help_text = "";
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3291
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
3292 sys::time now;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3293
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3294 script->stash_fcn_file_time (now);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3295
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3296 m_primary_fcn_ptr = script;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3297 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3298
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3299 // Define a function.
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3300
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3301 // FIXME: combining start_function, finish_function, and
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3302 // recover_from_parsing_function should be possible, but it makes
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3303 // for a large mess. Maybe this could be a bit better organized?
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3304
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3305 tree_function_def *
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3306 base_parser::make_function (token *fcn_tok,
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3307 tree_parameter_list *ret_list,
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3308 tree_identifier *id,
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3309 tree_parameter_list *param_list,
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3310 tree_statement_list *body,
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3311 tree_statement *end_fcn_stmt,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3312 comment_list *lc)
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3313 {
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3314 int l = fcn_tok->line ();
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3315 int c = fcn_tok->column ();
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3316
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3317 octave_user_function *tmp_fcn
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3318 = start_function (id, param_list, body, end_fcn_stmt);
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3319
26404
abca0c2690b7 oct-parse.yy: Fix static analyzer detected issues (bug #55347).
Rik <rik@octave.org>
parents: 26376
diff changeset
3320 tree_function_def *retval = finish_function (ret_list, tmp_fcn, lc, l, c);
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3321
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3322 recover_from_parsing_function ();
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3323
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3324 return retval;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3325 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3326
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3327 // Begin defining a function.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3328
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3329 octave_user_function *
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3330 base_parser::start_function (tree_identifier *id,
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3331 tree_parameter_list *param_list,
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3332 tree_statement_list *body,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3333 tree_statement *end_fcn_stmt)
9474
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
3334 {
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3335 // We'll fill in the return list later.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3336
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3337 std::string id_name = id->name ();
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3338
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3339 delete id;
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3340
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3341 if (m_lexer.m_parsing_classdef_get_method)
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3342 id_name.insert (0, "get.");
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3343 else if (m_lexer.m_parsing_classdef_set_method)
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3344 id_name.insert (0, "set.");
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3345
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3346 m_lexer.m_parsing_classdef_get_method = false;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3347 m_lexer.m_parsing_classdef_set_method = false;
23673
1d1ce4df5255 refactor bison rules for parsing functions
John W. Eaton <jwe@octave.org>
parents: 23667
diff changeset
3348
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3349 if (! body)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3350 body = new tree_statement_list ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3351
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3352 body->append (end_fcn_stmt);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3353
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3354 octave_user_function *fcn
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3355 = new octave_user_function (m_lexer.m_symtab_context.curr_scope (),
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3356 param_list, nullptr, body);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3357
26369
0249ba4c9589 Fix static analyzer detected V668 issues (bug #55347).
Andreas Weber <octave@josoansi.de>
parents: 26149
diff changeset
3358 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
0249ba4c9589 Fix static analyzer detected V668 issues (bug #55347).
Andreas Weber <octave@josoansi.de>
parents: 26149
diff changeset
3359
0249ba4c9589 Fix static analyzer detected V668 issues (bug #55347).
Andreas Weber <octave@josoansi.de>
parents: 26149
diff changeset
3360 fcn->stash_trailing_comment (tc);
0249ba4c9589 Fix static analyzer detected V668 issues (bug #55347).
Andreas Weber <octave@josoansi.de>
parents: 26149
diff changeset
3361 fcn->stash_fcn_end_location (end_fcn_stmt->line (),
0249ba4c9589 Fix static analyzer detected V668 issues (bug #55347).
Andreas Weber <octave@josoansi.de>
parents: 26149
diff changeset
3362 end_fcn_stmt->column ());
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3363
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3364 // If input is coming from a file, issue a warning if the name of
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3365 // the file does not match the name of the function stated in the
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3366 // file. Matlab doesn't provide a diagnostic (it ignores the stated
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3367 // name).
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3368 if (! m_autoloading && m_lexer.m_reading_fcn_file
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
3369 && m_curr_fcn_depth == 0 && ! m_parsing_subfunctions)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3370 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3371 // FIXME: should m_lexer.m_fcn_file_name already be
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3372 // preprocessed when we get here? It seems to only be a
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3373 // problem with relative filenames.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3374
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3375 std::string nm = m_lexer.m_fcn_file_name;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3376
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
3377 size_t pos = nm.find_last_of (sys::file_ops::dir_sep_chars ());
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3378
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3379 if (pos != std::string::npos)
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3380 nm = m_lexer.m_fcn_file_name.substr (pos+1);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3381
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3382 if (nm != id_name)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3383 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3384 warning_with_id
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3385 ("Octave:function-name-clash",
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3386 "function name '%s' does not agree with function filename '%s'",
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3387 id_name.c_str (), m_lexer.m_fcn_file_full_name.c_str ());
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3388
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3389 id_name = nm;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3390 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3391 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3392
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3393 if (m_lexer.m_reading_fcn_file || m_lexer.m_reading_classdef_file || m_autoloading)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3394 {
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
3395 sys::time now;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3396
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3397 fcn->stash_fcn_file_name (m_lexer.m_fcn_file_full_name);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3398 fcn->stash_fcn_file_time (now);
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3399 fcn->stash_dir_name (m_lexer.m_dir_name);
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3400 fcn->stash_package_name (m_lexer.m_package_name);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3401 fcn->mark_as_system_fcn_file ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3402
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3403 if (m_fcn_file_from_relative_lookup)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3404 fcn->mark_relative ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3405
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3406 if (m_lexer.m_parsing_class_method)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3407 {
26794
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26740
diff changeset
3408 if (m_lexer.m_parsing_classdef)
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26740
diff changeset
3409 {
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26740
diff changeset
3410 if (m_curr_class_name == id_name)
26799
0b17abf0ee9d fix error introduced in changeset 287eba9ed14b
John W. Eaton <jwe@octave.org>
parents: 26794
diff changeset
3411 fcn->mark_as_classdef_constructor ();
26794
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26740
diff changeset
3412 else
26799
0b17abf0ee9d fix error introduced in changeset 287eba9ed14b
John W. Eaton <jwe@octave.org>
parents: 26794
diff changeset
3413 fcn->mark_as_classdef_method ();
26794
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26740
diff changeset
3414 }
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3415 else
26794
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26740
diff changeset
3416 {
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26740
diff changeset
3417 if (m_curr_class_name == id_name)
26799
0b17abf0ee9d fix error introduced in changeset 287eba9ed14b
John W. Eaton <jwe@octave.org>
parents: 26794
diff changeset
3418 fcn->mark_as_legacy_constructor ();
26794
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26740
diff changeset
3419 else
26799
0b17abf0ee9d fix error introduced in changeset 287eba9ed14b
John W. Eaton <jwe@octave.org>
parents: 26794
diff changeset
3420 fcn->mark_as_legacy_method ();
26794
287eba9ed14b refactor predicates for classdef methods/constructors
John W. Eaton <jwe@octave.org>
parents: 26740
diff changeset
3421 }
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3422
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3423 fcn->stash_dispatch_class (m_curr_class_name);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3424 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3425
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3426 std::string nm = fcn->fcn_file_name ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3427
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
3428 sys::file_stat fs (nm);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3429
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3430 if (fs && fs.is_newer (now))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3431 warning_with_id ("Octave:future-time-stamp",
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3432 "time stamp for '%s' is in the future", nm.c_str ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3433 }
25994
f881d3e271d2 eliminate global and file-scope static variables in oct-hist.cc
John W. Eaton <jwe@octave.org>
parents: 25830
diff changeset
3434 else if (! m_lexer.input_from_tmp_history_file ()
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3435 && ! m_lexer.m_force_script
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3436 && m_lexer.m_reading_script_file
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3437 && m_lexer.m_fcn_file_name == id_name)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3438 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3439 warning ("function '%s' defined within script file '%s'",
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3440 id_name.c_str (), m_lexer.m_fcn_file_full_name.c_str ());
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3441 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3442
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3443 fcn->stash_function_name (id_name);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3444
24297
9a1b193ddd01 Recognize docstrings from subfunctions (bug #46008).
Rik <rik@octave.org>
parents: 24283
diff changeset
3445 // Record help text for functions other than nested functions.
9a1b193ddd01 Recognize docstrings from subfunctions (bug #46008).
Rik <rik@octave.org>
parents: 24283
diff changeset
3446 // We cannot currently record help for nested functions (bug #46008)
9a1b193ddd01 Recognize docstrings from subfunctions (bug #46008).
Rik <rik@octave.org>
parents: 24283
diff changeset
3447 // because the doc_string of the outermost function is read first,
9a1b193ddd01 Recognize docstrings from subfunctions (bug #46008).
Rik <rik@octave.org>
parents: 24283
diff changeset
3448 // whereas this function is called for the innermost function first.
9a1b193ddd01 Recognize docstrings from subfunctions (bug #46008).
Rik <rik@octave.org>
parents: 24283
diff changeset
3449 // We could have a stack of help_text in lexer.
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
3450 if (! m_lexer.m_help_text.empty () && m_curr_fcn_depth == 0)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3451 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3452 fcn->document (m_lexer.m_help_text);
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3453
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3454 m_lexer.m_help_text = "";
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3455 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3456
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
3457 if (m_lexer.m_reading_fcn_file && m_curr_fcn_depth == 0
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3458 && ! m_parsing_subfunctions)
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3459 m_primary_fcn_ptr = fcn;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3460
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3461 return fcn;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3462 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3463
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3464 tree_statement *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3465 base_parser::make_end (const std::string& type, bool eof, int l, int c)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3466 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3467 return make_statement (new tree_no_op_command (type, eof, l, c));
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3468 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3469
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3470 tree_function_def *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3471 base_parser::finish_function (tree_parameter_list *ret_list,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3472 octave_user_function *fcn,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3473 comment_list *lc,
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3474 int l, int c)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3475 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3476 tree_function_def *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3477
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3478 if (ret_list)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3479 ret_list->mark_as_formal_parameters ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3480
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3481 if (fcn)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3482 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3483 std::string nm = fcn->name ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3484 std::string file = fcn->fcn_file_name ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3485
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3486 std::string tmp = nm;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3487 if (! file.empty ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3488 tmp += ": " + file;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3489
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
3490 symbol_scope fcn_scope = fcn->scope ();
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
3491 fcn_scope.cache_name (tmp);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3492
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3493 if (lc)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3494 fcn->stash_leading_comment (lc);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3495
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3496 fcn->define_ret_list (ret_list);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3497
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
3498 if (m_curr_fcn_depth > 0 || m_parsing_subfunctions)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3499 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3500 fcn->stash_fcn_location (l, c);
25394
9e39a53b4e00 make listing local functions for command completion work again (bug #53925)
John W. Eaton <jwe@octave.org>
parents: 25206
diff changeset
3501 fcn->stash_parent_fcn_name (m_lexer.m_fcn_file_name);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3502
23611
91c8f006ed8b remove additional functions from symbol_table class
John W. Eaton <jwe@octave.org>
parents: 23603
diff changeset
3503 octave_value ov_fcn (fcn);
91c8f006ed8b remove additional functions from symbol_table class
John W. Eaton <jwe@octave.org>
parents: 23603
diff changeset
3504
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3505 if (m_endfunction_found && m_function_scopes.size () > 1)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3506 {
24705
8b346a19108e mark objects as nested or subfunctions when parsing
John W. Eaton <jwe@octave.org>
parents: 24624
diff changeset
3507 fcn->mark_as_nested_function ();
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
3508 fcn_scope.set_nesting_depth (m_curr_fcn_depth);
24705
8b346a19108e mark objects as nested or subfunctions when parsing
John W. Eaton <jwe@octave.org>
parents: 24624
diff changeset
3509
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
3510 symbol_scope pscope = m_function_scopes.parent_scope ();
24705
8b346a19108e mark objects as nested or subfunctions when parsing
John W. Eaton <jwe@octave.org>
parents: 24624
diff changeset
3511 fcn_scope.set_parent (pscope);
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
3512 fcn_scope.set_primary_parent (m_primary_fcn_scope);
24705
8b346a19108e mark objects as nested or subfunctions when parsing
John W. Eaton <jwe@octave.org>
parents: 24624
diff changeset
3513 pscope.install_nestfunction (nm, ov_fcn, fcn_scope);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3514 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3515 else
22974
ecc5eeada8dc Don't mark nested functions in primary function as subfunctions.
Rik <rik@octave.org>
parents: 22880
diff changeset
3516 {
ecc5eeada8dc Don't mark nested functions in primary function as subfunctions.
Rik <rik@octave.org>
parents: 22880
diff changeset
3517 fcn->mark_as_subfunction ();
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3518 m_subfunction_names.push_back (nm);
24705
8b346a19108e mark objects as nested or subfunctions when parsing
John W. Eaton <jwe@octave.org>
parents: 24624
diff changeset
3519 fcn_scope.set_parent (m_primary_fcn_scope);
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
3520 m_primary_fcn_scope.install_subfunction (nm, ov_fcn);
24705
8b346a19108e mark objects as nested or subfunctions when parsing
John W. Eaton <jwe@octave.org>
parents: 24624
diff changeset
3521 }
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3522 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3523
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
3524 if (m_curr_fcn_depth == 0)
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
3525 fcn_scope.update_nest ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3526
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
3527 if (! m_lexer.m_reading_fcn_file && m_curr_fcn_depth == 0)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3528 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3529 // We are either reading a script file or defining a function
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3530 // at the command line, so this definition creates a
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3531 // tree_function object that is placed in the parse tree.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3532 // Otherwise, it is just inserted in the symbol table,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3533 // either as a subfunction or nested function (see above),
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3534 // or as the primary function for the file, via
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3535 // m_primary_fcn_ptr (see also load_fcn_from_file,,
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3536 // parse_fcn_file, and
24270
bc3819b7cca1 don't use symbol_table:: nesting for symbol_record, symbol_scope, or fcn_info
John W. Eaton <jwe@octave.org>
parents: 24216
diff changeset
3537 // fcn_info::fcn_info_rep::find_user_function).
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3538
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3539 if (m_lexer.m_buffer_function_text)
23730
85f1d31956c0 make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents: 23705
diff changeset
3540 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3541 fcn->cache_function_text (m_lexer.m_function_text,
23730
85f1d31956c0 make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents: 23705
diff changeset
3542 fcn->time_parsed ());
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3543 m_lexer.m_buffer_function_text = false;
23730
85f1d31956c0 make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents: 23705
diff changeset
3544 }
85f1d31956c0 make echo work for command-line functions
John W. Eaton <jwe@octave.org>
parents: 23705
diff changeset
3545
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3546 retval = new tree_function_def (fcn);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3547 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3548 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3549
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3550 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3551 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3552
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3553 void
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3554 base_parser::recover_from_parsing_function (void)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3555 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3556 m_lexer.m_symtab_context.pop ();
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3557
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
3558 if (m_lexer.m_reading_fcn_file && m_curr_fcn_depth == 0
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3559 && ! m_parsing_subfunctions)
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3560 m_parsing_subfunctions = true;
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3561
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3562 m_curr_fcn_depth--;
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3563 m_function_scopes.pop ();
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3564
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3565 m_lexer.m_defining_func--;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3566 m_lexer.m_parsed_function_name.pop ();
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3567 m_lexer.m_looking_at_return_list = false;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3568 m_lexer.m_looking_at_parameter_list = false;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3569 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3570
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3571 // A CLASSDEF block defines a class that has a constructor and other
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3572 // methods, but it is not an executable command. Parsing the block
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3573 // makes some changes in the symbol table (inserting the constructor
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3574 // and methods, and adding to the list of known objects) and creates
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3575 // a parse tree containing meta information about the class.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3576
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3577 tree_classdef *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3578 base_parser::make_classdef (token *tok_val,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3579 tree_classdef_attribute_list *a,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3580 tree_identifier *id,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3581 tree_classdef_superclass_list *sc,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3582 tree_classdef_body *body, token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3583 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3584 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3585 tree_classdef *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3586
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3587 m_lexer.m_symtab_context.pop ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3588
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3589 std::string cls_name = id->name ();
9474
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
3590
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3591 std::string nm = m_lexer.m_fcn_file_name;
9474
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
3592
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
3593 size_t pos = nm.find_last_of (sys::file_ops::dir_sep_chars ());
9474
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
3594
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
3595 if (pos != std::string::npos)
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3596 nm = m_lexer.m_fcn_file_name.substr (pos+1);
9474
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
3597
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3598 if (nm != cls_name)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3599 {
27050
69082b3b99a0 use correct line in classdef file name mismatch error message (bug #55812)
John W. Eaton <jwe@octave.org>
parents: 27049
diff changeset
3600 int l = id->line ();
69082b3b99a0 use correct line in classdef file name mismatch error message (bug #55812)
John W. Eaton <jwe@octave.org>
parents: 27049
diff changeset
3601 int c = id->column ();
69082b3b99a0 use correct line in classdef file name mismatch error message (bug #55812)
John W. Eaton <jwe@octave.org>
parents: 27049
diff changeset
3602
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3603 delete a;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3604 delete id;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3605 delete sc;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3606 delete body;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3607
27050
69082b3b99a0 use correct line in classdef file name mismatch error message (bug #55812)
John W. Eaton <jwe@octave.org>
parents: 27049
diff changeset
3608 bison_error ("invalid classdef definition, the class name must match the filename", l, c);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3609
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3610 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3611 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3612 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3613 if (end_token_ok (end_tok, token::classdef_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3614 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3615 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3616
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3617 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3618 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3619
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3620 if (! body)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3621 body = new tree_classdef_body ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3622
27189
946c6f117091 use dummy stack frame when creating meta class (bug #55766 and #55768)
John W. Eaton <jwe@octave.org>
parents: 27165
diff changeset
3623 retval = new tree_classdef (m_lexer.m_symtab_context.curr_scope (),
946c6f117091 use dummy stack frame when creating meta class (bug #55766 and #55768)
John W. Eaton <jwe@octave.org>
parents: 27165
diff changeset
3624 a, id, sc, body, lc, tc,
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3625 m_curr_package_name, l, c);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3626 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3627 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3628 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3629 delete a;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3630 delete id;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3631 delete sc;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3632 delete body;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3633
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3634 end_token_error (end_tok, token::switch_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3635 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3636 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3637
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3638 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3639 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3640
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3641 tree_classdef_properties_block *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3642 base_parser::make_classdef_properties_block (token *tok_val,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3643 tree_classdef_attribute_list *a,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3644 tree_classdef_property_list *plist,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3645 token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3646 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3647 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3648 tree_classdef_properties_block *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3649
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3650 if (end_token_ok (end_tok, token::properties_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3651 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3652 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3653
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3654 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3655 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3656
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3657 if (! plist)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3658 plist = new tree_classdef_property_list ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3659
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3660 retval = new tree_classdef_properties_block (a, plist, lc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3661 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3662 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3663 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3664 delete a;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3665 delete plist;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3666
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3667 end_token_error (end_tok, token::properties_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3668 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3669
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3670 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3671 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3672
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3673 tree_classdef_methods_block *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3674 base_parser::make_classdef_methods_block (token *tok_val,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3675 tree_classdef_attribute_list *a,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3676 tree_classdef_methods_list *mlist,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3677 token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3678 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3679 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3680 tree_classdef_methods_block *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3681
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3682 if (end_token_ok (end_tok, token::methods_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3683 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3684 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3685
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3686 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3687 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3688
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3689 if (! mlist)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3690 mlist = new tree_classdef_methods_list ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3691
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3692 retval = new tree_classdef_methods_block (a, mlist, lc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3693 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3694 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3695 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3696 delete a;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3697 delete mlist;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3698
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3699 end_token_error (end_tok, token::methods_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3700 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3701
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3702 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3703 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3704
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3705 tree_classdef_events_block *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3706 base_parser::make_classdef_events_block (token *tok_val,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3707 tree_classdef_attribute_list *a,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3708 tree_classdef_events_list *elist,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3709 token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3710 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3711 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3712 tree_classdef_events_block *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3713
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3714 if (end_token_ok (end_tok, token::events_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3715 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3716 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3717
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3718 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3719 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3720
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3721 if (! elist)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3722 elist = new tree_classdef_events_list ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3723
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3724 retval = new tree_classdef_events_block (a, elist, lc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3725 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3726 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3727 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3728 delete a;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3729 delete elist;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3730
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3731 end_token_error (end_tok, token::events_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3732 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3733
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3734 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3735 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3736
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3737 tree_classdef_enum_block *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3738 base_parser::make_classdef_enum_block (token *tok_val,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3739 tree_classdef_attribute_list *a,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3740 tree_classdef_enum_list *elist,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3741 token *end_tok,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3742 comment_list *lc)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3743 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3744 tree_classdef_enum_block *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3745
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3746 if (end_token_ok (end_tok, token::enumeration_end))
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3747 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3748 comment_list *tc = m_lexer.m_comment_buf.get_comment ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3749
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3750 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3751 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3752
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3753 if (! elist)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3754 elist = new tree_classdef_enum_list ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3755
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3756 retval = new tree_classdef_enum_block (a, elist, lc, tc, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3757 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3758 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3759 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3760 delete a;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3761 delete elist;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3762
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3763 end_token_error (end_tok, token::enumeration_end);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3764 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3765
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3766 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3767 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3768
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3769 octave_user_function*
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3770 base_parser::start_classdef_external_method (tree_identifier *id,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3771 tree_parameter_list *pl)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3772 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3773 octave_user_function* retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3774
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3775 // External methods are only allowed within @-folders. In this case,
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3776 // m_curr_class_name will be non-empty.
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3777
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3778 if (! m_curr_class_name.empty ())
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3779 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3780
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3781 std::string mname = id->name ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3782
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3783 // Methods that cannot be declared outside the classdef file:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3784 // - methods with '.' character (e.g. property accessors)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3785 // - class constructor
27216
823b4bcf79fc unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents: 27189
diff changeset
3786 // - 'delete'
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3787
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3788 if (mname.find_first_of (".") == std::string::npos
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3789 && mname != "delete"
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
3790 && mname != m_curr_class_name)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3791 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3792 // Create a dummy function that is used until the real method
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3793 // is loaded.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3794
24361
8bcfddad15ec use shared_ptr to manage symbol_scope objects
John W. Eaton <jwe@octave.org>
parents: 24356
diff changeset
3795 retval = new octave_user_function (symbol_scope (), pl);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3796
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3797 retval->stash_function_name (mname);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3798
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3799 int l = id->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3800 int c = id->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3801
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3802 retval->stash_fcn_location (l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3803 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3804 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3805 bison_error ("invalid external method declaration, an external "
27216
823b4bcf79fc unless necessary for formatting or code, use ' instead of `
John W. Eaton <jwe@octave.org>
parents: 27189
diff changeset
3806 "method cannot be the class constructor, 'delete' "
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3807 "or have a dot (.) character in its name");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3808 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3809 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3810 bison_error ("external methods are only allowed in @-folders");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3811
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3812 if (! retval)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3813 delete id;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3814
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3815 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3816 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3817
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3818 tree_function_def *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3819 base_parser::finish_classdef_external_method (octave_user_function *fcn,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3820 tree_parameter_list *ret_list,
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
3821 comment_list *cl)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3822 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3823 if (ret_list)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3824 fcn->define_ret_list (ret_list);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3825
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3826 if (cl)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3827 fcn->stash_leading_comment (cl);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3828
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3829 int l = fcn->beginning_line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3830 int c = fcn->beginning_column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3831
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3832 return new tree_function_def (fcn, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3833 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3834
24067
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3835 void
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3836 base_parser::finish_classdef_file (tree_classdef *cls,
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3837 tree_statement_list *local_fcns)
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3838 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3839 if (m_lexer.m_reading_classdef_file)
24067
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3840 m_classdef_object = cls;
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3841
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3842 if (local_fcns)
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3843 {
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3844 symbol_table& symtab
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3845 = __get_symbol_table__ ("base_parser::finish_classdef_file");
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3846
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3847 for (tree_statement *elt : *local_fcns)
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3848 {
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3849 tree_command *cmd = elt->command ();
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3850
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3851 tree_function_def *fcn_def
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3852 = dynamic_cast<tree_function_def *> (cmd);
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3853
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3854 octave_value ov_fcn = fcn_def->function ();
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3855 octave_function *fcn = ov_fcn.function_value ();
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3856 std::string nm = fcn->name ();
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3857 std::string file = fcn->fcn_file_name ();
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3858
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3859 symtab.install_local_function (nm, ov_fcn, file);
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3860 }
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3861
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3862 delete local_fcns;
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3863 }
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3864 }
5b88383b9a69 install local functions after classdef parse is complete (bug #52080)
John W. Eaton <jwe@octave.org>
parents: 24063
diff changeset
3865
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3866 // Make an index expression.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3867
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3868 tree_index_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3869 base_parser::make_index_expression (tree_expression *expr,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3870 tree_argument_list *args,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3871 char type)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3872 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3873 tree_index_expression *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3874
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3875 if (args && args->has_magic_tilde ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3876 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3877 delete expr;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3878 delete args;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3879
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3880 bison_error ("invalid use of empty argument (~) in index expression");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3881 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3882 else
9474
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
3883 {
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3884 int l = expr->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3885 int c = expr->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3886
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3887 if (! expr->is_postfix_indexed ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3888 expr->set_postfix_index (type);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3889
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3890 if (expr->is_index_expression ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3891 {
26707
f35db7d5b7a4 use dynamic_cast instead of static_cast as appropriate parser
John W. Eaton <jwe@octave.org>
parents: 26686
diff changeset
3892 tree_index_expression *tmp
f35db7d5b7a4 use dynamic_cast instead of static_cast as appropriate parser
John W. Eaton <jwe@octave.org>
parents: 26686
diff changeset
3893 = dynamic_cast<tree_index_expression *> (expr);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3894
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3895 tmp->append (args, type);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3896
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3897 retval = tmp;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3898 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3899 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3900 retval = new tree_index_expression (expr, args, l, c, type);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3901 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3902
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3903 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3904 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3905
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3906 // Make an indirect reference expression.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3907
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3908 tree_index_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3909 base_parser::make_indirect_ref (tree_expression *expr,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3910 const std::string& elt)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3911 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3912 tree_index_expression *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3913
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3914 int l = expr->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3915 int c = expr->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3916
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3917 if (! expr->is_postfix_indexed ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3918 expr->set_postfix_index ('.');
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3919
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3920 if (expr->is_index_expression ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3921 {
26707
f35db7d5b7a4 use dynamic_cast instead of static_cast as appropriate parser
John W. Eaton <jwe@octave.org>
parents: 26686
diff changeset
3922 tree_index_expression *tmp
f35db7d5b7a4 use dynamic_cast instead of static_cast as appropriate parser
John W. Eaton <jwe@octave.org>
parents: 26686
diff changeset
3923 = dynamic_cast<tree_index_expression *> (expr);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3924
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3925 tmp->append (elt);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3926
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3927 retval = tmp;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3928 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3929 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3930 retval = new tree_index_expression (expr, elt, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3931
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3932 m_lexer.m_looking_at_indirect_ref = false;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3933
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3934 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3935 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3936
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3937 // Make an indirect reference expression with dynamic field name.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3938
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3939 tree_index_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3940 base_parser::make_indirect_ref (tree_expression *expr,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3941 tree_expression *elt)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3942 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3943 tree_index_expression *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3944
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3945 int l = expr->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3946 int c = expr->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3947
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3948 if (! expr->is_postfix_indexed ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3949 expr->set_postfix_index ('.');
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3950
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3951 if (expr->is_index_expression ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3952 {
26707
f35db7d5b7a4 use dynamic_cast instead of static_cast as appropriate parser
John W. Eaton <jwe@octave.org>
parents: 26686
diff changeset
3953 tree_index_expression *tmp
f35db7d5b7a4 use dynamic_cast instead of static_cast as appropriate parser
John W. Eaton <jwe@octave.org>
parents: 26686
diff changeset
3954 = dynamic_cast<tree_index_expression *> (expr);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3955
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3956 tmp->append (elt);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3957
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3958 retval = tmp;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3959 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3960 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3961 retval = new tree_index_expression (expr, elt, l, c);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3962
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3963 m_lexer.m_looking_at_indirect_ref = false;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3964
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3965 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3966 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3967
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3968 // Make a declaration command.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3969
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3970 tree_decl_command *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3971 base_parser::make_decl_command (int tok, token *tok_val,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3972 tree_decl_init_list *lst)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3973 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
3974 tree_decl_command *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3975
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3976 int l = tok_val->line ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3977 int c = tok_val->column ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3978
24216
81d723f0cdfe clean up change merged from stable
John W. Eaton <jwe@octave.org>
parents: 24215
diff changeset
3979 if (lst)
81d723f0cdfe clean up change merged from stable
John W. Eaton <jwe@octave.org>
parents: 24215
diff changeset
3980 m_lexer.mark_as_variables (lst->variable_names ());
24213
d2cfaaa57677 tag global and persistent symbols as variables when parsing (bug #52363)
John W. Eaton <jwe@octave.org>
parents: 23219
diff changeset
3981
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3982 switch (tok)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3983 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3984 case GLOBAL:
23469
2699c5974844 handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents: 23454
diff changeset
3985 {
2699c5974844 handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents: 23454
diff changeset
3986 retval = new tree_decl_command ("global", lst, l, c);
23470
a41fdb801db6 use mark_global and mark_persistent consistently
John W. Eaton <jwe@octave.org>
parents: 23469
diff changeset
3987 retval->mark_global ();
23469
2699c5974844 handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents: 23454
diff changeset
3988 }
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3989 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3990
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3991 case PERSISTENT:
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
3992 if (m_curr_fcn_depth >= 0)
23469
2699c5974844 handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents: 23454
diff changeset
3993 {
2699c5974844 handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents: 23454
diff changeset
3994 retval = new tree_decl_command ("persistent", lst, l, c);
23470
a41fdb801db6 use mark_global and mark_persistent consistently
John W. Eaton <jwe@octave.org>
parents: 23469
diff changeset
3995 retval->mark_persistent ();
23469
2699c5974844 handle global and persistent in tree_decl_command, not as separate classes
John W. Eaton <jwe@octave.org>
parents: 23454
diff changeset
3996 }
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3997 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
3998 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
3999 if (m_lexer.m_reading_script_file)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4000 warning ("ignoring persistent declaration near line %d of file '%s'",
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4001 l, m_lexer.m_fcn_file_full_name.c_str ());
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4002 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4003 warning ("ignoring persistent declaration near line %d", l);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4004 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4005 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4006
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4007 default:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4008 panic_impossible ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4009 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4010 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4011
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4012 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4013 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4014
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4015 bool
23654
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4016 base_parser::validate_param_list (tree_parameter_list *lst,
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4017 tree_parameter_list::in_or_out type)
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4018 {
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4019 std::set<std::string> dict;
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4020
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4021 for (tree_decl_elt *elt : *lst)
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4022 {
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4023 tree_identifier *id = elt->ident ();
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4024
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4025 if (id)
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4026 {
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4027 std::string name = id->name ();
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4028
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4029 if (id->is_black_hole ())
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4030 {
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4031 if (type != tree_parameter_list::in)
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4032 {
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4033 bison_error ("invalid use of ~ in output list");
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4034 return false;
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4035 }
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4036 }
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4037 else if (dict.find (name) != dict.end ())
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4038 {
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4039 bison_error ("'" + name
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4040 + "' appears more than once in parameter list");
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4041 return false;
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4042 }
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4043 else
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4044 dict.insert (name);
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4045 }
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4046 }
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4047
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4048 std::string va_type = (type == tree_parameter_list::in
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4049 ? "varargin" : "varargout");
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4050
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4051 size_t len = lst->length ();
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4052
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4053 if (len > 0)
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4054 {
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4055 tree_decl_elt *elt = lst->back ();
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4056
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4057 tree_identifier *id = elt->ident ();
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4058
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4059 if (id && id->name () == va_type)
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4060 {
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4061 if (len == 1)
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4062 lst->mark_varargs_only ();
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4063 else
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4064 lst->mark_varargs ();
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4065
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4066 tree_parameter_list::iterator p = lst->end ();
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4067 --p;
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4068 delete *p;
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4069 lst->erase (p);
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4070 }
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4071 }
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4072
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4073 return true;
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4074 }
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4075
da89ce0d49eb avoid possible memory leak in parser
John W. Eaton <jwe@octave.org>
parents: 23653
diff changeset
4076 bool
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4077 base_parser::validate_array_list (tree_expression *e)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4078 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4079 bool retval = true;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4080
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4081 tree_array_list *al = dynamic_cast<tree_array_list *> (e);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4082
22872
551ac93c984c maint: Use C++ range feature to simplify some for loops in libinterp/parse-tree
Rik <rik@octave.org>
parents: 22785
diff changeset
4083 for (tree_argument_list* row : *al)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4084 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4085 if (row && row->has_magic_tilde ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4086 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4087 retval = false;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4088
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4089 if (e->is_matrix ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4090 bison_error ("invalid use of tilde (~) in matrix expression");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4091 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4092 bison_error ("invalid use of tilde (~) in cell expression");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4093
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4094 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4095 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4096 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4097
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4098 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4099 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4100
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4101 tree_argument_list *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4102 base_parser::validate_matrix_for_assignment (tree_expression *e)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4103 {
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
4104 tree_argument_list *retval = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4105
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4106 if (e->is_constant ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4107 {
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4108 tree_evaluator& tw
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23502
diff changeset
4109 = __get_evaluator__ ("validate_matrix_for_assignment");
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23502
diff changeset
4110
27371
fcaecdbc8d8a don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents: 27216
diff changeset
4111 octave_value ov = e->evaluate (tw);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4112
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4113 delete e;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4114
23577
80c42f4cca13 maint: Deprecate is_empty and replace with isempty.
Rik <rik@octave.org>
parents: 23576
diff changeset
4115 if (ov.isempty ())
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4116 bison_error ("invalid empty left hand side of assignment");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4117 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4118 bison_error ("invalid constant left hand side of assignment");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4119 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4120 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4121 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4122 bool is_simple_assign = true;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4123
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
4124 tree_argument_list *tmp = nullptr;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4125
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4126 if (e->is_matrix ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4127 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4128 tree_matrix *mat = dynamic_cast<tree_matrix *> (e);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4129
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4130 if (mat && mat->size () == 1)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4131 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4132 tmp = mat->front ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4133 mat->pop_front ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4134 delete e;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4135 is_simple_assign = false;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4136 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4137 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4138 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4139 tmp = new tree_argument_list (e);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4140
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4141 if (tmp && tmp->is_valid_lvalue_list ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4142 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
4143 m_lexer.mark_as_variables (tmp->variable_names ());
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4144 retval = tmp;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4145 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4146 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4147 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4148 delete tmp;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4149
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4150 bison_error ("invalid left hand side of assignment");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4151 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4152
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4153 if (retval && is_simple_assign)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4154 retval->mark_as_simple_assign_lhs ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4155 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4156
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4157 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4158 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4159
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4160 // Finish building an array_list.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4161
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4162 tree_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4163 base_parser::finish_array_list (tree_array_list *array_list)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4164 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4165 tree_expression *retval = array_list;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4166
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
4167 interpreter& interp = __get_interpreter__ ("finish_array_list");
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
4168 error_system& es = interp.get_error_system ();
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
4169
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4170 unwind_protect frame;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4171
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
4172 frame.add_method (es, &error_system::set_discard_warning_messages,
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
4173 es.discard_warning_messages ());
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
4174
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
4175 es.discard_warning_messages (true);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4176
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4177 if (array_list->all_elements_are_constant ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4178 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4179 try
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4180 {
27160
6b0c61a5a0f0 move global error configuration and status variables inside a class
John W. Eaton <jwe@octave.org>
parents: 27102
diff changeset
4181 tree_evaluator& tw = interp.get_evaluator ();
23532
084245f9bd03 pass reference to evaluator to octave_function call methods
John W. Eaton <jwe@octave.org>
parents: 23502
diff changeset
4182
27371
fcaecdbc8d8a don't use visitor pattern for expression evaluation (bug #56752)
John W. Eaton <jwe@octave.org>
parents: 27216
diff changeset
4183 octave_value tmp = array_list->evaluate (tw);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4184
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4185 tree_constant *tc_retval
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4186 = new tree_constant (tmp, array_list->line (),
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4187 array_list->column ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4188
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4189 std::ostringstream buf;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4190
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4191 tree_print_code tpc (buf);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4192
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4193 array_list->accept (tpc);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4194
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4195 tc_retval->stash_original_text (buf.str ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4197 delete array_list;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4198
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4199 retval = tc_retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4200 }
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4201 catch (const execution_exception&)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4202 {
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4203 interpreter::recover_from_exception ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4204 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4205 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4206
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4207 return retval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4208 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4209
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4210 // Finish building a matrix list.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4211
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4212 tree_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4213 base_parser::finish_matrix (tree_matrix *m)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4214 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4215 return (m
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4216 ? finish_array_list (m)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4217 : new tree_constant (octave_null_matrix::instance));
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4218 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4219
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4220 // Finish building a cell list.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4221
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4222 tree_expression *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4223 base_parser::finish_cell (tree_cell *c)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4224 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4225 return (c
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4226 ? finish_array_list (c)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4227 : new tree_constant (octave_value (Cell ())));
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4228 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4229
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4230 void
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4231 base_parser::maybe_warn_missing_semi (tree_statement_list *t)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4232 {
26060
edcb09d4b1f5 store nesting depth and primary parent info in nested function scopes
John W. Eaton <jwe@octave.org>
parents: 26059
diff changeset
4233 if (m_curr_fcn_depth >= 0)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4234 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4235 tree_statement *tmp = t->back ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4236
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4237 if (tmp->is_expression ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4238 warning_with_id
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4239 ("Octave:missing-semicolon",
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4240 "missing semicolon near line %d, column %d in file '%s'",
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4241 tmp->line (), tmp->column (), m_lexer.m_fcn_file_full_name.c_str ());
9474
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
4242 }
25ed2d6aacf6 Parse nested functions more accurately.
David Grundberg <individ@acc.umu.se>
parents: 9471
diff changeset
4243 }
1623
fa7a847f9b92 [project @ 1995-11-06 18:05:09 by jwe]
jwe
parents: 1607
diff changeset
4244
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4245 tree_statement_list *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4246 base_parser::set_stmt_print_flag (tree_statement_list *list,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4247 char sep, bool warn_missing_semi)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4248 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4249 tree_statement *tmp = list->back ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4250
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4251 switch (sep)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4252 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4253 case ';':
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4254 tmp->set_print_flag (false);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4255 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4256
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4257 case 0:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4258 case ',':
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4259 case '\n':
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4260 tmp->set_print_flag (true);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4261 if (warn_missing_semi)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4262 maybe_warn_missing_semi (list);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4263 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4264
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4265 default:
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4266 warning ("unrecognized separator type!");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4267 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4268 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4269
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4270 // Even if a statement is null, we add it to the list then remove it
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4271 // here so that the print flag is applied to the correct statement.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4272
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4273 if (tmp->is_null_statement ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4274 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4275 list->pop_back ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4276 delete tmp;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4277 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4278
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4279 return list;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4280 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4281
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4282 // Finish building a statement.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4283 template <typename T>
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4284 tree_statement *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4285 base_parser::make_statement (T *arg)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4286 {
23750
ea879bc55272 move comment_list and comment_elt classes to octave namespace
John W. Eaton <jwe@octave.org>
parents: 23730
diff changeset
4287 comment_list *comment = m_lexer.get_comment ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4288
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4289 return new tree_statement (arg, comment);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4290 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4291
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4292 tree_statement_list *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4293 base_parser::make_statement_list (tree_statement *stmt)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4294 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4295 return new tree_statement_list (stmt);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4296 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4297
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4298 tree_statement_list *
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4299 base_parser::append_statement_list (tree_statement_list *list,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4300 char sep, tree_statement *stmt,
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4301 bool warn_missing_semi)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4302 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4303 set_stmt_print_flag (list, sep, warn_missing_semi);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4304
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4305 list->append (stmt);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4306
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4307 return list;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4308 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4309
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4310 void
26662
05fc703b419a update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
4311 base_parser::disallow_command_syntax (void)
05fc703b419a update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
4312 {
05fc703b419a update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
4313 m_lexer.m_allow_command_syntax = false;
05fc703b419a update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
4314 }
05fc703b419a update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
4315
27049
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4316 // FIXME: this function partially duplicates do_dbtype in debug.cc.
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4317 static std::string
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4318 get_file_line (const std::string& name, int line)
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4319 {
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4320 // NAME should be an absolute file name and the file should exist.
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4321
27102
84ff9953faa1 where possible, eliminate octave:: namespace qualifier inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 27077
diff changeset
4322 std::string ascii_fname = sys::get_ASCII_filename (name);
27049
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4323
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4324 std::ifstream fs (ascii_fname.c_str (), std::ios::in);
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4325
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4326 std::string text;
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4327
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4328 if (fs)
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4329 {
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4330 int i = 1;
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4331
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4332 do
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4333 {
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4334 if (! std::getline (fs, text))
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4335 {
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4336 text = "";
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4337 break;
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4338 }
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4339 }
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4340 while (i++ < line);
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4341 }
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4342
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4343 return text;
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4344 }
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4345
26662
05fc703b419a update handling of command-style function call syntax in eval
John W. Eaton <jwe@octave.org>
parents: 26661
diff changeset
4346 void
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4347 base_parser::bison_error (const std::string& str, int l, int c)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4348 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4349 int err_line = l < 0 ? m_lexer.m_input_line_number : l;
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4350 int err_col = c < 0 ? m_lexer.m_current_input_column - 1 : c;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4351
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4352 std::ostringstream output_buf;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4353
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4354 if (m_lexer.m_reading_fcn_file || m_lexer.m_reading_script_file
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4355 || m_lexer.m_reading_classdef_file)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4356 output_buf << "parse error near line " << err_line
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4357 << " of file " << m_lexer.m_fcn_file_full_name;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4358 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4359 output_buf << "parse error:";
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4360
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4361 if (str != "parse error")
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4362 output_buf << "\n\n " << str;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4363
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4364 output_buf << "\n\n";
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4365
27049
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4366 std::string curr_line;
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4367
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4368 if (m_lexer.m_reading_fcn_file || m_lexer.m_reading_script_file
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4369 || m_lexer.m_reading_classdef_file)
27077
4e69b99978b0 display correct source line for parse errors in scripts (bug #56266)
John W. Eaton <jwe@octave.org>
parents: 27050
diff changeset
4370 curr_line = get_file_line (m_lexer.m_fcn_file_full_name, err_line);
27049
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4371 else
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4372 curr_line = m_lexer.m_current_input_line;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4373
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4374 if (! curr_line.empty ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4375 {
27049
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4376 // FIXME: we could do better if we just cached lines from the
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4377 // input file in a list. See also functions for managing input
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4378 // buffers in lex.ll.
eb522480d44c improve error reporting for parse errors when reading from files
John W. Eaton <jwe@octave.org>
parents: 27020
diff changeset
4379
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4380 size_t len = curr_line.length ();
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4381
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4382 if (curr_line[len-1] == '\n')
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4383 curr_line.resize (len-1);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4384
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4385 // Print the line, maybe with a pointer near the error token.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4386
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4387 output_buf << ">>> " << curr_line << "\n";
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4388
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4389 if (err_col == 0)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4390 err_col = len;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4391
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4392 for (int i = 0; i < err_col + 3; i++)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4393 output_buf << " ";
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4394
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4395 output_buf << "^";
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4396 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4397
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4398 output_buf << "\n";
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4399
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
4400 m_parse_error_msg = output_buf.str ();
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4401 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4402
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4403 int
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4404 parser::run (void)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4405 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4406 int status = -1;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4407
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
4408 yypstate *pstate = static_cast<yypstate *> (m_parser_state);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4409
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4410 try
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4411 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4412 status = octave_pull_parse (pstate, *this);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4413 }
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4414 catch (execution_exception& e)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4415 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4416 std::string file = m_lexer.m_fcn_file_full_name;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4417
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4418 if (file.empty ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4419 error (e, "parse error");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4420 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4421 error (e, "parse error in %s", file.c_str ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4422 }
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4423 catch (const exit_exception&)
23049
7351f2c93389 rethrow octave::exit_exception (bug #49304)
Olaf Till <i7tiol@t-online.de>
parents: 22879
diff changeset
4424 {
7351f2c93389 rethrow octave::exit_exception (bug #49304)
Olaf Till <i7tiol@t-online.de>
parents: 22879
diff changeset
4425 throw;
7351f2c93389 rethrow octave::exit_exception (bug #49304)
Olaf Till <i7tiol@t-online.de>
parents: 22879
diff changeset
4426 }
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4427 catch (interrupt_exception &)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4428 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4429 throw;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4430 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4431 catch (...)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4432 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4433 std::string file = m_lexer.m_fcn_file_full_name;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4434
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4435 if (file.empty ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4436 error ("unexpected exception while parsing input");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4437 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4438 error ("unexpected exception while parsing %s", file.c_str ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4439 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4440
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4441 if (status != 0)
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
4442 parse_error ("%s", m_parse_error_msg.c_str ());
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4443
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4444 return status;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4445 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4446
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4447 // Parse input from INPUT. Pass TRUE for EOF if the end of INPUT should
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4448 // finish the parse.
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4449
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4450 int
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4451 push_parser::run (const std::string& input, bool eof)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4452 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4453 int status = -1;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4454
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
4455 dynamic_cast<push_lexer&> (m_lexer).append_input (input, eof);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4456
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4457 do
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4458 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4459 YYSTYPE lval;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4460
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4461 int token = octave_lex (&lval, m_lexer.m_scanner);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4462
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4463 if (token < 0)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4464 {
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
4465 if (! eof && m_lexer.at_end_of_buffer ())
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4466 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4467 status = -1;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4468 break;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4469 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4470 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4471
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
4472 yypstate *pstate = static_cast<yypstate *> (m_parser_state);
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4473
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4474 try
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4475 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4476 status = octave_push_parse (pstate, token, &lval, *this);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4477 }
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4478 catch (execution_exception& e)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4479 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4480 std::string file = m_lexer.m_fcn_file_full_name;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4481
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4482 if (file.empty ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4483 error (e, "parse error");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4484 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4485 error (e, "parse error in %s", file.c_str ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4486 }
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4487 catch (const exit_exception&)
23049
7351f2c93389 rethrow octave::exit_exception (bug #49304)
Olaf Till <i7tiol@t-online.de>
parents: 22879
diff changeset
4488 {
7351f2c93389 rethrow octave::exit_exception (bug #49304)
Olaf Till <i7tiol@t-online.de>
parents: 22879
diff changeset
4489 throw;
7351f2c93389 rethrow octave::exit_exception (bug #49304)
Olaf Till <i7tiol@t-online.de>
parents: 22879
diff changeset
4490 }
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4491 catch (interrupt_exception &)
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4492 {
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4493 throw;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4494 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4495 catch (...)
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4496 {
24833
7c88cf242111 use m_ prefix for data members in more classes
John W. Eaton <jwe@octave.org>
parents: 24705
diff changeset
4497 std::string file = m_lexer.m_fcn_file_full_name;
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4498
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4499 if (file.empty ())
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4500 error ("unexpected exception while parsing input");
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4501 else
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4502 error ("unexpected exception while parsing %s", file.c_str ());
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4503 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4504 }
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4505 while (status == YYPUSH_MORE);
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4506
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4507 if (status != 0)
23694
4a62da62af09 use m_ prefix for member variables in parser
John W. Eaton <jwe@octave.org>
parents: 23693
diff changeset
4508 parse_error ("%s", m_parse_error_msg.c_str ());
22196
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4509
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4510 return status;
dd992fd74fce put parser, lexer, and evaluator in namespace; interpreter now owns evaluator
John W. Eaton <jwe@octave.org>
parents: 22094
diff changeset
4511 }
25442
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
4512
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4513 std::string
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4514 get_help_from_file (const std::string& nm, bool& symbol_found,
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4515 std::string& full_file)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4516 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4517 std::string retval;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4518
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4519 full_file = fcn_file_in_path (nm);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4520
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4521 std::string file = full_file;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4522
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4523 size_t file_len = file.length ();
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4524
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4525 if ((file_len > 4 && file.substr (file_len-4) == ".oct")
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4526 || (file_len > 4 && file.substr (file_len-4) == ".mex")
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4527 || (file_len > 2 && file.substr (file_len-2) == ".m"))
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4528 {
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4529 file = sys::env::base_pathname (file);
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4530 file = file.substr (0, file.find_last_of ('.'));
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4531
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4532 size_t pos = file.find_last_of (sys::file_ops::dir_sep_str ());
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4533 if (pos != std::string::npos)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4534 file = file.substr (pos+1);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4535 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4536
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4537 if (! file.empty ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4538 {
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4539 interpreter& interp = __get_interpreter__ ("get_help_from_file");
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4540
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4541 symbol_found = true;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4542
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4543 octave_value ov_fcn
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4544 = interp.parse_fcn_file (full_file, file, "", "", "", true,
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4545 false, false, false, "");
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4546
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4547 if (ov_fcn.is_defined ())
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4548 {
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4549 octave_function *fcn = ov_fcn.function_value ();
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4550
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4551 if (fcn)
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4552 retval = fcn->doc_string ();
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4553 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4554 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4555
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4556 return retval;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4557 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4558
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4559 std::string
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4560 get_help_from_file (const std::string& nm, bool& symbol_found)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4561 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4562 std::string file;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4563 return get_help_from_file (nm, symbol_found, file);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4564 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4565
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4566 octave_value
23667
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
4567 load_fcn_from_file (const std::string& file_name,
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
4568 const std::string& dir_name,
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4569 const std::string& dispatch_type,
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4570 const std::string& package_name,
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4571 const std::string& fcn_name, bool autoload)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4572 {
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4573 octave_value retval;
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4574
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4575 unwind_protect frame;
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4576
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4577 std::string nm = file_name;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4578
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4579 size_t nm_len = nm.length ();
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4580
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4581 std::string file;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4582
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4583 bool relative_lookup = false;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4584
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4585 file = nm;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4586
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4587 if ((nm_len > 4 && nm.substr (nm_len-4) == ".oct")
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4588 || (nm_len > 4 && nm.substr (nm_len-4) == ".mex")
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4589 || (nm_len > 2 && nm.substr (nm_len-2) == ".m"))
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4590 {
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4591 nm = sys::env::base_pathname (file);
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4592 nm = nm.substr (0, nm.find_last_of ('.'));
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4593
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4594 size_t pos = nm.find_last_of (sys::file_ops::dir_sep_str ());
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4595 if (pos != std::string::npos)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4596 nm = nm.substr (pos+1);
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4597 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4598
23696
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4599 relative_lookup = ! sys::env::absolute_pathname (file);
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4600
08036a7f3660 remove octave:: namespace tag from symbols used inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23694
diff changeset
4601 file = sys::env::make_absolute (file);
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4602
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4603 int len = file.length ();
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4604
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4605 interpreter& interp = __get_interpreter__ ("load_fcn_from_file");
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4606
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4607 dynamic_loader& dyn_loader = interp.get_dynamic_loader ();
23627
0a6e87804cab don't use singleton pattern for dynamic_loader class
John W. Eaton <jwe@octave.org>
parents: 23611
diff changeset
4608
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4609 if (len > 4 && file.substr (len-4, len-1) == ".oct")
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4610 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4611 if (autoload && ! fcn_name.empty ())
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4612 nm = fcn_name;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4613
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4614 octave_function *tmpfcn
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4615 = dyn_loader.load_oct (nm, file, relative_lookup);
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4616
25206
cbe53b5ea5ce check success of loading oct-file (bug #52977)
Olaf Till <i7tiol@t-online.de>
parents: 25193
diff changeset
4617 if (tmpfcn)
cbe53b5ea5ce check success of loading oct-file (bug #52977)
Olaf Till <i7tiol@t-online.de>
parents: 25193
diff changeset
4618 {
cbe53b5ea5ce check success of loading oct-file (bug #52977)
Olaf Till <i7tiol@t-online.de>
parents: 25193
diff changeset
4619 tmpfcn->stash_package_name (package_name);
cbe53b5ea5ce check success of loading oct-file (bug #52977)
Olaf Till <i7tiol@t-online.de>
parents: 25193
diff changeset
4620 retval = octave_value (tmpfcn);
cbe53b5ea5ce check success of loading oct-file (bug #52977)
Olaf Till <i7tiol@t-online.de>
parents: 25193
diff changeset
4621 }
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4622 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4623 else if (len > 4 && file.substr (len-4, len-1) == ".mex")
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4624 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4625 // Temporarily load m-file version of mex-file, if it exists,
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4626 // to get the help-string to use.
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4627
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4628 std::string doc_string;
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4629
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4630 octave_value ov_fcn
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4631 = interp.parse_fcn_file (file.substr (0, len - 2), nm, dir_name,
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4632 dispatch_type, package_name, false,
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4633 autoload, autoload, relative_lookup, "");
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4634
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4635 if (ov_fcn.is_defined ())
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4636 {
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4637 octave_function *tmpfcn = ov_fcn.function_value ();
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4638
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4639 if (tmpfcn)
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4640 doc_string = tmpfcn->doc_string ();
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4641 }
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4642
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4643 octave_function *tmpfcn
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4644 = dyn_loader.load_mex (nm, file, relative_lookup);
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4645
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4646 if (tmpfcn)
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4647 {
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4648 tmpfcn->document (doc_string);
25193
6f1fde568e46 make .oct and .mex files in +package dirs work again (bug #51960)
John W. Eaton <jwe@octave.org>
parents: 25054
diff changeset
4649 tmpfcn->stash_package_name (package_name);
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4650
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4651 retval = octave_value (tmpfcn);
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
4652 }
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4653 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4654 else if (len > 2)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4655 {
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4656 retval = interp.parse_fcn_file (file, nm, dir_name, dispatch_type,
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4657 package_name, true, autoload,
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4658 autoload, relative_lookup, "");
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4659 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4660
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4661 return retval;
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4662 }
5312
80c1aa832cb2 [project @ 2005-04-28 01:54:46 by jwe]
jwe
parents: 5309
diff changeset
4663 }
80c1aa832cb2 [project @ 2005-04-28 01:54:46 by jwe]
jwe
parents: 5309
diff changeset
4664
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23533
diff changeset
4665 DEFMETHOD (autoload, interp, args, ,
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23533
diff changeset
4666 doc: /* -*- texinfo -*-
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4667 @deftypefn {} {@var{autoload_map} =} autoload ()
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4668 @deftypefnx {} {} autoload (@var{function}, @var{file})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4669 @deftypefnx {} {} autoload (@dots{}, "remove")
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4670 Define @var{function} to autoload from @var{file}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4671
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4672 The second argument, @var{file}, should be an absolute filename or a file
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4673 name in the same directory as the function or script from which the autoload
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4674 command was run. @var{file} @emph{should not} depend on the Octave load
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4675 path.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4676
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4677 Normally, calls to @code{autoload} appear in PKG_ADD script files that are
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4678 evaluated when a directory is added to Octave's load path. To avoid having
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4679 to hardcode directory names in @var{file}, if @var{file} is in the same
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4680 directory as the PKG_ADD script then
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4681
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4682 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4683 autoload ("foo", "bar.oct");
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4684 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4685
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4686 @noindent
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4687 will load the function @code{foo} from the file @code{bar.oct}. The above
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4688 usage when @code{bar.oct} is not in the same directory, or usages such as
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4689
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4690 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4691 autoload ("foo", file_in_loadpath ("bar.oct"))
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4692 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4693
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4694 @noindent
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4695 are strongly discouraged, as their behavior may be unpredictable.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4696
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4697 With no arguments, return a structure containing the current autoload map.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4698
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4699 If a third argument @qcode{"remove"} is given, the function is cleared and
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4700 not loaded anymore during the current Octave session.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4701
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4702 @seealso{PKG_ADD}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4703 @end deftypefn */)
5484
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
4704 {
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
4705 int nargin = args.length ();
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
4706
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4707 if (nargin == 1 || nargin > 3)
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4708 print_usage ();
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4709
27016
9b261300a001 move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents: 27015
diff changeset
4710 octave::tree_evaluator& tw = interp.get_evaluator ();
9b261300a001 move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents: 27015
diff changeset
4711
5626
3236b4d98fde [project @ 2006-02-15 20:25:39 by jwe]
jwe
parents: 5615
diff changeset
4712 if (nargin == 0)
27016
9b261300a001 move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents: 27015
diff changeset
4713 return octave_value (tw.get_autoload_map ());
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4714 else
5484
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
4715 {
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
4716 string_vector argv = args.make_argv ("autoload");
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
4717
20547
52ce821a52fd eliminate simple uses of error_state in parser and lexer
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
4718 if (nargin == 2)
27016
9b261300a001 move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents: 27015
diff changeset
4719 tw.add_autoload (argv[1], argv[2]);
20547
52ce821a52fd eliminate simple uses of error_state in parser and lexer
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
4720 else if (nargin == 3)
52ce821a52fd eliminate simple uses of error_state in parser and lexer
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
4721 {
21021
a5b99b09f8fd maint: Use comparison operators rather than compare() for strings.
Rik <rik@octave.org>
parents: 20957
diff changeset
4722 if (argv[3] != "remove")
20547
52ce821a52fd eliminate simple uses of error_state in parser and lexer
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
4723 error_with_id ("Octave:invalid-input-arg",
52ce821a52fd eliminate simple uses of error_state in parser and lexer
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
4724 "autoload: third argument can only be 'remove'");
52ce821a52fd eliminate simple uses of error_state in parser and lexer
John W. Eaton <jwe@octave.org>
parents: 20535
diff changeset
4725
27016
9b261300a001 move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents: 27015
diff changeset
4726 tw.remove_autoload (argv[1], argv[2]);
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
4727 }
5484
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
4728 }
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
4729
27016
9b261300a001 move file-scope static autoload map variable and functions to evaluator
John W. Eaton <jwe@octave.org>
parents: 27015
diff changeset
4730 return octave_value_list ();
5484
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
4731 }
2ff5363a16bd [project @ 2005-10-06 17:12:12 by jwe]
jwe
parents: 5472
diff changeset
4732
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23533
diff changeset
4733 DEFMETHOD (mfilename, interp, args, ,
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23533
diff changeset
4734 doc: /* -*- texinfo -*-
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4735 @deftypefn {} {} mfilename ()
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4736 @deftypefnx {} {} mfilename ("fullpath")
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4737 @deftypefnx {} {} mfilename ("fullpathext")
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4738 Return the name of the currently executing file.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4739
25294
01ad54f997f5 Allow filenames which begin with a '.' to be returned from mfilename (bug #53707).
Rik <rik@octave.org>
parents: 25206
diff changeset
4740 The base name of the currently executing script or function is returned without
01ad54f997f5 Allow filenames which begin with a '.' to be returned from mfilename (bug #53707).
Rik <rik@octave.org>
parents: 25206
diff changeset
4741 any extension. If called from outside an m-file, such as the command line,
01ad54f997f5 Allow filenames which begin with a '.' to be returned from mfilename (bug #53707).
Rik <rik@octave.org>
parents: 25206
diff changeset
4742 return the empty string.
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4743
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4744 Given the argument @qcode{"fullpath"}, include the directory part of the
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4745 filename, but not the extension.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4746
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4747 Given the argument @qcode{"fullpathext"}, include the directory part of
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4748 the filename and the extension.
25294
01ad54f997f5 Allow filenames which begin with a '.' to be returned from mfilename (bug #53707).
Rik <rik@octave.org>
parents: 25206
diff changeset
4749 @seealso{inputname, dbstack}
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4750 @end deftypefn */)
5739
d090d39bb82c [project @ 2006-04-05 06:56:24 by jwe]
jwe
parents: 5667
diff changeset
4751 {
d090d39bb82c [project @ 2006-04-05 06:56:24 by jwe]
jwe
parents: 5667
diff changeset
4752 int nargin = args.length ();
d090d39bb82c [project @ 2006-04-05 06:56:24 by jwe]
jwe
parents: 5667
diff changeset
4753
d090d39bb82c [project @ 2006-04-05 06:56:24 by jwe]
jwe
parents: 5667
diff changeset
4754 if (nargin > 1)
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4755 print_usage ();
5739
d090d39bb82c [project @ 2006-04-05 06:56:24 by jwe]
jwe
parents: 5667
diff changeset
4756
27015
4d9e1a832a55 move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27014
diff changeset
4757 std::string opt;
5739
d090d39bb82c [project @ 2006-04-05 06:56:24 by jwe]
jwe
parents: 5667
diff changeset
4758
d090d39bb82c [project @ 2006-04-05 06:56:24 by jwe]
jwe
parents: 5667
diff changeset
4759 if (nargin == 1)
27015
4d9e1a832a55 move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27014
diff changeset
4760 opt = args(0).xstring_value ("mfilename: option argument must be a string");
4d9e1a832a55 move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27014
diff changeset
4761
4d9e1a832a55 move core of mfilename function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27014
diff changeset
4762 return octave_value (interp.mfilename (opt));
5739
d090d39bb82c [project @ 2006-04-05 06:56:24 by jwe]
jwe
parents: 5667
diff changeset
4763 }
d090d39bb82c [project @ 2006-04-05 06:56:24 by jwe]
jwe
parents: 5667
diff changeset
4764
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4765 namespace octave
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4766 {
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4767 // Execute the contents of a script file. For compatibility with
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4768 // Matlab, also execute a function file by calling the function it
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4769 // defines with no arguments and nargout = 0.
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4770
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4771 void
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4772 source_file (const std::string& file_name, const std::string& context,
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4773 bool verbose, bool require_file, const std::string& warn_for)
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4774 {
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4775 interpreter& interp = __get_interpreter__ ("source_file");
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4776
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4777 interp.source_file (file_name, context, verbose, require_file, warn_for);
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4778 }
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4779 }
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4780
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4781 DEFMETHOD (source, interp, args, ,
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4782 doc: /* -*- texinfo -*-
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4783 @deftypefn {} {} source (@var{file})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4784 @deftypefnx {} {} source (@var{file}, @var{context})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4785 Parse and execute the contents of @var{file}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4786
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4787 Without specifying @var{context}, this is equivalent to executing commands
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4788 from a script file, but without requiring the file to be named
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4789 @file{@var{file}.m} or to be on the execution path.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4790
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4791 Instead of the current context, the script may be executed in either the
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4792 context of the function that called the present function
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4793 (@qcode{"caller"}), or the top-level context (@qcode{"base"}).
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4794 @seealso{run}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4795 @end deftypefn */)
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4796 {
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4797 int nargin = args.length ();
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4798
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4799 if (nargin < 1 || nargin > 2)
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5794
diff changeset
4800 print_usage ();
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4801
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4802 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
4803 = args(0).xstring_value ("source: FILE must be a string");
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4804
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4805 std::string context;
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4806 if (nargin == 2)
21861
a55f1fa2c94a oct-parse.in.yy: Shorten lines to < 80 characters where possible.
Rik <rik@octave.org>
parents: 21748
diff changeset
4807 context = args(1).xstring_value ("source: CONTEXT must be a string");
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4808
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4809 interp.source_file (file_name, context);
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4810
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
4811 return octave_value_list ();
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4812 }
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4813
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4814 namespace octave
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4815 {
24624
ce2eb28e0a6d doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents: 24534
diff changeset
4816 //! Evaluate an Octave function (built-in or interpreted) and return
ce2eb28e0a6d doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents: 24534
diff changeset
4817 //! the list of result values.
ce2eb28e0a6d doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents: 24534
diff changeset
4818 //!
ce2eb28e0a6d doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents: 24534
diff changeset
4819 //! @param name The name of the function to call.
ce2eb28e0a6d doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents: 24534
diff changeset
4820 //! @param args The arguments to the function.
ce2eb28e0a6d doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents: 24534
diff changeset
4821 //! @param nargout The number of output arguments expected.
ce2eb28e0a6d doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents: 24534
diff changeset
4822 //! @return A list of output values. The length of the list is not
ce2eb28e0a6d doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents: 24534
diff changeset
4823 //! necessarily the same as @c nargout.
ce2eb28e0a6d doc: make all Doxygen comment blocks more consistent
Mike Miller <mtmiller@octave.org>
parents: 24534
diff changeset
4824
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4825 octave_value_list
26883
a2aed4b49be3 fix const-ness of feval arguments
John W. Eaton <jwe@octave.org>
parents: 26799
diff changeset
4826 feval (const char *name, const octave_value_list& args, int nargout)
a2aed4b49be3 fix const-ness of feval arguments
John W. Eaton <jwe@octave.org>
parents: 26799
diff changeset
4827 {
27020
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4828 interpreter& interp = __get_interpreter__ ("feval");
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4829
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4830 return interp.feval (name, args, nargout);
26883
a2aed4b49be3 fix const-ness of feval arguments
John W. Eaton <jwe@octave.org>
parents: 26799
diff changeset
4831 }
a2aed4b49be3 fix const-ness of feval arguments
John W. Eaton <jwe@octave.org>
parents: 26799
diff changeset
4832
a2aed4b49be3 fix const-ness of feval arguments
John W. Eaton <jwe@octave.org>
parents: 26799
diff changeset
4833 octave_value_list
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4834 feval (const std::string& name, const octave_value_list& args, int nargout)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4835 {
27020
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4836 interpreter& interp = __get_interpreter__ ("feval");
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4837
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4838 return interp.feval (name, args, nargout);
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4839 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4840
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4841 octave_value_list
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4842 feval (octave_function *fcn, const octave_value_list& args, int nargout)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4843 {
27020
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4844 interpreter& interp = __get_interpreter__ ("feval");
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4845
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4846 return interp.feval (fcn, args, nargout);
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4847 }
23502
c6714ae1c06c eliminate remaining do_multi_index_op methods
John W. Eaton <jwe@octave.org>
parents: 23479
diff changeset
4848
c6714ae1c06c eliminate remaining do_multi_index_op methods
John W. Eaton <jwe@octave.org>
parents: 23479
diff changeset
4849 octave_value_list
26883
a2aed4b49be3 fix const-ness of feval arguments
John W. Eaton <jwe@octave.org>
parents: 26799
diff changeset
4850 feval (const octave_value& val, const octave_value_list& args, int nargout)
23502
c6714ae1c06c eliminate remaining do_multi_index_op methods
John W. Eaton <jwe@octave.org>
parents: 23479
diff changeset
4851 {
27020
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4852 interpreter& interp = __get_interpreter__ ("feval");
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4853
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4854 return interp.feval (val, args, nargout);
23502
c6714ae1c06c eliminate remaining do_multi_index_op methods
John W. Eaton <jwe@octave.org>
parents: 23479
diff changeset
4855 }
25442
47a3e4b9b6fe tmp-parser-namespace-fixes
John W. Eaton <jwe@octave.org>
parents: 25441
diff changeset
4856
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4857 octave_value_list
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4858 feval (const octave_value_list& args, int nargout)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4859 {
27020
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4860 interpreter& interp = __get_interpreter__ ("feval");
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4861
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4862 return interp.feval (args, nargout);
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4863 }
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4864 }
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4865
27020
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4866 DEFMETHOD (feval, interp, args, nargout,
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4867 doc: /* -*- texinfo -*-
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4868 @deftypefn {} {} feval (@var{name}, @dots{})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4869 Evaluate the function named @var{name}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4870
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4871 Any arguments after the first are passed as inputs to the named function.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4872 For example,
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4873
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4874 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4875 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4876 feval ("acos", -1)
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4877 @result{} 3.1416
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4878 @end group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4879 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4880
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4881 @noindent
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4882 calls the function @code{acos} with the argument @samp{-1}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4883
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4884 The function @code{feval} can also be used with function handles of any sort
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4885 (@pxref{Function Handles}). Historically, @code{feval} was the only way to
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4886 call user-supplied functions in strings, but function handles are now
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4887 preferred due to the cleaner syntax they offer. For example,
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4888
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4889 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4890 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4891 @var{f} = @@exp;
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4892 feval (@var{f}, 1)
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4893 @result{} 2.7183
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4894 @var{f} (1)
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4895 @result{} 2.7183
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4896 @end group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4897 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4898
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4899 @noindent
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4900 are equivalent ways to call the function referred to by @var{f}. If it
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4901 cannot be predicted beforehand whether @var{f} is a function handle,
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4902 function name in a string, or inline function then @code{feval} can be used
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4903 instead.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4904 @end deftypefn */)
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4905 {
20818
cef0448a6ed2 eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents: 20798
diff changeset
4906 if (args.length () == 0)
5823
080c08b192d8 [project @ 2006-05-19 05:32:17 by jwe]
jwe
parents: 5794
diff changeset
4907 print_usage ();
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4908
27020
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4909 return interp.feval (args, nargout);
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4910 }
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4911
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23577
diff changeset
4912 DEFMETHOD (builtin, interp, args, nargout,
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23577
diff changeset
4913 doc: /* -*- texinfo -*-
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4914 @deftypefn {} {[@dots{}] =} builtin (@var{f}, @dots{})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4915 Call the base function @var{f} even if @var{f} is overloaded to another
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4916 function for the given type signature.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4917
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4918 This is normally useful when doing object-oriented programming and there is
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4919 a requirement to call one of Octave's base functions rather than the
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4920 overloaded one of a new class.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4921
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4922 A trivial example which redefines the @code{sin} function to be the
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4923 @code{cos} function shows how @code{builtin} works.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4924
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4925 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4926 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4927 sin (0)
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4928 @result{} 0
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4929 function y = sin (x), y = cos (x); endfunction
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4930 sin (0)
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4931 @result{} 1
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4932 builtin ("sin", 0)
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4933 @result{} 0
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4934 @end group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4935 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4936 @end deftypefn */)
11225
8d8e10058df6 move builtin function from dispatch.cc to oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 11138
diff changeset
4937 {
11586
12df7854fa7c strip trailing whitespace from source files
John W. Eaton <jwe@octave.org>
parents: 11572
diff changeset
4938 octave_value_list retval;
11225
8d8e10058df6 move builtin function from dispatch.cc to oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 11138
diff changeset
4939
20818
cef0448a6ed2 eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents: 20798
diff changeset
4940 if (args.length () == 0)
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4941 print_usage ();
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4942
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4943 const std::string name (args(0).xstring_value ("builtin: function name (F) must be a string"));
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4944
23693
b9378eff6d13 move symbol_table class inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23673
diff changeset
4945 octave::symbol_table& symtab = interp.get_symbol_table ();
23599
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23577
diff changeset
4946
5cb3a2bb5e1e don't use singleton for symbol_table
John W. Eaton <jwe@octave.org>
parents: 23577
diff changeset
4947 octave_value fcn = symtab.builtin_find (name);
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4948
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4949 if (fcn.is_defined ())
27020
30e9204de313 move feval functions to interpreter class
John W. Eaton <jwe@octave.org>
parents: 27019
diff changeset
4950 retval = interp.feval (fcn.function_value (), args.splice (0, 1), nargout);
11225
8d8e10058df6 move builtin function from dispatch.cc to oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 11138
diff changeset
4951 else
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
4952 error ("builtin: lookup for symbol '%s' failed", name.c_str ());
11225
8d8e10058df6 move builtin function from dispatch.cc to oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 11138
diff changeset
4953
8d8e10058df6 move builtin function from dispatch.cc to oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 11138
diff changeset
4954 return retval;
8d8e10058df6 move builtin function from dispatch.cc to oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 11138
diff changeset
4955 }
8d8e10058df6 move builtin function from dispatch.cc to oct-parse.yy
John W. Eaton <jwe@octave.org>
parents: 11138
diff changeset
4956
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4957 namespace octave
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
4958 {
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4959 octave_value_list
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4960 eval_string (const std::string& eval_str, bool silent,
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4961 int& parse_status, int nargout)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4962 {
26113
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 26065
diff changeset
4963 interpreter& interp = __get_interpreter__ ("eval_string");
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 26065
diff changeset
4964
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 26065
diff changeset
4965 return interp.eval_string (eval_str, silent, parse_status, nargout);
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4966 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4967
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4968 octave_value
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4969 eval_string (const std::string& eval_str, bool silent, int& parse_status)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4970 {
26113
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 26065
diff changeset
4971 interpreter& interp = __get_interpreter__ ("eval_string");
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 26065
diff changeset
4972
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 26065
diff changeset
4973 return interp.eval_string (eval_str, silent, parse_status);
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4974 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4975
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4976 void
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4977 cleanup_statement_list (tree_statement_list **lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4978 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4979 if (*lst)
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4980 {
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4981 delete *lst;
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23750
diff changeset
4982 *lst = nullptr;
23075
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4983 }
4e3d47dc7e25 move parse tree classes inside octave namespace
John W. Eaton <jwe@octave.org>
parents: 23054
diff changeset
4984 }
13970
c93b953f7d54 plug some memory leaks
John W. Eaton <jwe@octave.org>
parents: 13844
diff changeset
4985 }
c93b953f7d54 plug some memory leaks
John W. Eaton <jwe@octave.org>
parents: 13844
diff changeset
4986
26113
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 26065
diff changeset
4987 DEFMETHOD (eval, interp, args, nargout,
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 26065
diff changeset
4988 doc: /* -*- texinfo -*-
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4989 @deftypefn {} {} eval (@var{try})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4990 @deftypefnx {} {} eval (@var{try}, @var{catch})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4991 Parse the string @var{try} and evaluate it as if it were an Octave
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4992 program.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4993
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4994 If execution fails, evaluate the optional string @var{catch}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4995
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4996 The string @var{try} is evaluated in the current context, so any results
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4997 remain available after @code{eval} returns.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4998
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
4999 The following example creates the variable @var{A} with the approximate
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5000 value of 3.1416 in the current workspace.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5001
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5002 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5003 eval ("A = acos(-1);");
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5004 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5005
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5006 If an error occurs during the evaluation of @var{try} then the @var{catch}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5007 string is evaluated, as the following example shows:
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5008
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5009 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5010 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5011 eval ('error ("This is a bad example");',
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5012 'printf ("This error occurred:\n%s\n", lasterr ());');
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5013 @print{} This error occurred:
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5014 This is a bad example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5015 @end group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5016 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5017
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5018 Programming Note: if you are only using @code{eval} as an error-capturing
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5019 mechanism, rather than for the execution of arbitrary code strings,
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5020 Consider using try/catch blocks or unwind_protect/unwind_protect_cleanup
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5021 blocks instead. These techniques have higher performance and don't
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5022 introduce the security considerations that the evaluation of arbitrary code
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5023 does.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5024 @seealso{evalin, evalc, assignin, feval}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5025 @end deftypefn */)
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
5026 {
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
5027 int nargin = args.length ();
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
5028
27019
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
5029 if (nargin < 1 || nargin > 2)
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5030 print_usage ();
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5031
27165
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5032 if (! args(0).is_string () || args(0).rows () > 1 || args(0).ndims () != 2)
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5033 error ("eval: TRY must be a string");
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5034
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5035 std::string try_code = args(0).string_value ();
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5036
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5037 if (nargin == 1)
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5038 return interp.eval (try_code, nargout);
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5039 else
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5040 {
27165
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5041 if (! args(1).is_string () || args(1).rows () > 1
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5042 || args(1).ndims () != 2)
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5043 error ("eval: CATCH must be a string");
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5044
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5045 std::string catch_code = args(1).string_value ();
27019
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
5046
6cb675912f2b move core of eval function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27018
diff changeset
5047 return interp.eval (try_code, catch_code, nargout);
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5048 }
3021
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
5049 }
18d64612e67a [project @ 1997-06-03 22:18:56 by jwe]
jwe
parents: 3016
diff changeset
5050
7562
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5051 /*
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5052
14084
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5053 %!shared x
7562
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5054 %! x = 1;
14084
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5055
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5056 %!assert (eval ("x"), 1)
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5057 %!assert (eval ("x;"))
21317
a4faec57f4c8 maint: remove semicolon after %!assert tests to follow Octave conventions.
Rik <rik@octave.org>
parents: 21301
diff changeset
5058 %!assert (eval ("x;"), 1)
14084
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5059
7562
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5060 %!test
14084
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5061 %! y = eval ("x");
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5062 %! assert (y, 1);
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5063
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5064 %!test
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5065 %! y = eval ("x;");
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5066 %! assert (y, 1);
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5067
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5068 %!test
21580
ecce63c99c3f maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents: 21416
diff changeset
5069 %! eval ("x = 1;");
14084
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5070 %! assert (x,1);
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5071
7562
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5072 %!test
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5073 %! eval ("flipud = 2;");
14084
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5074 %! assert (flipud, 2);
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5075
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5076 %!function y = __f ()
7562
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5077 %! eval ("flipud = 2;");
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5078 %! y = flipud;
14084
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5079 %!endfunction
5aba9fa234cf Modernize %!tests for eval()
Rik <octave@nomad.inbox5.com>
parents: 13970
diff changeset
5080 %!assert (__f(), 2)
7562
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5081
27165
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5082 %!test <*35645>
14533
e6aa044253eb Allow comma at the end of an assignment list (bug #35645)
Max Brister <max@2bass.com>
parents: 14512
diff changeset
5083 %! [a,] = gcd (1,2);
e6aa044253eb Allow comma at the end of an assignment list (bug #35645)
Max Brister <max@2bass.com>
parents: 14512
diff changeset
5084 %! [a,b,] = gcd (1, 2);
e6aa044253eb Allow comma at the end of an assignment list (bug #35645)
Max Brister <max@2bass.com>
parents: 14512
diff changeset
5085
27165
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5086 ## Can't assign to a keyword
21581
6fab85c1538f maint: Follow Octave conventions for use of semicolon in BIST tests.
Rik <rik@octave.org>
parents: 21580
diff changeset
5087 %!error eval ("switch = 13;")
21369
105224df2330 also disallow assignment to keywords in assignin (bug #46459)
John W. Eaton <jwe@octave.org>
parents: 21361
diff changeset
5088
27165
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5089 %!shared str
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5090 %! str = "disp ('hello');";
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5091 %! str(:,:,2) = str(:,:,1);
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5092
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5093 %!error <TRY must be a string> eval (1)
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5094 %!error <TRY must be a string> eval (['a';'b'])
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5095 %!error <TRY must be a string> eval (str)
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5096
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5097 %!error <CATCH must be a string> eval (str(:,:,1), 1)
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5098 %!error <CATCH must be a string> eval (str(:,:,1), ['a';'b'])
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5099 %!error <CATCH must be a string> eval (str(:,:,1), str)
58bdc2d98481 Only accept 1xN character vectors as string input to eval (bug #49696).
Rik <rik@octave.org>
parents: 27160
diff changeset
5100
7562
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5101 */
c827f5673321 move tests to individual source files
John W. Eaton <jwe@octave.org>
parents: 7351
diff changeset
5102
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23533
diff changeset
5103 DEFMETHOD (assignin, interp, args, ,
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23533
diff changeset
5104 doc: /* -*- texinfo -*-
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5105 @deftypefn {} {} assignin (@var{context}, @var{varname}, @var{value})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5106 Assign @var{value} to @var{varname} in context @var{context}, which
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5107 may be either @qcode{"base"} or @qcode{"caller"}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5108 @seealso{evalin}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5109 @end deftypefn */)
4297
59a2ba0fb205 [project @ 2003-01-11 20:22:09 by jwe]
jwe
parents: 4246
diff changeset
5110 {
20818
cef0448a6ed2 eliminate unnecessary uses of nargin
John W. Eaton <jwe@octave.org>
parents: 20798
diff changeset
5111 if (args.length () != 3)
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5112 print_usage ();
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5113
27014
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26998
diff changeset
5114 std::string context
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26998
diff changeset
5115 = args(0).xstring_value ("assignin: CONTEXT must be a string");
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26998
diff changeset
5116
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26998
diff changeset
5117 std::string varname
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26998
diff changeset
5118 = args(1).xstring_value ("assignin: VARNAME must be a string");
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26998
diff changeset
5119
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26998
diff changeset
5120 interp.assignin (context, varname, args(2));
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26998
diff changeset
5121
daab1b311a98 move core of assignin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 26998
diff changeset
5122 return octave_value_list ();
4297
59a2ba0fb205 [project @ 2003-01-11 20:22:09 by jwe]
jwe
parents: 4246
diff changeset
5123 }
59a2ba0fb205 [project @ 2003-01-11 20:22:09 by jwe]
jwe
parents: 4246
diff changeset
5124
21369
105224df2330 also disallow assignment to keywords in assignin (bug #46459)
John W. Eaton <jwe@octave.org>
parents: 21361
diff changeset
5125 /*
105224df2330 also disallow assignment to keywords in assignin (bug #46459)
John W. Eaton <jwe@octave.org>
parents: 21361
diff changeset
5126
21581
6fab85c1538f maint: Follow Octave conventions for use of semicolon in BIST tests.
Rik <rik@octave.org>
parents: 21580
diff changeset
5127 %!error assignin ("base", "switch", "13")
21369
105224df2330 also disallow assignment to keywords in assignin (bug #46459)
John W. Eaton <jwe@octave.org>
parents: 21361
diff changeset
5128
105224df2330 also disallow assignment to keywords in assignin (bug #46459)
John W. Eaton <jwe@octave.org>
parents: 21361
diff changeset
5129 */
105224df2330 also disallow assignment to keywords in assignin (bug #46459)
John W. Eaton <jwe@octave.org>
parents: 21361
diff changeset
5130
23553
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23533
diff changeset
5131 DEFMETHOD (evalin, interp, args, nargout,
14723784b9f2 don't use singleton for call_stack
John W. Eaton <jwe@octave.org>
parents: 23533
diff changeset
5132 doc: /* -*- texinfo -*-
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5133 @deftypefn {} {} evalin (@var{context}, @var{try})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5134 @deftypefnx {} {} evalin (@var{context}, @var{try}, @var{catch})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5135 Like @code{eval}, except that the expressions are evaluated in the context
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5136 @var{context}, which may be either @qcode{"caller"} or @qcode{"base"}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5137 @seealso{eval, assignin}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5138 @end deftypefn */)
4245
610671be8792 [project @ 2002-12-28 04:02:31 by jwe]
jwe
parents: 4244
diff changeset
5139 {
610671be8792 [project @ 2002-12-28 04:02:31 by jwe]
jwe
parents: 4244
diff changeset
5140 int nargin = args.length ();
610671be8792 [project @ 2002-12-28 04:02:31 by jwe]
jwe
parents: 4244
diff changeset
5141
27018
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5142 if (nargin < 2 || nargin > 3)
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5143 print_usage ();
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5144
27018
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5145 std::string context
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5146 = args(0).xstring_value ("evalin: CONTEXT must be a string");
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5147
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5148 std::string try_code
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5149 = args(1).xstring_value ("evalin: TRY must be a string");
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5150
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5151 if (nargin == 3)
4245
610671be8792 [project @ 2002-12-28 04:02:31 by jwe]
jwe
parents: 4244
diff changeset
5152 {
27018
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5153 std::string catch_code
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5154 = args(2).xstring_value ("evalin: CATCH must be a string");
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5155
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5156 return interp.evalin (context, try_code, catch_code, nargout);
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5157 }
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5158
27018
a20ead51515d move core of evalin function to evaluator
John W. Eaton <jwe@octave.org>
parents: 27017
diff changeset
5159 return interp.evalin (context, try_code, nargout);
4245
610671be8792 [project @ 2002-12-28 04:02:31 by jwe]
jwe
parents: 4244
diff changeset
5160 }
610671be8792 [project @ 2002-12-28 04:02:31 by jwe]
jwe
parents: 4244
diff changeset
5161
22504
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5162 static void
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5163 restore_octave_stdout (std::streambuf *buf)
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5164 {
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5165 octave_stdout.flush ();
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5166 octave_stdout.rdbuf (buf);
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5167 }
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5168
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5169 static void
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5170 restore_octave_stderr (std::streambuf *buf)
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5171 {
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5172 std::cerr.flush ();
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5173 std::cerr.rdbuf (buf);
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5174 }
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5175
26113
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 26065
diff changeset
5176 DEFMETHOD (evalc, interp, args, nargout,
8a15f3bace49 move eval_string inside interpreter/evaluator class
John W. Eaton <jwe@octave.org>
parents: 26065
diff changeset
5177 doc: /* -*- texinfo -*-
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5178 @deftypefn {} {@var{s} =} evalc (@var{try})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5179 @deftypefnx {} {@var{s} =} evalc (@var{try}, @var{catch})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5180 Parse and evaluate the string @var{try} as if it were an Octave program,
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5181 while capturing the output into the return variable @var{s}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5182
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5183 If execution fails, evaluate the optional string @var{catch}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5184
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5185 This function behaves like @code{eval}, but any output or warning messages
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5186 which would normally be written to the console are captured and returned in
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5187 the string @var{s}.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5188
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5189 The @code{diary} is disabled during the execution of this function. When
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5190 @code{system} is used, any output produced by external programs is
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5191 @emph{not} captured, unless their output is captured by the @code{system}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5192 function itself.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5193
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5194 @example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5195 @group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5196 s = evalc ("t = 42"), t
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5197 @result{} s = t = 42
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5198
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5199 @result{} t = 42
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5200 @end group
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5201 @end example
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5202 @seealso{eval, diary}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5203 @end deftypefn */)
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5204 {
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5205 octave_value_list retval;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5206
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5207 int nargin = args.length ();
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5208
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5209 if (nargin == 0 || nargin > 2)
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5210 print_usage ();
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5211
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5212 // redirect stdout/stderr to capturing buffer
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5213 std::ostringstream buffer;
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5214
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5215 std::ostream& out_stream = octave_stdout;
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5216 std::ostream& err_stream = std::cerr;
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5217
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5218 out_stream.flush ();
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5219 err_stream.flush ();
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5220
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5221 std::streambuf* old_out_buf = out_stream.rdbuf (buffer.rdbuf ());
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5222 std::streambuf* old_err_buf = err_stream.rdbuf (buffer.rdbuf ());
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5223
22504
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5224 octave::unwind_protect frame;
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5225
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5226 frame.add_fcn (restore_octave_stdout, old_out_buf);
2aa9e8893ea9 Fix crash in evalc (bug #49057).
Mike Miller <mtmiller@octave.org>
parents: 22327
diff changeset
5227 frame.add_fcn (restore_octave_stderr, old_err_buf);
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5228
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5229 // call standard eval function
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5230
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5231 int eval_nargout = std::max (0, nargout - 1);
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5232
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5233 try
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5234 {
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5235 retval = Feval (interp, args, eval_nargout);
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5236 }
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5237 catch (const octave::execution_exception& ee)
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5238 {
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5239 buffer << "error: " << ee.message () << std::endl;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5240
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5241 throw;
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5242 }
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5243
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5244 retval.prepend (buffer.str ());
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5245
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5246 return retval;
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5247 }
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5248
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5249 /*
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5250
26716
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5251 %!test
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5252 %! [old_fmt, old_spacing] = format ();
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5253 %! unwind_protect
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5254 %! format short;
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5255 %! str = evalc ("1");
27458
2f4e8dce06da Don't print leading spaces before scalar values in interpeter (bug #56939)
Rik <rik@octave.org>
parents: 27408
diff changeset
5256 %! assert (str, "ans = 1\n");
26716
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5257 %! unwind_protect_cleanup
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5258 %! format (old_fmt);
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5259 %! format (old_spacing);
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5260 %! end_unwind_protect
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5261
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5262 %!assert (evalc ("1;"), "")
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5263
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5264 %!test
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5265 %! [s, y] = evalc ("1");
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5266 %! assert (s, "");
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5267 %! assert (y, 1);
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5268
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5269 %!test
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5270 %! [s, y] = evalc ("1;");
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5271 %! assert (s, "");
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5272 %! assert (y, 1);
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5273
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5274 %!test
26716
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5275 %! [old_fmt, old_spacing] = format ();
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5276 %! unwind_protect
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5277 %! format short;
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5278 %! str = evalc ("y = 2");
27458
2f4e8dce06da Don't print leading spaces before scalar values in interpeter (bug #56939)
Rik <rik@octave.org>
parents: 27408
diff changeset
5279 %! assert (str, "y = 2\n");
26716
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5280 %! assert (y, 2);
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5281 %! unwind_protect_cleanup
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5282 %! format (old_fmt);
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5283 %! format (old_spacing);
daa281e03d9a Harden BIST tests against changes in format().
Rik <rik@octave.org>
parents: 26709
diff changeset
5284 %! end_unwind_protect
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5285
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5286 %!test
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5287 %! assert (evalc ("y = 3;"), "");
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5288 %! assert (y, 3);
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5289
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5290 %!test
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5291 %! [s, a, b] = evalc ("deal (1, 2)");
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5292 %! assert (s, "");
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5293 %! assert (a, 1);
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5294 %! assert (b, 2);
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5295
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5296 %!function [a, b] = __f_evalc ()
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5297 %! printf ("foo");
27458
2f4e8dce06da Don't print leading spaces before scalar values in interpeter (bug #56939)
Rik <rik@octave.org>
parents: 27408
diff changeset
5298 %! fprintf (stdout, "bar ");
21580
ecce63c99c3f maint: Add semicolons to terminate code in %! blocks.
Rik <rik@octave.org>
parents: 21416
diff changeset
5299 %! disp (pi);
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5300 %! a = 1;
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5301 %! b = 2;
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5302 %!endfunction
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5303 %!test
26585
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5304 %! [old_fmt, old_spacing] = format ();
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5305 %! unwind_protect
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5306 %! format short;
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5307 %! [s, a, b] = evalc ("__f_evalc ()");
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5308 %! assert (s, "foobar 3.1416\n");
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5309 %! assert (a, 1);
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5310 %! assert (b, 2);
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5311 %! unwind_protect_cleanup
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5312 %! format (old_fmt);
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5313 %! format (old_spacing);
d673b506f382 test: use "format short" in tests depending on output format (bug #55539)
Mike Miller <mtmiller@octave.org>
parents: 26423
diff changeset
5314 %! end_unwind_protect
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5315
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5316 %!error <foo> (evalc ("error ('foo')"))
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5317 %!error <bar> (evalc ("error ('foo')", "error ('bar')"))
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5318
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5319 %!test
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5320 %! warning ("off", "quiet", "local");
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5321 %! str = evalc ("warning ('foo')");
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5322 %! assert (str(1:13), "warning: foo\n");
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5323
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5324 %!test
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5325 %! warning ("off", "quiet", "local");
27471
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5326 %! str = evalc ("error ('foo')", "warning ('bar')");
fd32c1a9b1bd revamp error handling
John W. Eaton <jwe@octave.org>
parents: 27458
diff changeset
5327 %! assert (str(1:13), "warning: bar\n");
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5328
21581
6fab85c1538f maint: Follow Octave conventions for use of semicolon in BIST tests.
Rik <rik@octave.org>
parents: 21580
diff changeset
5329 %!error evalc ("switch = 13;")
21369
105224df2330 also disallow assignment to keywords in assignin (bug #46459)
John W. Eaton <jwe@octave.org>
parents: 21361
diff changeset
5330
21075
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5331 */
5ed379c8decd Add new function evalc to core.
Oliver Heimlich <oheim@posteo.de>
parents: 21073
diff changeset
5332
8311
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5333 DEFUN (__parser_debug_flag__, args, nargout,
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5334 doc: /* -*- texinfo -*-
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5335 @deftypefn {} {@var{val} =} __parser_debug_flag__ ()
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5336 @deftypefnx {} {@var{old_val} =} __parser_debug_flag__ (@var{new_val})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5337 Query or set the internal flag that determines whether Octave's parser
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5338 prints debug information as it processes an expression.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5339 @seealso{__lexer_debug_flag__}
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5340 @end deftypefn */)
8311
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5341 {
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5342 octave_value retval;
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5343
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5344 bool debug_flag = octave_debug;
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5345
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5346 retval = set_internal_variable (debug_flag, args, nargout,
10315
57a59eae83cc untabify src C++ source files
John W. Eaton <jwe@octave.org>
parents: 10250
diff changeset
5347 "__parser_debug_flag__");
8311
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5348
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5349 octave_debug = debug_flag;
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5350
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5351 return retval;
7124bffc89c7 parse.y (F__parser_debug_flag__): New function.
John W. Eaton <jwe@octave.org>
parents: 8283
diff changeset
5352 }
17342
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5353
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
5354 DEFMETHOD (__parse_file__, interp, args, ,
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
5355 doc: /* -*- texinfo -*-
21966
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5356 @deftypefn {} {} __parse_file__ (@var{file}, @var{verbose})
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5357 Undocumented internal function.
112b20240c87 move docstrings in C++ files out of C strings and into comments
John W. Eaton <jwe@octave.org>
parents: 21942
diff changeset
5358 @end deftypefn */)
17342
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5359 {
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5360 octave_value retval;
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5361
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5362 int nargin = args.length ();
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5363
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5364 if (nargin < 1 || nargin > 2)
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5365 print_usage ();
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5366
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5367 std::string file = args(0).xstring_value ("__parse_file__: expecting filename as argument");
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5368
23667
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
5369 std::string full_file
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
5370 = octave::sys::file_ops::tilde_expand (file);
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
5371
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
5372 full_file = octave::sys::env::make_absolute (full_file);
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
5373
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
5374 std::string dir_name;
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5375
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5376 size_t file_len = file.length ();
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5377
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5378 if ((file_len > 4 && file.substr (file_len-4) == ".oct")
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5379 || (file_len > 4 && file.substr (file_len-4) == ".mex")
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5380 || (file_len > 2 && file.substr (file_len-2) == ".m"))
17342
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5381 {
21732
6a1eded90355 use namespace for system env class
John W. Eaton <jwe@octave.org>
parents: 21730
diff changeset
5382 file = octave::sys::env::base_pathname (file);
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5383 file = file.substr (0, file.find_last_of ('.'));
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5384
21733
cb0fdd941d84 use namespace for system file_ops class
John W. Eaton <jwe@octave.org>
parents: 21732
diff changeset
5385 size_t pos = file.find_last_of (octave::sys::file_ops::dir_sep_str ());
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5386 if (pos != std::string::npos)
23667
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
5387 {
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
5388 dir_name = file.substr (0, pos);
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
5389 file = file.substr (pos+1);
2d4a7ae1f6cd store directory and package names in function when function is parsed
John W. Eaton <jwe@octave.org>
parents: 23655
diff changeset
5390 }
17342
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5391 }
20798
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5392
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5393 if (nargin == 2)
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5394 octave_stdout << "parsing " << full_file << std::endl;
bb585db6dee2 eliminate return statements after calls to print_usage
John W. Eaton <jwe@octave.org>
parents: 20785
diff changeset
5395
23653
3bb0a937c071 avoid possible memory errors when parsing function files
John W. Eaton <jwe@octave.org>
parents: 23641
diff changeset
5396 octave_value ov_fcn
27017
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
5397 = interp.parse_fcn_file (full_file, file, dir_name, "", "", true, false,
24b7e6326e26 move parse_fcn_file to interpreter; source_file to evaluator
John W. Eaton <jwe@octave.org>
parents: 27016
diff changeset
5398 false, false, "__parse_file__");
17342
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5399
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5400 return retval;
091e4df179de new function to help with debugging by parsing .m files without executing them
John W. Eaton <jwe@octave.org>
parents: 17326
diff changeset
5401 }