GNU Octave  4.2.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
oct-parse.cc
Go to the documentation of this file.
1 /* A Bison parser, made by GNU Bison 3.0.4. */
2 
3 /* Bison implementation for Yacc-like parsers in C
4 
5  Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
6 
7  This program is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  This program is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 
20 /* As a special exception, you may create a larger work that contains
21  part or all of the Bison parser skeleton and distribute that work
22  under terms of your choice, so long as that work isn't itself a
23  parser generator using the skeleton or a modified version thereof
24  as a parser skeleton. Alternatively, if you modify or redistribute
25  the parser skeleton itself, you may (at your option) remove this
26  special exception, which will cause the skeleton and the resulting
27  Bison output files to be licensed under the GNU General Public
28  License without this special exception.
29 
30  This special exception was added by the Free Software Foundation in
31  version 2.2 of Bison. */
32 
33 /* C LALR(1) parser skeleton written by Richard Stallman, by
34  simplifying the original so-called "semantic" parser. */
35 
36 /* All symbols defined below should begin with yy or YY, to avoid
37  infringing on user name space. This should be done even for local
38  variables, as they might otherwise be expanded by user macros.
39  There are some unavoidable exceptions within include files to
40  define necessary library symbols; they are noted "INFRINGES ON
41  USER NAME SPACE" below. */
42 
43 /* Identify Bison output. */
44 #define YYBISON 1
45 
46 /* Bison version. */
47 #define YYBISON_VERSION "3.0.4"
48 
49 /* Skeleton name. */
50 #define YYSKELETON_NAME "yacc.c"
51 
52 /* Pure parsers. */
53 #define YYPURE 1
54 
55 /* Push parsers. */
56 #define YYPUSH 1
57 
58 /* Pull parsers. */
59 #define YYPULL 1
60 
61 /* Substitute the type names. */
62 #define YYSTYPE OCTAVE_STYPE
63 /* Substitute the variable and function names. */
64 #define yyparse octave_parse
65 #define yypush_parse octave_push_parse
66 #define yypull_parse octave_pull_parse
67 #define yypstate_new octave_pstate_new
68 #define yypstate_delete octave_pstate_delete
69 #define yypstate octave_pstate
70 #define yylex octave_lex
71 #define yyerror octave_error
72 #define yydebug octave_debug
73 #define yynerrs octave_nerrs
74 
75 
76 /* Copy the first part of user declarations. */
77 #line 30 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:339 */
78 
79 
80 #define YYDEBUG 1
81 
82 #if defined (HAVE_CONFIG_H)
83 # include "config.h"
84 #endif
85 
86 #include <cassert>
87 #include <cstdio>
88 #include <cstdlib>
89 
90 #include <iostream>
91 #include <map>
92 #include <sstream>
93 
94 #include "Matrix.h"
95 #include "cmd-edit.h"
96 #include "cmd-hist.h"
97 #include "file-ops.h"
98 #include "file-stat.h"
99 #include "oct-env.h"
100 #include "oct-time.h"
101 #include "quit.h"
102 
103 #include "Cell.h"
104 #include "call-stack.h"
105 #include "comment-list.h"
106 #include "defaults.h"
107 #include "defun.h"
108 #include "dirfns.h"
109 #include "dynamic-ld.h"
110 #include "error.h"
111 #include "input.h"
112 #include "interpreter.h"
113 #include "lex.h"
114 #include "load-path.h"
115 #include "oct-hist.h"
116 #include "oct-map.h"
117 #include "ov-classdef.h"
118 #include "ov-fcn-handle.h"
119 #include "ov-usr-fcn.h"
120 #include "ov-null-mat.h"
121 #include "pager.h"
122 #include "parse.h"
123 #include "pt-all.h"
124 #include "pt-eval.h"
125 #include "pt-funcall.h"
126 #include "symtab.h"
127 #include "token.h"
128 #include "unwind-prot.h"
129 #include "utils.h"
130 #include "variables.h"
131 
132 // oct-parse.h must be included after pt-all.h
133 #include <oct-parse.h>
134 
135 extern int octave_lex (YYSTYPE *, void *);
136 
137 // Global access to currently active lexer.
138 // FIXME: to be removed after more parser+lexer refactoring.
140 
141 // TRUE means we printed messages about reading startup files.
143 
144 // List of autoloads (function -> file mapping).
145 static std::map<std::string, std::string> autoload_map;
146 
147 // Forward declarations for some functions defined at the bottom of
148 // the file.
149 
150 static void yyerror (octave::base_parser& parser, const char *s);
151 
152 #define lexer parser.lexer
153 #define scanner lexer.scanner
154 
155 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC)
156 // Disable this warning for code that is generated by Bison, including
157 // grammar rules. Push the current state so we can restore the warning
158 // state prior to functions we define at the bottom of the file.
159 #pragma GCC diagnostic push
160 #pragma GCC diagnostic ignored "-Wold-style-cast"
161 #endif
162 
163 
164 #line 165 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:339 */
165 
166 # ifndef YY_NULLPTR
167 # if defined __cplusplus && 201103L <= __cplusplus
168 # define YY_NULLPTR nullptr
169 # else
170 # define YY_NULLPTR 0
171 # endif
172 # endif
173 
174 /* Enabling verbose error messages. */
175 #ifdef YYERROR_VERBOSE
176 # undef YYERROR_VERBOSE
177 # define YYERROR_VERBOSE 1
178 #else
179 # define YYERROR_VERBOSE 0
180 #endif
181 
182 /* In a future release of Bison, this section will be replaced
183  by #include "y.tab.h". */
184 #ifndef YY_OCTAVE_LIBINTERP_PARSE_TREE_OCT_PARSE_H_INCLUDED
185 # define YY_OCTAVE_LIBINTERP_PARSE_TREE_OCT_PARSE_H_INCLUDED
186 /* Debug traces. */
187 #ifndef OCTAVE_DEBUG
188 # if defined YYDEBUG
189 #if YYDEBUG
190 # define OCTAVE_DEBUG 1
191 # else
192 # define OCTAVE_DEBUG 0
193 # endif
194 # else /* ! defined YYDEBUG */
195 # define OCTAVE_DEBUG 0
196 # endif /* ! defined YYDEBUG */
197 #endif /* ! defined OCTAVE_DEBUG */
198 #if OCTAVE_DEBUG
199 extern int octave_debug;
200 #endif
201 
202 /* Token type. */
203 #ifndef OCTAVE_TOKENTYPE
204 # define OCTAVE_TOKENTYPE
205  enum octave_tokentype
206  {
207  ADD_EQ = 258,
208  SUB_EQ = 259,
209  MUL_EQ = 260,
210  DIV_EQ = 261,
211  LEFTDIV_EQ = 262,
212  POW_EQ = 263,
213  EMUL_EQ = 264,
214  EDIV_EQ = 265,
215  ELEFTDIV_EQ = 266,
216  EPOW_EQ = 267,
217  AND_EQ = 268,
218  OR_EQ = 269,
219  EXPR_AND_AND = 270,
220  EXPR_OR_OR = 271,
221  EXPR_AND = 272,
222  EXPR_OR = 273,
223  EXPR_NOT = 274,
224  EXPR_LT = 275,
225  EXPR_LE = 276,
226  EXPR_EQ = 277,
227  EXPR_NE = 278,
228  EXPR_GE = 279,
229  EXPR_GT = 280,
230  LEFTDIV = 281,
231  EMUL = 282,
232  EDIV = 283,
233  ELEFTDIV = 284,
234  EPLUS = 285,
235  EMINUS = 286,
236  HERMITIAN = 287,
237  TRANSPOSE = 288,
238  PLUS_PLUS = 289,
239  MINUS_MINUS = 290,
240  POW = 291,
241  EPOW = 292,
242  NUM = 293,
243  IMAG_NUM = 294,
244  STRUCT_ELT = 295,
245  NAME = 296,
246  END = 297,
247  DQ_STRING = 298,
248  SQ_STRING = 299,
249  FOR = 300,
250  PARFOR = 301,
251  WHILE = 302,
252  DO = 303,
253  UNTIL = 304,
254  IF = 305,
255  ELSEIF = 306,
256  ELSE = 307,
257  SWITCH = 308,
258  CASE = 309,
259  OTHERWISE = 310,
260  BREAK = 311,
261  CONTINUE = 312,
262  FUNC_RET = 313,
263  UNWIND = 314,
264  CLEANUP = 315,
265  TRY = 316,
266  CATCH = 317,
267  GLOBAL = 318,
268  PERSISTENT = 319,
269  FCN_HANDLE = 320,
270  CLASSDEF = 321,
271  PROPERTIES = 322,
272  METHODS = 323,
273  EVENTS = 324,
274  ENUMERATION = 325,
275  METAQUERY = 326,
276  SUPERCLASSREF = 327,
277  FQ_IDENT = 328,
278  GET = 329,
279  SET = 330,
280  FCN = 331,
281  LEXICAL_ERROR = 332,
282  END_OF_INPUT = 333,
283  INPUT_FILE = 334,
284  UNARY = 335
285  };
286 #endif
287 /* Tokens. */
288 #define ADD_EQ 258
289 #define SUB_EQ 259
290 #define MUL_EQ 260
291 #define DIV_EQ 261
292 #define LEFTDIV_EQ 262
293 #define POW_EQ 263
294 #define EMUL_EQ 264
295 #define EDIV_EQ 265
296 #define ELEFTDIV_EQ 266
297 #define EPOW_EQ 267
298 #define AND_EQ 268
299 #define OR_EQ 269
300 #define EXPR_AND_AND 270
301 #define EXPR_OR_OR 271
302 #define EXPR_AND 272
303 #define EXPR_OR 273
304 #define EXPR_NOT 274
305 #define EXPR_LT 275
306 #define EXPR_LE 276
307 #define EXPR_EQ 277
308 #define EXPR_NE 278
309 #define EXPR_GE 279
310 #define EXPR_GT 280
311 #define LEFTDIV 281
312 #define EMUL 282
313 #define EDIV 283
314 #define ELEFTDIV 284
315 #define EPLUS 285
316 #define EMINUS 286
317 #define HERMITIAN 287
318 #define TRANSPOSE 288
319 #define PLUS_PLUS 289
320 #define MINUS_MINUS 290
321 #define POW 291
322 #define EPOW 292
323 #define NUM 293
324 #define IMAG_NUM 294
325 #define STRUCT_ELT 295
326 #define NAME 296
327 #define END 297
328 #define DQ_STRING 298
329 #define SQ_STRING 299
330 #define FOR 300
331 #define PARFOR 301
332 #define WHILE 302
333 #define DO 303
334 #define UNTIL 304
335 #define IF 305
336 #define ELSEIF 306
337 #define ELSE 307
338 #define SWITCH 308
339 #define CASE 309
340 #define OTHERWISE 310
341 #define BREAK 311
342 #define CONTINUE 312
343 #define FUNC_RET 313
344 #define UNWIND 314
345 #define CLEANUP 315
346 #define TRY 316
347 #define CATCH 317
348 #define GLOBAL 318
349 #define PERSISTENT 319
350 #define FCN_HANDLE 320
351 #define CLASSDEF 321
352 #define PROPERTIES 322
353 #define METHODS 323
354 #define EVENTS 324
355 #define ENUMERATION 325
356 #define METAQUERY 326
357 #define SUPERCLASSREF 327
358 #define FQ_IDENT 328
359 #define GET 329
360 #define SET 330
361 #define FCN 331
362 #define LEXICAL_ERROR 332
363 #define END_OF_INPUT 333
364 #define INPUT_FILE 334
365 #define UNARY 335
366 
367 /* Value type. */
368 #if ! defined OCTAVE_STYPE && ! defined OCTAVE_STYPE_IS_DECLARED
369 
370 union OCTAVE_STYPE
371 {
372 #line 141 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:355 */
373 
374  int dummy_type;
375 
376  // The type of the basic tokens returned by the lexer.
377  token *tok_val;
378 
379  // Comment strings that we need to deal with mid-rule.
381 
382  // Types for the nonterminals we generate.
383  char punct_type;
384  tree *tree_type;
411 
429 
430 #line 431 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:355 */
431 };
432 
433 typedef union OCTAVE_STYPE OCTAVE_STYPE;
434 # define OCTAVE_STYPE_IS_TRIVIAL 1
435 # define OCTAVE_STYPE_IS_DECLARED 1
436 #endif
437 
438 
439 
440 #ifndef YYPUSH_MORE_DEFINED
441 # define YYPUSH_MORE_DEFINED
442 enum { YYPUSH_MORE = 4 };
443 #endif
444 
446 
448 int octave_push_parse (octave_pstate *ps, int pushed_char, OCTAVE_STYPE const *pushed_val, octave::base_parser& parser);
452 
453 #endif /* !YY_OCTAVE_LIBINTERP_PARSE_TREE_OCT_PARSE_H_INCLUDED */
454 
455 /* Copy the second part of user declarations. */
456 
457 #line 458 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:358 */
458 
459 #ifdef short
460 # undef short
461 #endif
462 
463 #ifdef YYTYPE_UINT8
464 typedef YYTYPE_UINT8 yytype_uint8;
465 #else
466 typedef unsigned char yytype_uint8;
467 #endif
468 
469 #ifdef YYTYPE_INT8
470 typedef YYTYPE_INT8 yytype_int8;
471 #else
472 typedef signed char yytype_int8;
473 #endif
474 
475 #ifdef YYTYPE_UINT16
476 typedef YYTYPE_UINT16 yytype_uint16;
477 #else
478 typedef unsigned short int yytype_uint16;
479 #endif
480 
481 #ifdef YYTYPE_INT16
482 typedef YYTYPE_INT16 yytype_int16;
483 #else
484 typedef short int yytype_int16;
485 #endif
486 
487 #ifndef YYSIZE_T
488 # ifdef __SIZE_TYPE__
489 # define YYSIZE_T __SIZE_TYPE__
490 # elif defined size_t
491 # define YYSIZE_T size_t
492 # elif ! defined YYSIZE_T
493 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
494 # define YYSIZE_T size_t
495 # else
496 # define YYSIZE_T unsigned int
497 # endif
498 #endif
499 
500 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
501 
502 #ifndef YY_
503 # if defined YYENABLE_NLS && YYENABLE_NLS
504 # if ENABLE_NLS
505 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
506 # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
507 # endif
508 # endif
509 # ifndef YY_
510 # define YY_(Msgid) Msgid
511 # endif
512 #endif
513 
514 #ifndef YY_ATTRIBUTE
515 # if (defined __GNUC__ \
516  && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
517  || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
518 # define YY_ATTRIBUTE(Spec) __attribute__(Spec)
519 # else
520 # define YY_ATTRIBUTE(Spec) /* empty */
521 # endif
522 #endif
523 
524 #ifndef YY_ATTRIBUTE_PURE
525 # define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
526 #endif
527 
528 #ifndef YY_ATTRIBUTE_UNUSED
529 # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
530 #endif
531 
532 #if !defined _Noreturn \
533  && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
534 # if defined _MSC_VER && 1200 <= _MSC_VER
535 # define _Noreturn __declspec (noreturn)
536 # else
537 # define _Noreturn YY_ATTRIBUTE ((__noreturn__))
538 # endif
539 #endif
540 
541 /* Suppress unused-variable warnings by "using" E. */
542 #if ! defined lint || defined __GNUC__
543 # define YYUSE(E) ((void) (E))
544 #else
545 # define YYUSE(E) /* empty */
546 #endif
547 
548 #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
549 /* Suppress an incorrect diagnostic about yylval being uninitialized. */
550 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
551  _Pragma ("GCC diagnostic push") \
552  _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
553  _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
554 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
555  _Pragma ("GCC diagnostic pop")
556 #else
557 # define YY_INITIAL_VALUE(Value) Value
558 #endif
559 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
560 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
561 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
562 #endif
563 #ifndef YY_INITIAL_VALUE
564 # define YY_INITIAL_VALUE(Value) /* Nothing. */
565 #endif
566 
567 
568 #if ! defined yyoverflow || YYERROR_VERBOSE
569 
570 /* The parser invokes alloca or malloc; define the necessary symbols. */
571 
572 # ifdef YYSTACK_ALLOC
573  /* Pacify GCC's 'empty if-body' warning. */
574 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
575 # ifndef YYSTACK_ALLOC_MAXIMUM
576  /* The OS might guarantee only one guard page at the bottom of the stack,
577  and a page size can be as small as 4096 bytes. So we cannot safely
578  invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
579  to allow for a few compiler-allocated temporary stack slots. */
580 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
581 # endif
582 # else
583 # define YYSTACK_ALLOC YYMALLOC
584 # define YYSTACK_FREE YYFREE
585 # ifndef YYSTACK_ALLOC_MAXIMUM
586 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
587 # endif
588 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
589  && ! ((defined YYMALLOC || defined malloc) \
590  && (defined YYFREE || defined free)))
591 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
592 # ifndef EXIT_SUCCESS
593 # define EXIT_SUCCESS 0
594 # endif
595 # endif
596 # ifndef YYMALLOC
597 # define YYMALLOC malloc
598 # if ! defined malloc && ! defined EXIT_SUCCESS
599 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
600 # endif
601 # endif
602 # ifndef YYFREE
603 # define YYFREE free
604 # if ! defined free && ! defined EXIT_SUCCESS
605 void free (void *); /* INFRINGES ON USER NAME SPACE */
606 # endif
607 # endif
608 # endif
609 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
610 
611 
612 #if (! defined yyoverflow \
613  && (! defined __cplusplus \
614  || (defined OCTAVE_STYPE_IS_TRIVIAL && OCTAVE_STYPE_IS_TRIVIAL)))
615 
616 /* A type that is properly aligned for any stack member. */
617 union yyalloc
618 {
621 };
622 
623 /* The size of the maximum gap between one aligned stack and the next. */
624 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
625 
626 /* The size of an array large to enough to hold all stacks, each with
627  N elements. */
628 # define YYSTACK_BYTES(N) \
629  ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
630  + YYSTACK_GAP_MAXIMUM)
631 
632 # define YYCOPY_NEEDED 1
633 
634 /* Relocate STACK from its old location to the new one. The
635  local variables YYSIZE and YYSTACKSIZE give the old and new number of
636  elements in the stack, and YYPTR gives the new location of the
637  stack. Advance YYPTR to a properly aligned location for the next
638  stack. */
639 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
640  do \
641  { \
642  YYSIZE_T yynewbytes; \
643  YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
644  Stack = &yyptr->Stack_alloc; \
645  yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
646  yyptr += yynewbytes / sizeof (*yyptr); \
647  } \
648  while (0)
649 
650 #endif
651 
652 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
653 /* Copy COUNT objects from SRC to DST. The source and destination do
654  not overlap. */
655 # ifndef YYCOPY
656 # if defined __GNUC__ && 1 < __GNUC__
657 # define YYCOPY(Dst, Src, Count) \
658  __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
659 # else
660 # define YYCOPY(Dst, Src, Count) \
661  do \
662  { \
663  YYSIZE_T yyi; \
664  for (yyi = 0; yyi < (Count); yyi++) \
665  (Dst)[yyi] = (Src)[yyi]; \
666  } \
667  while (0)
668 # endif
669 # endif
670 #endif /* !YYCOPY_NEEDED */
671 
672 /* YYFINAL -- State number of the termination state. */
673 #define YYFINAL 110
674 /* YYLAST -- Last index in YYTABLE. */
675 #define YYLAST 1508
676 
677 /* YYNTOKENS -- Number of terminals. */
678 #define YYNTOKENS 98
679 /* YYNNTS -- Number of nonterminals. */
680 #define YYNNTS 105
681 /* YYNRULES -- Number of rules. */
682 #define YYNRULES 278
683 /* YYNSTATES -- Number of states. */
684 #define YYNSTATES 516
685 
686 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
687  by yylex, with out-of-bounds checking. */
688 #define YYUNDEFTOK 2
689 #define YYMAXUTOK 335
690 
691 #define YYTRANSLATE(YYX) \
692  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
693 
694 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
695  as returned by yylex, without out-of-bounds checking. */
696 static const yytype_uint8 yytranslate[] =
697 {
698  0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
699  96, 2, 2, 2, 2, 2, 2, 2, 2, 2,
700  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
701  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
702  86, 87, 7, 6, 93, 5, 92, 8, 2, 2,
703  2, 2, 2, 2, 2, 2, 2, 2, 4, 94,
704  2, 3, 2, 2, 95, 2, 2, 2, 2, 2,
705  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
706  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
707  2, 88, 2, 89, 2, 2, 2, 2, 2, 2,
708  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
709  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
710  2, 2, 2, 90, 2, 91, 2, 2, 2, 2,
711  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
712  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
713  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
714  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
715  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
716  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
717  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
718  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
719  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
720  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
721  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
722  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
723  2, 2, 2, 2, 2, 2, 1, 2, 9, 10,
724  11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
725  21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
726  31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
727  41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
728  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
729  61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
730  71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
731  81, 82, 83, 84, 85, 97
732 };
733 
734 #if OCTAVE_DEBUG
735  /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
736 static const yytype_uint16 yyrline[] =
737 {
738  0, 389, 389, 395, 402, 409, 415, 419, 421, 426,
739  427, 431, 435, 437, 441, 443, 445, 457, 468, 470,
740  481, 489, 498, 506, 508, 512, 514, 516, 520, 524,
741  526, 540, 544, 546, 565, 566, 568, 570, 572, 574,
742  578, 585, 592, 594, 596, 598, 603, 605, 607, 609,
743  613, 622, 630, 632, 634, 636, 641, 646, 653, 660,
744  662, 664, 666, 675, 684, 693, 702, 704, 706, 708,
745  710, 712, 714, 716, 718, 720, 722, 724, 726, 728,
746  730, 732, 734, 736, 738, 740, 742, 746, 748, 750,
747  752, 761, 770, 779, 788, 790, 792, 794, 796, 798,
748  800, 804, 808, 810, 823, 825, 827, 829, 831, 833,
749  835, 837, 839, 841, 843, 847, 861, 863, 865, 867,
750  869, 871, 873, 875, 877, 879, 881, 883, 885, 889,
751  904, 911, 919, 921, 923, 925, 927, 929, 931, 939,
752  944, 951, 953, 961, 966, 968, 981, 983, 991, 1001,
753  1003, 1010, 1018, 1025, 1036, 1049, 1062, 1063, 1065, 1067,
754  1074, 1076, 1083, 1092, 1105, 1117, 1124, 1136, 1148, 1160,
755  1178, 1180, 1182, 1190, 1203, 1216, 1233, 1265, 1279, 1287,
756  1294, 1303, 1304, 1320, 1322, 1329, 1331, 1339, 1345, 1363,
757  1380, 1382, 1393, 1419, 1435, 1444, 1450, 1460, 1469, 1478,
758  1489, 1507, 1513, 1521, 1534, 1574, 1587, 1600, 1615, 1616,
759  1620, 1622, 1629, 1631, 1638, 1648, 1649, 1654, 1653, 1662,
760  1661, 1674, 1678, 1680, 1682, 1684, 1686, 1693, 1700, 1707,
761  1717, 1729, 1743, 1745, 1754, 1756, 1765, 1777, 1791, 1796,
762  1803, 1806, 1805, 1820, 1822, 1826, 1834, 1848, 1860, 1873,
763  1875, 1884, 1888, 1900, 1913, 1915, 1924, 1933, 1940, 1943,
764  1949, 1953, 1955, 1957, 1959, 1964, 1965, 1970, 1971, 1975,
765  1977, 1981, 1983, 1985, 1987, 1989, 1991, 1996, 1997
766 };
767 #endif
768 
769 #if OCTAVE_DEBUG || YYERROR_VERBOSE || 0
770 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
771  First, the terminals, then, starting at YYNTOKENS, nonterminals. */
772 static const char *const yytname[] =
773 {
774  "$end", "error", "$undefined", "'='", "':'", "'-'", "'+'", "'*'", "'/'",
775  "ADD_EQ", "SUB_EQ", "MUL_EQ", "DIV_EQ", "LEFTDIV_EQ", "POW_EQ",
776  "EMUL_EQ", "EDIV_EQ", "ELEFTDIV_EQ", "EPOW_EQ", "AND_EQ", "OR_EQ",
777  "EXPR_AND_AND", "EXPR_OR_OR", "EXPR_AND", "EXPR_OR", "EXPR_NOT",
778  "EXPR_LT", "EXPR_LE", "EXPR_EQ", "EXPR_NE", "EXPR_GE", "EXPR_GT",
779  "LEFTDIV", "EMUL", "EDIV", "ELEFTDIV", "EPLUS", "EMINUS", "HERMITIAN",
780  "TRANSPOSE", "PLUS_PLUS", "MINUS_MINUS", "POW", "EPOW", "NUM",
781  "IMAG_NUM", "STRUCT_ELT", "NAME", "END", "DQ_STRING", "SQ_STRING", "FOR",
782  "PARFOR", "WHILE", "DO", "UNTIL", "IF", "ELSEIF", "ELSE", "SWITCH",
783  "CASE", "OTHERWISE", "BREAK", "CONTINUE", "FUNC_RET", "UNWIND",
784  "CLEANUP", "TRY", "CATCH", "GLOBAL", "PERSISTENT", "FCN_HANDLE",
785  "CLASSDEF", "PROPERTIES", "METHODS", "EVENTS", "ENUMERATION",
786  "METAQUERY", "SUPERCLASSREF", "FQ_IDENT", "GET", "SET", "FCN",
787  "LEXICAL_ERROR", "END_OF_INPUT", "INPUT_FILE", "'('", "')'", "'['",
788  "']'", "'{'", "'}'", "'.'", "','", "';'", "'@'", "'\\n'", "UNARY",
789  "$accept", "input", "simple_list", "simple_list1", "opt_list", "list",
790  "list1", "statement", "word_list_cmd", "word_list", "identifier",
791  "superclass_identifier", "meta_identifier", "string", "constant",
792  "matrix", "matrix_rows", "cell", "cell_rows", "cell_or_matrix_row",
793  "fcn_handle", "anon_fcn_handle", "primary_expr", "magic_colon",
794  "magic_tilde", "arg_list", "indirect_ref_op", "oper_expr", "power_expr",
795  "colon_expr", "colon_expr1", "simple_expr", "assign_lhs", "assign_expr",
796  "expression", "command", "declaration", "decl1", "decl_param_init",
797  "decl2", "select_command", "if_command", "if_cmd_list", "if_cmd_list1",
798  "elseif_clause", "else_clause", "switch_command", "case_list",
799  "case_list1", "switch_case", "default_case", "loop_command",
800  "jump_command", "except_command", "push_fcn_symtab", "param_list_beg",
801  "param_list_end", "param_list", "param_list1", "param_list2",
802  "param_list_elt", "return_list", "return_list1", "file", "function_beg",
803  "function", "fcn_name", "function1", "function2", "function_end",
804  "classdef_beg", "classdef", "opt_attr_list", "attr_list", "attr",
805  "opt_superclass_list", "superclass_list", "$@1", "$@2", "superclass",
806  "class_body", "properties_block", "property_list", "class_property",
807  "methods_block", "method_decl1", "method_decl", "$@3", "method",
808  "methods_list", "events_block", "events_list", "class_event",
809  "enum_block", "enum_list", "class_enum", "stmt_begin", "stash_comment",
810  "parse_error", "sep_no_nl", "opt_sep_no_nl", "opt_nl", "nl", "sep",
811  "opt_sep", YY_NULLPTR
812 };
813 #endif
814 
815 # ifdef YYPRINT
816 /* YYTOKNUM[NUM] -- (External) token number corresponding to the
817  (internal) symbol number NUM (which must be that of a token). */
818 static const yytype_uint16 yytoknum[] =
819 {
820  0, 256, 257, 61, 58, 45, 43, 42, 47, 258,
821  259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
822  269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
823  279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
824  289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
825  299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
826  309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
827  319, 320, 321, 322, 323, 324, 325, 326, 327, 328,
828  329, 330, 331, 332, 333, 334, 40, 41, 91, 93,
829  123, 125, 46, 44, 59, 64, 10, 335
830 };
831 # endif
832 
833 #define YYPACT_NINF -413
834 
835 #define yypact_value_is_default(Yystate) \
836  (!!((Yystate) == (-413)))
837 
838 #define YYTABLE_NINF -266
839 
840 #define yytable_value_is_error(Yytable_value) \
841  0
842 
843  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
844  STATE-NUM. */
845 static const yytype_int16 yypact[] =
846 {
847  554, -413, 1173, 1173, 1173, 1173, 1173, -413, -413, -413,
848  -413, -413, -413, -413, -413, -413, -413, -413, -413, -413,
849  -413, -413, -413, 16, 16, -413, -413, -413, -5, 1194,
850  415, 415, -413, -413, 28, 72, -30, -47, -413, -413,
851  165, -413, -413, -413, -413, -413, -413, -413, -413, -413,
852  1348, -413, 89, 1432, 905, -413, -413, -413, -413, -413,
853  -413, -413, -413, -413, -413, 34, -413, -413, -413, -413,
854  110, -413, 31, -413, 127, 127, 127, 127, 127, 1250,
855  1271, 1194, 59, 1194, 1194, 59, 59, 147, 16, -413,
856  16, -413, 973, 68, 86, -413, 1173, 851, -39, -413,
857  -413, -413, 100, -413, 91, -413, -413, -413, 20, -413,
858  -413, -413, -413, 907, -413, 165, -413, 1173, 1173, 1173,
859  1173, 1173, 1173, 1173, 1173, 1173, 1173, -413, -413, -413,
860  -413, 1327, 1327, 687, 713, -413, -4, 1173, 1173, 1173,
861  1173, 1173, 1173, 1173, 1173, 1173, 1173, 1173, 1194, 1194,
862  1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194, 1194,
863  1194, -413, -10, -413, -413, 1194, 323, 193, 1194, 197,
864  -413, -413, -413, -413, 129, 1041, -413, 168, 181, 59,
865  1041, 1041, -413, -413, -413, 136, -413, 59, -413, -413,
866  59, -413, -413, 143, -413, 415, 851, -413, 415, -413,
867  -413, -413, -413, 153, 161, -413, 1107, -413, -413, 1386,
868  1386, 127, 127, 127, 127, 127, 127, 1386, 1386, 1327,
869  1327, 1327, 1327, 1327, -413, -11, -11, -413, 11, -413,
870  10, -413, 1194, 1348, 333, 221, 249, 240, -413, -413,
871  -413, -413, -413, -413, -413, -413, -413, -413, -413, -413,
872  -413, -413, -413, -413, -413, -413, -413, 173, 191, -13,
873  283, 286, 98, -413, 1470, 1194, 1488, 1194, 59, -413,
874  -413, -413, 236, 59, -413, -413, -413, -413, -413, 196,
875  229, 95, 1194, -413, 620, -413, 212, 217, 851, -413,
876  -413, -413, -413, -413, -413, -413, 36, -413, -11, -11,
877  -11, -11, -11, -413, -413, 775, 789, 3, -413, 851,
878  -413, 223, 16, 16, -413, -413, 49, -12, 59, -413,
879  1041, 1194, -413, 1194, -413, 1041, 1194, 1041, 59, 59,
880  -413, -413, 260, 196, -413, -413, -413, -413, -413, -413,
881  -413, 39, 16, -413, -413, -413, 19, -413, 116, -413,
882  1194, -413, -413, -413, -413, 16, -413, -413, 1041, -7,
883  234, 59, 230, 59, 268, -413, -413, 1194, 1041, 59,
884  59, -413, -413, -413, 59, 59, 16, 319, 108, -413,
885  298, -413, -413, 243, -413, -7, -413, -413, -413, 59,
886  1041, 1194, 1041, -413, -413, -413, 1194, 1041, 1041, 1041,
887  -413, -413, -413, 39, -413, 59, 308, -413, -413, 1041,
888  284, 248, 285, 59, -413, -413, 289, 290, 1194, -413,
889  261, 103, -413, 291, -413, 59, -413, 1041, 59, -413,
890  -413, -413, -413, -413, -413, -413, -413, -413, -413, 59,
891  -413, -413, -413, -413, 261, -413, 1041, -413, 1041, 212,
892  212, 212, 212, 154, -413, 300, -413, 59, 59, 59,
893  59, -413, -413, -413, -413, -413, -413, 246, 5, 257,
894  259, -413, 362, 59, -413, -413, -413, -413, -413, 59,
895  -14, -413, -413, 59, -413, -413, 280, 59, -413, -413,
896  1, 321, 14, 25, 367, -413, 267, 1194, 271, 1194,
897  -413, -413, -413, -413, -413, -413, -413, -413, 287, -413,
898  -413, -413, 16, -413, 292, -413
899 };
900 
901  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
902  Performed when YYTABLE does not specify something else to do. Zero
903  means the default is an error. */
904 static const yytype_uint16 yydefact[] =
905 {
906  0, 260, 0, 0, 0, 0, 0, 25, 26, 20,
907  23, 24, 258, 258, 258, 258, 258, 258, 170, 171,
908  172, 258, 258, 0, 0, 22, 21, 259, 267, 0,
909  34, 34, 261, 262, 0, 0, 0, 265, 7, 16,
910  42, 48, 47, 27, 43, 45, 46, 44, 131, 59,
911  102, 104, 101, 129, 0, 130, 14, 15, 132, 133,
912  146, 147, 134, 135, 136, 0, 138, 258, 137, 4,
913  266, 5, 0, 42, 74, 73, 72, 70, 71, 0,
914  0, 0, 277, 0, 0, 277, 277, 144, 139, 141,
915  140, 269, 9, 268, 0, 50, 51, 35, 0, 29,
916  53, 54, 36, 52, 0, 32, 40, 177, 0, 257,
917  1, 3, 2, 266, 6, 17, 18, 0, 0, 0,
918  0, 0, 0, 0, 0, 0, 0, 66, 67, 60,
919  61, 0, 0, 0, 0, 58, 0, 0, 0, 0,
920  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
921  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
922  0, 194, 0, 263, 264, 0, 115, 0, 0, 0,
923  257, 271, 272, 273, 278, 9, 257, 0, 149, 277,
924  9, 9, 143, 142, 205, 0, 10, 277, 12, 258,
925  277, 270, 49, 38, 28, 34, 37, 31, 34, 180,
926  51, 186, 185, 0, 182, 183, 176, 8, 19, 78,
927  77, 79, 80, 85, 83, 84, 86, 81, 82, 0,
928  0, 0, 0, 0, 87, 75, 76, 62, 0, 64,
929  0, 68, 0, 103, 113, 114, 111, 112, 105, 106,
930  107, 110, 108, 109, 116, 117, 118, 119, 120, 121,
931  122, 123, 124, 125, 126, 127, 128, 0, 0, 0,
932  197, 0, 277, 195, 0, 0, 0, 0, 277, 274,
933  275, 276, 0, 277, 148, 258, 258, 152, 150, 156,
934  0, 0, 0, 192, 278, 11, 208, 0, 39, 30,
935  55, 56, 57, 33, 178, 179, 0, 41, 100, 99,
936  98, 96, 97, 88, 89, 0, 0, 0, 63, 0,
937  65, 0, 0, 0, 187, 190, 0, 0, 277, 200,
938  9, 0, 257, 0, 257, 9, 0, 9, 277, 277,
939  258, 258, 0, 158, 160, 157, 258, 175, 258, 145,
940  13, 0, 0, 193, 184, 90, 0, 92, 0, 94,
941  0, 69, 198, 199, 189, 0, 197, 196, 9, 0,
942  0, 277, 116, 277, 0, 165, 151, 0, 9, 277,
943  277, 155, 161, 159, 277, 277, 0, 212, 0, 210,
944  215, 91, 93, 0, 191, 0, 203, 204, 202, 277,
945  9, 0, 9, 164, 257, 154, 0, 9, 9, 9,
946  214, 143, 209, 0, 217, 277, 216, 95, 201, 9,
947  0, 0, 0, 277, 257, 163, 0, 0, 0, 211,
948  0, 0, 219, 0, 166, 277, 168, 9, 277, 173,
949  174, 213, 221, 218, 207, 258, 258, 258, 258, 277,
950  222, 223, 224, 225, 0, 167, 9, 153, 9, 208,
951  208, 208, 208, 0, 220, 0, 162, 277, 277, 277,
952  277, 206, 226, 227, 228, 229, 169, 0, 258, 0,
953  0, 231, 234, 277, 232, 237, 244, 243, 245, 277,
954  0, 248, 251, 277, 249, 253, 0, 277, 254, 143,
955  278, 0, 258, 238, 0, 240, 0, 0, 0, 0,
956  233, 230, 236, 246, 239, 241, 247, 250, 0, 252,
957  255, 235, 0, 256, 238, 242
958 };
959 
960  /* YYPGOTO[NTERM-NUM]. */
961 static const yytype_int16 yypgoto[] =
962 {
963  -413, -413, -413, -413, -137, -413, -413, 4, -413, -413,
964  0, -413, -413, -15, -413, -413, -413, -413, -413, -9,
965  -413, -413, -100, -170, -91, -94, -141, 410, -74, -413,
966  -413, 601, -28, -413, -24, -413, -413, 347, -374, -72,
967  -413, -413, -413, -413, -413, -413, -413, -413, -413, 40,
968  44, -413, -413, -413, -413, -413, -413, -25, -413, -413,
969  83, -98, -413, -413, -413, -412, -413, 63, -413, -1,
970  -413, -413, -217, -413, -20, -413, -413, -413, -413, -59,
971  -413, -66, -413, -102, -64, -121, -413, -413, -99, -413,
972  -58, -413, -96, -57, -413, -97, -168, -2, -413, 365,
973  368, -413, -413, -186, 113
974 };
975 
976  /* YYDEFGOTO[NTERM-NUM]. */
977 static const yytype_int16 yydefgoto[] =
978 {
979  -1, 35, 36, 37, 185, 186, 187, 188, 39, 115,
980  73, 41, 42, 43, 44, 45, 98, 46, 104, 99,
981  47, 48, 49, 100, 101, 102, 136, 50, 225, 51,
982  52, 53, 54, 55, 56, 57, 58, 88, 282, 89,
983  59, 60, 177, 178, 277, 278, 61, 332, 333, 334,
984  335, 62, 63, 64, 65, 108, 295, 504, 203, 204,
985  205, 261, 316, 66, 67, 68, 262, 263, 319, 388,
986  189, 190, 342, 378, 379, 405, 406, 420, 444, 433,
987  439, 440, 473, 474, 441, 495, 477, 512, 478, 479,
988  442, 483, 484, 443, 487, 488, 206, 480, 69, 70,
989  71, 92, 93, 174, 175
990 };
991 
992  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
993  positive, shift that token. If negative, reduce the rule whose
994  number is the opposite. If YYTABLE_NINF, syntax error. */
995 static const yytype_int16 yytable[] =
996 {
997  40, 284, 268, 193, 38, 94, 103, 103, 273, 109,
998  79, 80, 81, 82, 83, 84, 183, 201, 183, 85,
999  86, 199, 105, 87, 87, 116, 290, 418, -188, 303,
1000  304, 224, 224, 9, 9, 9, 202, 9, 272, 228,
1001  230, 386, 231, 280, 281, 200, 32, 33, 9, 349,
1002  194, 167, 169, 475, 111, 195, 476, 170, 226, 176,
1003  179, 200, 502, 9, 376, 162, 112, 9, 257, 258,
1004  257, 258, 110, 103, 259, 305, 314, 387, 259, 306,
1005  476, 135, 232, 9, 307, 307, 9, -176, 87, 350,
1006  87, 91, 40, 137, 269, 270, -176, 271, 308, 106,
1007  208, 310, 106, 309, 309, 291, 381, -181, 87, 103,
1008  103, 107, 309, 40, 107, 499, 161, 207, 290, 224,
1009  224, 224, 224, 224, 244, 245, 246, 247, 248, 249,
1010  250, 251, 252, 253, 254, 255, 256, 264, 354, 290,
1011  266, 94, 355, 337, 94, 298, 299, 300, 301, 302,
1012  182, 434, 171, 172, 361, 173, 363, 307, 307, 307,
1013  307, 307, 260, 338, 191, 127, 128, 129, 130, 131,
1014  132, 103, 292, 192, 103, 40, 435, 436, 437, 438,
1015  40, 40, 197, 359, 107, 198, 289, 286, 364, 293,
1016  366, 171, 172, 196, 173, 402, 265, 291, 180, 181,
1017  267, 403, 461, 163, 164, 201, 40, 382, 311, 309,
1018  297, 346, 348, 133, 10, 11, 274, 134, 291, 135,
1019  283, 385, 269, 270, 202, 271, 413, 435, 436, 437,
1020  438, 395, 457, 458, 459, 460, 288, 318, 275, 276,
1021  294, 322, 138, 324, 140, 141, 428, 142, 143, 144,
1022  145, 146, 147, 410, 296, 412, 330, 331, 339, 315,
1023  415, 416, 417, 140, 292, 312, 142, 143, 144, 145,
1024  146, 147, 423, 328, 329, 142, 143, 144, 145, 146,
1025  147, 103, 103, 313, 40, 292, -188, 490, 340, 317,
1026  447, 326, 279, 9, 471, 336, 87, 360, 341, 362,
1027  285, 343, 365, 287, 9, 481, 9, 485, 371, 455,
1028  351, 456, 352, 353, 9, 506, 393, 356, 9, 509,
1029  40, 389, 401, 391, 404, 40, 383, 40, 369, 370,
1030  407, 422, 424, 426, 374, 425, 375, 429, 430, 445,
1031  432, 377, 380, 394, 138, 139, 140, 141, 466, 142,
1032  143, 144, 145, 146, 147, 384, 140, 141, 40, 142,
1033  143, 144, 145, 146, 147, 489, 497, 411, 40, 501,
1034  505, 90, 414, 372, 513, 320, 400, 373, 107, 344,
1035  357, 325, 494, 419, 408, 454, 327, 462, 500, 463,
1036  40, 515, 40, 503, 431, 464, 465, 40, 40, 40,
1037  507, 510, 113, 377, 0, 114, 0, 0, 0, 40,
1038  0, 0, 74, 75, 76, 77, 78, 0, 0, 95,
1039  2, 3, 0, 0, 0, 0, 0, 40, 0, 0,
1040  0, 358, 0, 449, 450, 451, 452, 0, 0, 0,
1041  96, 367, 368, 0, 0, 0, 40, 0, 40, 0,
1042  0, 0, 0, 0, 0, 5, 6, 0, 0, 7,
1043  8, 0, 9, 0, 10, 11, 0, 472, 0, 482,
1044  486, 0, 0, 508, 390, 511, 392, 0, 0, 0,
1045  493, 0, 396, 397, 0, 0, 0, 398, 399, 0,
1046  472, 0, 25, 26, 0, 0, 482, 0, 486, 0,
1047  0, 29, 409, 30, 0, 31, 76, 0, 97, 0,
1048  34, 0, 514, 0, 0, 0, 0, 0, 421, 0,
1049  0, 0, 0, 0, 0, 0, 427, 209, 210, 211,
1050  212, 213, 214, 215, 216, 217, 218, 0, 446, 0,
1051  0, 448, 0, 0, 0, 0, 0, 233, 0, 0,
1052  0, 0, 453, 0, 0, 1, 0, 0, 0, 2,
1053  3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1054  467, 468, 469, 470, 0, 0, 0, 0, 0, 4,
1055  0, 0, 0, 0, 0, 0, 491, 0, 0, 0,
1056  0, 0, 492, 0, 5, 6, 496, 0, 7, 8,
1057  498, 9, 0, 10, 11, 12, 13, 14, 15, 0,
1058  16, 0, 0, 17, 0, 0, 18, 19, 20, 21,
1059  0, 22, 0, 23, 24, 2, 3, 0, 0, 0,
1060  0, 25, 26, 0, 0, 0, -176, 27, -265, 28,
1061  29, 0, 30, 0, 31, 4, 0, 32, 33, 34,
1062  -265, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1063  5, 6, 0, 0, 7, 8, 0, 9, 0, 10,
1064  11, 12, 13, 14, 15, 0, 16, 0, 0, 17,
1065  166, 166, 18, 19, 20, 21, 0, 22, 0, 23,
1066  24, 95, 2, 3, 0, 0, 0, 25, 26, 0,
1067  0, 0, -176, 0, 0, 28, 29, 0, 30, 0,
1068  31, 0, 96, 269, 270, 34, 271, 95, 2, 3,
1069  0, 0, 0, 0, 0, 0, 0, 5, 6, 0,
1070  0, 7, 8, 0, 9, 0, 10, 11, 96, 234,
1071  235, 236, 237, 238, 239, 240, 241, 242, 243, 0,
1072  0, 0, 0, 5, 6, 0, 0, 7, 8, 0,
1073  9, 0, 10, 11, 25, 26, 0, 0, 0, 0,
1074  0, 0, 0, 29, 227, 30, 0, 31, 0, 95,
1075  2, 3, 34, 0, 0, 0, 0, 0, 0, 0,
1076  25, 26, 0, 95, 2, 3, 0, 0, 0, 29,
1077  96, 30, 0, 31, 229, 0, 0, 0, 34, 0,
1078  0, 0, 0, 0, 96, 5, 6, 0, 0, 7,
1079  8, 0, 9, 0, 10, 11, 0, 0, 0, 5,
1080  6, 0, 0, 7, 8, 0, 9, 0, 10, 11,
1081  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1082  0, 0, 25, 26, 0, 95, 2, 3, 0, 0,
1083  0, 29, 345, 30, 0, 31, 25, 26, 0, 0,
1084  34, 0, 0, 0, 0, 29, 96, 30, 0, 31,
1085  347, 0, 0, 0, 34, 0, 0, 0, 0, 0,
1086  0, 5, 6, 0, 0, 7, 8, 0, 9, 0,
1087  10, 11, 0, 0, 0, 0, 0, 0, 148, 0,
1088  0, 0, 2, 3, 149, 150, 151, 152, 153, 154,
1089  155, 156, 157, 158, 159, 160, 0, 0, 25, 26,
1090  0, 0, 4, 0, 0, 0, 0, 29, 0, 30,
1091  0, 31, 0, 0, 0, 0, 34, 5, 6, 0,
1092  0, 7, 8, 0, 9, 0, 10, 11, 12, 13,
1093  14, 15, 0, 16, 0, 0, 17, 0, 0, 18,
1094  19, 20, 21, 0, 22, 0, 23, 24, 2, 3,
1095  0, 0, 0, 0, 25, 26, 0, 0, 0, -176,
1096  0, 0, 28, 29, 0, 30, 0, 31, 4, 0,
1097  163, 164, 34, 0, 0, 0, 0, 0, 0, 0,
1098  0, 0, 0, 5, 6, 0, 0, 7, 8, 0,
1099  9, 0, 10, 11, 12, 13, 14, 15, 0, 16,
1100  0, 0, 17, 0, 0, 18, 19, 20, 21, 0,
1101  22, 0, 23, 24, 0, 184, 2, 3, 0, 0,
1102  25, 26, 0, 0, 0, -176, 0, 0, 28, 29,
1103  0, 30, 0, 31, 0, 0, 4, 0, 34, 0,
1104  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1105  0, 5, 6, 0, 0, 7, 8, 0, 9, 0,
1106  10, 11, 12, 13, 14, 15, 0, 16, 0, 0,
1107  17, 0, 0, 18, 19, 20, 21, 0, 22, 0,
1108  23, 24, 2, 3, 0, 0, 0, 0, 25, 26,
1109  0, 0, 0, -176, 0, 0, 28, 29, 0, 30,
1110  0, 31, 4, 0, 0, 0, 34, 0, 0, 0,
1111  0, 0, 0, 0, 0, 0, 0, 5, 6, 0,
1112  0, 7, 8, 0, 9, 0, 10, 11, 12, 13,
1113  14, 15, 0, 16, 0, 0, 17, 0, 0, 18,
1114  19, 20, 21, 0, 22, 0, 23, 24, 2, 3,
1115  0, 0, 0, 0, 25, 26, 0, 0, 0, 0,
1116  0, 0, 28, 29, 0, 30, 0, 31, 4, 2,
1117  3, 0, 34, 0, 0, 0, 0, 0, 0, 0,
1118  0, 0, 0, 5, 6, 0, 0, 7, 8, 4,
1119  9, 0, 10, 11, 0, 0, 0, 0, 0, 0,
1120  0, 0, 0, 0, 5, 6, 0, 0, 7, 8,
1121  0, 9, 0, 10, 11, 0, 0, 0, 0, 0,
1122  25, 26, 0, 0, 0, 2, 3, 0, 0, 29,
1123  0, 30, 0, 31, 0, 0, 0, 0, 72, 0,
1124  0, 25, 26, 0, 0, 4, 2, 3, 0, 0,
1125  29, 0, 30, 0, 31, 0, 0, 0, 0, 34,
1126  5, 6, 0, 0, 7, 8, 4, 9, 0, 10,
1127  11, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1128  0, 5, 6, 0, 0, 7, 8, 0, 9, 0,
1129  10, 11, 0, 0, 0, 0, 0, 25, 26, 0,
1130  0, 0, 219, 220, 0, 0, 165, 0, 30, 0,
1131  31, 0, 0, 0, 0, 72, 0, 0, 25, 26,
1132  0, 0, 221, 117, 118, 119, 120, 168, 0, 30,
1133  0, 31, 0, 0, 0, 0, 72, 222, 223, 0,
1134  0, 7, 8, 0, 9, 0, 10, 11, 0, 0,
1135  121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
1136  131, 132, 0, 119, 120, 0, 0, 0, 0, 0,
1137  0, 0, 0, 0, 25, 26, 0, 0, 0, 0,
1138  0, 0, 0, 29, 0, 30, 0, 31, 121, 122,
1139  123, 124, 72, 0, 127, 128, 129, 130, 131, 132,
1140  0, 0, 0, 0, 133, -115, 0, 0, 134, 0,
1141  135, -115, -115, -115, -115, -115, -115, -115, -115, -115,
1142  -115, -115, -115, 138, 139, 140, 141, 0, 142, 143,
1143  144, 145, 146, 147, 0, 0, 0, 0, 0, 0,
1144  0, 0, 133, 321, 0, 0, 134, 0, 135, 149,
1145  150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
1146  160, 323, 0, 0, 0, 0, 0, 149, 150, 151,
1147  152, 153, 154, 155, 156, 157, 158, 159, 160
1148 };
1149 
1150 static const yytype_int16 yycheck[] =
1151 {
1152  0, 187, 170, 97, 0, 29, 30, 31, 176, 34,
1153  12, 13, 14, 15, 16, 17, 88, 108, 90, 21,
1154  22, 1, 31, 23, 24, 40, 196, 401, 3, 40,
1155  41, 131, 132, 47, 47, 47, 108, 47, 175, 133,
1156  134, 48, 46, 180, 181, 25, 93, 94, 47, 46,
1157  89, 79, 80, 48, 84, 94, 468, 81, 132, 83,
1158  84, 25, 48, 47, 25, 67, 96, 47, 80, 81,
1159  80, 81, 0, 97, 88, 86, 89, 84, 88, 90,
1160  492, 92, 86, 47, 225, 226, 47, 82, 88, 86,
1161  90, 96, 92, 4, 93, 94, 82, 96, 87, 71,
1162  115, 91, 71, 93, 93, 196, 87, 87, 108, 133,
1163  134, 86, 93, 113, 86, 489, 82, 113, 288, 219,
1164  220, 221, 222, 223, 148, 149, 150, 151, 152, 153,
1165  154, 155, 156, 157, 158, 159, 160, 165, 89, 309,
1166  168, 165, 93, 48, 168, 219, 220, 221, 222, 223,
1167  3, 48, 93, 94, 322, 96, 324, 298, 299, 300,
1168  301, 302, 162, 68, 96, 38, 39, 40, 41, 42,
1169  43, 195, 196, 87, 198, 175, 73, 74, 75, 76,
1170  180, 181, 91, 320, 86, 94, 195, 189, 325, 198,
1171  327, 93, 94, 93, 96, 87, 3, 288, 85, 86,
1172  3, 93, 48, 93, 94, 296, 206, 91, 232, 93,
1173  206, 305, 306, 86, 49, 50, 48, 90, 309, 92,
1174  84, 358, 93, 94, 296, 96, 394, 73, 74, 75,
1175  76, 368, 449, 450, 451, 452, 93, 262, 57, 58,
1176  87, 265, 21, 267, 23, 24, 414, 26, 27, 28,
1177  29, 30, 31, 390, 93, 392, 60, 61, 282, 259,
1178  397, 398, 399, 23, 288, 92, 26, 27, 28, 29,
1179  30, 31, 409, 275, 276, 26, 27, 28, 29, 30,
1180  31, 305, 306, 92, 284, 309, 3, 473, 284, 3,
1181  427, 55, 179, 47, 48, 66, 296, 321, 86, 323,
1182  187, 84, 326, 190, 47, 48, 47, 48, 48, 446,
1183  87, 448, 312, 313, 47, 48, 48, 317, 47, 48,
1184  320, 87, 3, 93, 26, 325, 350, 327, 330, 331,
1185  87, 23, 48, 48, 336, 87, 338, 48, 48, 48,
1186  79, 341, 342, 367, 21, 22, 23, 24, 48, 26,
1187  27, 28, 29, 30, 31, 355, 23, 24, 358, 26,
1188  27, 28, 29, 30, 31, 3, 86, 391, 368, 48,
1189  3, 24, 396, 333, 87, 262, 376, 333, 86, 296,
1190  317, 268, 480, 403, 385, 444, 273, 453, 490, 453,
1191  390, 512, 392, 492, 418, 453, 453, 397, 398, 399,
1192  496, 498, 37, 403, -1, 37, -1, -1, -1, 409,
1193  -1, -1, 2, 3, 4, 5, 6, -1, -1, 4,
1194  5, 6, -1, -1, -1, -1, -1, 427, -1, -1,
1195  -1, 318, -1, 435, 436, 437, 438, -1, -1, -1,
1196  25, 328, 329, -1, -1, -1, 446, -1, 448, -1,
1197  -1, -1, -1, -1, -1, 40, 41, -1, -1, 44,
1198  45, -1, 47, -1, 49, 50, -1, 467, -1, 469,
1199  470, -1, -1, 497, 361, 499, 363, -1, -1, -1,
1200  480, -1, 369, 370, -1, -1, -1, 374, 375, -1,
1201  490, -1, 77, 78, -1, -1, 496, -1, 498, -1,
1202  -1, 86, 389, 88, -1, 90, 96, -1, 93, -1,
1203  95, -1, 512, -1, -1, -1, -1, -1, 405, -1,
1204  -1, -1, -1, -1, -1, -1, 413, 117, 118, 119,
1205  120, 121, 122, 123, 124, 125, 126, -1, 425, -1,
1206  -1, 428, -1, -1, -1, -1, -1, 137, -1, -1,
1207  -1, -1, 439, -1, -1, 1, -1, -1, -1, 5,
1208  6, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1209  457, 458, 459, 460, -1, -1, -1, -1, -1, 25,
1210  -1, -1, -1, -1, -1, -1, 473, -1, -1, -1,
1211  -1, -1, 479, -1, 40, 41, 483, -1, 44, 45,
1212  487, 47, -1, 49, 50, 51, 52, 53, 54, -1,
1213  56, -1, -1, 59, -1, -1, 62, 63, 64, 65,
1214  -1, 67, -1, 69, 70, 5, 6, -1, -1, -1,
1215  -1, 77, 78, -1, -1, -1, 82, 83, 84, 85,
1216  86, -1, 88, -1, 90, 25, -1, 93, 94, 95,
1217  96, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1218  40, 41, -1, -1, 44, 45, -1, 47, -1, 49,
1219  50, 51, 52, 53, 54, -1, 56, -1, -1, 59,
1220  79, 80, 62, 63, 64, 65, -1, 67, -1, 69,
1221  70, 4, 5, 6, -1, -1, -1, 77, 78, -1,
1222  -1, -1, 82, -1, -1, 85, 86, -1, 88, -1,
1223  90, -1, 25, 93, 94, 95, 96, 4, 5, 6,
1224  -1, -1, -1, -1, -1, -1, -1, 40, 41, -1,
1225  -1, 44, 45, -1, 47, -1, 49, 50, 25, 138,
1226  139, 140, 141, 142, 143, 144, 145, 146, 147, -1,
1227  -1, -1, -1, 40, 41, -1, -1, 44, 45, -1,
1228  47, -1, 49, 50, 77, 78, -1, -1, -1, -1,
1229  -1, -1, -1, 86, 87, 88, -1, 90, -1, 4,
1230  5, 6, 95, -1, -1, -1, -1, -1, -1, -1,
1231  77, 78, -1, 4, 5, 6, -1, -1, -1, 86,
1232  25, 88, -1, 90, 91, -1, -1, -1, 95, -1,
1233  -1, -1, -1, -1, 25, 40, 41, -1, -1, 44,
1234  45, -1, 47, -1, 49, 50, -1, -1, -1, 40,
1235  41, -1, -1, 44, 45, -1, 47, -1, 49, 50,
1236  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1237  -1, -1, 77, 78, -1, 4, 5, 6, -1, -1,
1238  -1, 86, 87, 88, -1, 90, 77, 78, -1, -1,
1239  95, -1, -1, -1, -1, 86, 25, 88, -1, 90,
1240  91, -1, -1, -1, 95, -1, -1, -1, -1, -1,
1241  -1, 40, 41, -1, -1, 44, 45, -1, 47, -1,
1242  49, 50, -1, -1, -1, -1, -1, -1, 3, -1,
1243  -1, -1, 5, 6, 9, 10, 11, 12, 13, 14,
1244  15, 16, 17, 18, 19, 20, -1, -1, 77, 78,
1245  -1, -1, 25, -1, -1, -1, -1, 86, -1, 88,
1246  -1, 90, -1, -1, -1, -1, 95, 40, 41, -1,
1247  -1, 44, 45, -1, 47, -1, 49, 50, 51, 52,
1248  53, 54, -1, 56, -1, -1, 59, -1, -1, 62,
1249  63, 64, 65, -1, 67, -1, 69, 70, 5, 6,
1250  -1, -1, -1, -1, 77, 78, -1, -1, -1, 82,
1251  -1, -1, 85, 86, -1, 88, -1, 90, 25, -1,
1252  93, 94, 95, -1, -1, -1, -1, -1, -1, -1,
1253  -1, -1, -1, 40, 41, -1, -1, 44, 45, -1,
1254  47, -1, 49, 50, 51, 52, 53, 54, -1, 56,
1255  -1, -1, 59, -1, -1, 62, 63, 64, 65, -1,
1256  67, -1, 69, 70, -1, 72, 5, 6, -1, -1,
1257  77, 78, -1, -1, -1, 82, -1, -1, 85, 86,
1258  -1, 88, -1, 90, -1, -1, 25, -1, 95, -1,
1259  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1260  -1, 40, 41, -1, -1, 44, 45, -1, 47, -1,
1261  49, 50, 51, 52, 53, 54, -1, 56, -1, -1,
1262  59, -1, -1, 62, 63, 64, 65, -1, 67, -1,
1263  69, 70, 5, 6, -1, -1, -1, -1, 77, 78,
1264  -1, -1, -1, 82, -1, -1, 85, 86, -1, 88,
1265  -1, 90, 25, -1, -1, -1, 95, -1, -1, -1,
1266  -1, -1, -1, -1, -1, -1, -1, 40, 41, -1,
1267  -1, 44, 45, -1, 47, -1, 49, 50, 51, 52,
1268  53, 54, -1, 56, -1, -1, 59, -1, -1, 62,
1269  63, 64, 65, -1, 67, -1, 69, 70, 5, 6,
1270  -1, -1, -1, -1, 77, 78, -1, -1, -1, -1,
1271  -1, -1, 85, 86, -1, 88, -1, 90, 25, 5,
1272  6, -1, 95, -1, -1, -1, -1, -1, -1, -1,
1273  -1, -1, -1, 40, 41, -1, -1, 44, 45, 25,
1274  47, -1, 49, 50, -1, -1, -1, -1, -1, -1,
1275  -1, -1, -1, -1, 40, 41, -1, -1, 44, 45,
1276  -1, 47, -1, 49, 50, -1, -1, -1, -1, -1,
1277  77, 78, -1, -1, -1, 5, 6, -1, -1, 86,
1278  -1, 88, -1, 90, -1, -1, -1, -1, 95, -1,
1279  -1, 77, 78, -1, -1, 25, 5, 6, -1, -1,
1280  86, -1, 88, -1, 90, -1, -1, -1, -1, 95,
1281  40, 41, -1, -1, 44, 45, 25, 47, -1, 49,
1282  50, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1283  -1, 40, 41, -1, -1, 44, 45, -1, 47, -1,
1284  49, 50, -1, -1, -1, -1, -1, 77, 78, -1,
1285  -1, -1, 5, 6, -1, -1, 86, -1, 88, -1,
1286  90, -1, -1, -1, -1, 95, -1, -1, 77, 78,
1287  -1, -1, 25, 5, 6, 7, 8, 86, -1, 88,
1288  -1, 90, -1, -1, -1, -1, 95, 40, 41, -1,
1289  -1, 44, 45, -1, 47, -1, 49, 50, -1, -1,
1290  32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
1291  42, 43, -1, 7, 8, -1, -1, -1, -1, -1,
1292  -1, -1, -1, -1, 77, 78, -1, -1, -1, -1,
1293  -1, -1, -1, 86, -1, 88, -1, 90, 32, 33,
1294  34, 35, 95, -1, 38, 39, 40, 41, 42, 43,
1295  -1, -1, -1, -1, 86, 3, -1, -1, 90, -1,
1296  92, 9, 10, 11, 12, 13, 14, 15, 16, 17,
1297  18, 19, 20, 21, 22, 23, 24, -1, 26, 27,
1298  28, 29, 30, 31, -1, -1, -1, -1, -1, -1,
1299  -1, -1, 86, 3, -1, -1, 90, -1, 92, 9,
1300  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1301  20, 3, -1, -1, -1, -1, -1, 9, 10, 11,
1302  12, 13, 14, 15, 16, 17, 18, 19, 20
1303 };
1304 
1305  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
1306  symbol of state STATE-NUM. */
1307 static const yytype_uint8 yystos[] =
1308 {
1309  0, 1, 5, 6, 25, 40, 41, 44, 45, 47,
1310  49, 50, 51, 52, 53, 54, 56, 59, 62, 63,
1311  64, 65, 67, 69, 70, 77, 78, 83, 85, 86,
1312  88, 90, 93, 94, 95, 99, 100, 101, 105, 106,
1313  108, 109, 110, 111, 112, 113, 115, 118, 119, 120,
1314  125, 127, 128, 129, 130, 131, 132, 133, 134, 138,
1315  139, 144, 149, 150, 151, 152, 161, 162, 163, 196,
1316  197, 198, 95, 108, 125, 125, 125, 125, 125, 195,
1317  195, 195, 195, 195, 195, 195, 195, 108, 135, 137,
1318  135, 96, 199, 200, 132, 4, 25, 93, 114, 117,
1319  121, 122, 123, 132, 116, 117, 71, 86, 153, 155,
1320  0, 84, 96, 197, 198, 107, 111, 5, 6, 7,
1321  8, 32, 33, 34, 35, 36, 37, 38, 39, 40,
1322  41, 42, 43, 86, 90, 92, 124, 4, 21, 22,
1323  23, 24, 26, 27, 28, 29, 30, 31, 3, 9,
1324  10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1325  20, 82, 195, 93, 94, 86, 129, 130, 86, 130,
1326  132, 93, 94, 96, 201, 202, 132, 140, 141, 132,
1327  202, 202, 3, 137, 72, 102, 103, 104, 105, 168,
1328  169, 96, 87, 123, 89, 94, 93, 91, 94, 1,
1329  25, 122, 137, 156, 157, 158, 194, 105, 111, 125,
1330  125, 125, 125, 125, 125, 125, 125, 125, 125, 5,
1331  6, 25, 40, 41, 120, 126, 126, 87, 123, 91,
1332  123, 46, 86, 125, 129, 129, 129, 129, 129, 129,
1333  129, 129, 129, 129, 132, 132, 132, 132, 132, 132,
1334  132, 132, 132, 132, 132, 132, 132, 80, 81, 88,
1335  108, 159, 164, 165, 130, 3, 130, 3, 194, 93,
1336  94, 96, 102, 194, 48, 57, 58, 142, 143, 202,
1337  102, 102, 136, 84, 201, 202, 195, 202, 93, 117,
1338  121, 122, 132, 117, 87, 154, 93, 105, 126, 126,
1339  126, 126, 126, 40, 41, 86, 90, 124, 87, 93,
1340  91, 132, 92, 92, 89, 108, 160, 3, 155, 166,
1341  202, 3, 132, 3, 132, 202, 55, 202, 195, 195,
1342  60, 61, 145, 146, 147, 148, 66, 48, 68, 132,
1343  105, 86, 170, 84, 158, 87, 123, 91, 123, 46,
1344  86, 87, 108, 108, 89, 93, 108, 165, 202, 102,
1345  132, 194, 132, 194, 102, 132, 102, 202, 202, 195,
1346  195, 48, 147, 148, 195, 195, 25, 108, 171, 172,
1347  108, 87, 91, 132, 108, 102, 48, 84, 167, 87,
1348  202, 93, 202, 48, 132, 102, 202, 202, 202, 202,
1349  108, 3, 87, 93, 26, 173, 174, 87, 167, 202,
1350  102, 132, 102, 194, 132, 102, 102, 102, 136, 172,
1351  175, 202, 23, 102, 48, 87, 48, 202, 194, 48,
1352  48, 132, 79, 177, 48, 73, 74, 75, 76, 178,
1353  179, 182, 188, 191, 176, 48, 202, 102, 202, 195,
1354  195, 195, 195, 202, 177, 102, 102, 170, 170, 170,
1355  170, 48, 179, 182, 188, 191, 48, 202, 202, 202,
1356  202, 48, 108, 180, 181, 48, 163, 184, 186, 187,
1357  195, 48, 108, 189, 190, 48, 108, 192, 193, 3,
1358  201, 202, 202, 108, 159, 183, 202, 86, 202, 136,
1359  181, 48, 48, 186, 155, 3, 48, 190, 132, 48,
1360  193, 132, 185, 87, 108, 183
1361 };
1362 
1363  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
1364 static const yytype_uint8 yyr1[] =
1365 {
1366  0, 98, 99, 99, 99, 100, 100, 101, 101, 102,
1367  102, 103, 104, 104, 105, 105, 105, 106, 107, 107,
1368  108, 109, 110, 111, 111, 112, 112, 112, 113, 114,
1369  114, 115, 116, 116, 117, 117, 117, 117, 117, 117,
1370  118, 119, 120, 120, 120, 120, 120, 120, 120, 120,
1371  121, 122, 123, 123, 123, 123, 123, 123, 124, 125,
1372  125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
1373  125, 125, 125, 125, 125, 125, 125, 125, 125, 125,
1374  125, 125, 125, 125, 125, 125, 125, 126, 126, 126,
1375  126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
1376  126, 127, 128, 128, 129, 129, 129, 129, 129, 129,
1377  129, 129, 129, 129, 129, 130, 131, 131, 131, 131,
1378  131, 131, 131, 131, 131, 131, 131, 131, 131, 132,
1379  132, 132, 133, 133, 133, 133, 133, 133, 133, 134,
1380  134, 135, 135, 136, 137, 137, 138, 138, 139, 140,
1381  140, 141, 141, 142, 143, 144, 145, 145, 145, 145,
1382  146, 146, 147, 148, 149, 149, 149, 149, 149, 149,
1383  150, 150, 150, 151, 151, 151, 152, 153, 154, 155,
1384  155, 156, 156, 157, 157, 158, 158, 159, 159, 159,
1385  160, 160, 161, 161, 162, 163, 163, 164, 164, 164,
1386  165, 166, 166, 167, 167, 168, 169, 169, 170, 170,
1387  171, 171, 172, 172, 172, 173, 173, 175, 174, 176,
1388  174, 177, 178, 178, 178, 178, 178, 178, 178, 178,
1389  179, 179, 180, 180, 181, 181, 182, 182, 183, 183,
1390  184, 185, 184, 186, 186, 187, 187, 188, 188, 189,
1391  189, 190, 191, 191, 192, 192, 193, 194, 195, 196,
1392  196, 197, 197, 197, 197, 198, 198, 199, 199, 200,
1393  200, 201, 201, 201, 201, 201, 201, 202, 202
1394 };
1395 
1396  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
1397 static const yytype_uint8 yyr2[] =
1398 {
1399  0, 2, 2, 2, 1, 1, 2, 1, 3, 0,
1400  1, 2, 1, 3, 1, 1, 1, 2, 1, 2,
1401  1, 1, 1, 1, 1, 1, 1, 1, 3, 1,
1402  3, 3, 1, 3, 0, 1, 1, 2, 2, 3,
1403  2, 4, 1, 1, 1, 1, 1, 1, 1, 3,
1404  1, 1, 1, 1, 1, 3, 3, 3, 1, 1,
1405  2, 2, 3, 4, 3, 4, 2, 2, 3, 5,
1406  2, 2, 2, 2, 2, 3, 3, 3, 3, 3,
1407  3, 3, 3, 3, 3, 3, 3, 1, 2, 2,
1408  3, 4, 3, 4, 3, 5, 2, 2, 2, 2,
1409  2, 1, 1, 3, 1, 3, 3, 3, 3, 3,
1410  3, 3, 3, 3, 3, 1, 3, 3, 3, 3,
1411  3, 3, 3, 3, 3, 3, 3, 3, 3, 1,
1412  1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
1413  2, 1, 2, 0, 1, 4, 1, 1, 4, 1,
1414  2, 4, 2, 7, 4, 6, 0, 1, 1, 2,
1415  1, 2, 7, 4, 7, 6, 9, 10, 9, 12,
1416  1, 1, 1, 9, 9, 5, 0, 1, 1, 3,
1417  2, 0, 1, 1, 3, 1, 1, 2, 1, 3,
1418  1, 3, 4, 5, 2, 3, 5, 1, 3, 3,
1419  2, 4, 3, 1, 1, 1, 9, 7, 0, 3,
1420  1, 3, 1, 4, 2, 0, 1, 0, 3, 0,
1421  4, 1, 1, 1, 1, 1, 3, 3, 3, 3,
1422  7, 5, 1, 3, 1, 4, 7, 5, 1, 2,
1423  2, 0, 5, 1, 1, 1, 3, 7, 5, 1,
1424  3, 1, 7, 5, 1, 3, 4, 0, 0, 1,
1425  1, 1, 1, 2, 2, 0, 1, 0, 1, 1,
1426  2, 1, 1, 1, 2, 2, 2, 0, 1
1427 };
1428 
1429 
1430 #define yyerrok (yyerrstatus = 0)
1431 #define yyclearin (yychar = YYEMPTY)
1432 #define YYEMPTY (-2)
1433 #define YYEOF 0
1434 
1435 #define YYACCEPT goto yyacceptlab
1436 #define YYABORT goto yyabortlab
1437 #define YYERROR goto yyerrorlab
1438 
1439 
1440 #define YYRECOVERING() (!!yyerrstatus)
1441 
1442 #define YYBACKUP(Token, Value) \
1443 do \
1444  if (yychar == YYEMPTY) \
1445  { \
1446  yychar = (Token); \
1447  yylval = (Value); \
1448  YYPOPSTACK (yylen); \
1449  yystate = *yyssp; \
1450  goto yybackup; \
1451  } \
1452  else \
1453  { \
1454  yyerror (parser, YY_("syntax error: cannot back up")); \
1455  YYERROR; \
1456  } \
1457 while (0)
1458 
1459 /* Error token number */
1460 #define YYTERROR 1
1461 #define YYERRCODE 256
1462 
1463 
1464 
1465 /* Enable debugging if requested. */
1466 #if OCTAVE_DEBUG
1467 
1468 # ifndef YYFPRINTF
1469 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1470 # define YYFPRINTF fprintf
1471 # endif
1472 
1473 # define YYDPRINTF(Args) \
1474 do { \
1475  if (yydebug) \
1476  YYFPRINTF Args; \
1477 } while (0)
1478 
1479 /* This macro is provided for backward compatibility. */
1480 #ifndef YY_LOCATION_PRINT
1481 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
1482 #endif
1483 
1484 
1485 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
1486 do { \
1487  if (yydebug) \
1488  { \
1489  YYFPRINTF (stderr, "%s ", Title); \
1490  yy_symbol_print (stderr, \
1491  Type, Value, parser); \
1492  YYFPRINTF (stderr, "\n"); \
1493  } \
1494 } while (0)
1495 
1496 
1497 /*----------------------------------------.
1498 | Print this symbol's value on YYOUTPUT. |
1499 `----------------------------------------*/
1500 
1501 static void
1502 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, octave::base_parser& parser)
1503 {
1504  FILE *yyo = yyoutput;
1505  YYUSE (yyo);
1506  YYUSE (parser);
1507  if (!yyvaluep)
1508  return;
1509 # ifdef YYPRINT
1510  if (yytype < YYNTOKENS)
1511  YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
1512 # endif
1513  YYUSE (yytype);
1514 }
1515 
1516 
1517 /*--------------------------------.
1518 | Print this symbol on YYOUTPUT. |
1519 `--------------------------------*/
1520 
1521 static void
1522 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, octave::base_parser& parser)
1523 {
1524  YYFPRINTF (yyoutput, "%s %s (",
1525  yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
1526 
1527  yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
1528  YYFPRINTF (yyoutput, ")");
1529 }
1530 
1531 /*------------------------------------------------------------------.
1532 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1533 | TOP (included). |
1534 `------------------------------------------------------------------*/
1535 
1536 static void
1537 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
1538 {
1539  YYFPRINTF (stderr, "Stack now");
1540  for (; yybottom <= yytop; yybottom++)
1541  {
1542  int yybot = *yybottom;
1543  YYFPRINTF (stderr, " %d", yybot);
1544  }
1545  YYFPRINTF (stderr, "\n");
1546 }
1547 
1548 # define YY_STACK_PRINT(Bottom, Top) \
1549 do { \
1550  if (yydebug) \
1551  yy_stack_print ((Bottom), (Top)); \
1552 } while (0)
1553 
1554 
1555 /*------------------------------------------------.
1556 | Report that the YYRULE is going to be reduced. |
1557 `------------------------------------------------*/
1558 
1559 static void
1560 yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, octave::base_parser& parser)
1561 {
1562  unsigned long int yylno = yyrline[yyrule];
1563  int yynrhs = yyr2[yyrule];
1564  int yyi;
1565  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
1566  yyrule - 1, yylno);
1567  /* The symbols being reduced. */
1568  for (yyi = 0; yyi < yynrhs; yyi++)
1569  {
1570  YYFPRINTF (stderr, " $%d = ", yyi + 1);
1571  yy_symbol_print (stderr,
1572  yystos[yyssp[yyi + 1 - yynrhs]],
1573  &(yyvsp[(yyi + 1) - (yynrhs)])
1574  , parser);
1575  YYFPRINTF (stderr, "\n");
1576  }
1577 }
1578 
1579 # define YY_REDUCE_PRINT(Rule) \
1580 do { \
1581  if (yydebug) \
1582  yy_reduce_print (yyssp, yyvsp, Rule, parser); \
1583 } while (0)
1584 
1585 /* Nonzero means print parse trace. It is left uninitialized so that
1586  multiple parsers can coexist. */
1587 int yydebug;
1588 #else /* !OCTAVE_DEBUG */
1589 # define YYDPRINTF(Args)
1590 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
1591 # define YY_STACK_PRINT(Bottom, Top)
1592 # define YY_REDUCE_PRINT(Rule)
1593 #endif /* !OCTAVE_DEBUG */
1594 
1595 
1596 /* YYINITDEPTH -- initial size of the parser's stacks. */
1597 #ifndef YYINITDEPTH
1598 # define YYINITDEPTH 200
1599 #endif
1600 
1601 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1602  if the built-in stack extension method is used).
1603 
1604  Do not make this value too large; the results are undefined if
1605  YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1606  evaluated with infinite-precision integer arithmetic. */
1607 
1608 #ifndef YYMAXDEPTH
1609 # define YYMAXDEPTH 10000
1610 #endif
1611 
1612 
1613 #if YYERROR_VERBOSE
1614 
1615 # ifndef yystrlen
1616 # if defined __GLIBC__ && defined _STRING_H
1617 # define yystrlen strlen
1618 # else
1619 /* Return the length of YYSTR. */
1620 static YYSIZE_T
1621 yystrlen (const char *yystr)
1622 {
1623  YYSIZE_T yylen;
1624  for (yylen = 0; yystr[yylen]; yylen++)
1625  continue;
1626  return yylen;
1627 }
1628 # endif
1629 # endif
1630 
1631 # ifndef yystpcpy
1632 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
1633 # define yystpcpy stpcpy
1634 # else
1635 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
1636  YYDEST. */
1637 static char *
1638 yystpcpy (char *yydest, const char *yysrc)
1639 {
1640  char *yyd = yydest;
1641  const char *yys = yysrc;
1642 
1643  while ((*yyd++ = *yys++) != '\0')
1644  continue;
1645 
1646  return yyd - 1;
1647 }
1648 # endif
1649 # endif
1650 
1651 # ifndef yytnamerr
1652 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
1653  quotes and backslashes, so that it's suitable for yyerror. The
1654  heuristic is that double-quoting is unnecessary unless the string
1655  contains an apostrophe, a comma, or backslash (other than
1656  backslash-backslash). YYSTR is taken from yytname. If YYRES is
1657  null, do not copy; instead, return the length of what the result
1658  would have been. */
1659 static YYSIZE_T
1660 yytnamerr (char *yyres, const char *yystr)
1661 {
1662  if (*yystr == '"')
1663  {
1664  YYSIZE_T yyn = 0;
1665  char const *yyp = yystr;
1666 
1667  for (;;)
1668  switch (*++yyp)
1669  {
1670  case '\'':
1671  case ',':
1672  goto do_not_strip_quotes;
1673 
1674  case '\\':
1675  if (*++yyp != '\\')
1676  goto do_not_strip_quotes;
1677  /* Fall through. */
1678  default:
1679  if (yyres)
1680  yyres[yyn] = *yyp;
1681  yyn++;
1682  break;
1683 
1684  case '"':
1685  if (yyres)
1686  yyres[yyn] = '\0';
1687  return yyn;
1688  }
1689  do_not_strip_quotes: ;
1690  }
1691 
1692  if (! yyres)
1693  return yystrlen (yystr);
1694 
1695  return yystpcpy (yyres, yystr) - yyres;
1696 }
1697 # endif
1698 
1699 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
1700  about the unexpected token YYTOKEN for the state stack whose top is
1701  YYSSP.
1702 
1703  Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
1704  not large enough to hold the message. In that case, also set
1705  *YYMSG_ALLOC to the required number of bytes. Return 2 if the
1706  required number of bytes is too large to store. */
1707 static int
1708 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
1709  yytype_int16 *yyssp, int yytoken)
1710 {
1711  YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
1712  YYSIZE_T yysize = yysize0;
1713  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
1714  /* Internationalized format string. */
1715  const char *yyformat = YY_NULLPTR;
1716  /* Arguments of yyformat. */
1717  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
1718  /* Number of reported tokens (one for the "unexpected", one per
1719  "expected"). */
1720  int yycount = 0;
1721 
1722  /* There are many possibilities here to consider:
1723  - If this state is a consistent state with a default action, then
1724  the only way this function was invoked is if the default action
1725  is an error action. In that case, don't check for expected
1726  tokens because there are none.
1727  - The only way there can be no lookahead present (in yychar) is if
1728  this state is a consistent state with a default action. Thus,
1729  detecting the absence of a lookahead is sufficient to determine
1730  that there is no unexpected or expected token to report. In that
1731  case, just report a simple "syntax error".
1732  - Don't assume there isn't a lookahead just because this state is a
1733  consistent state with a default action. There might have been a
1734  previous inconsistent state, consistent state with a non-default
1735  action, or user semantic action that manipulated yychar.
1736  - Of course, the expected token list depends on states to have
1737  correct lookahead information, and it depends on the parser not
1738  to perform extra reductions after fetching a lookahead from the
1739  scanner and before detecting a syntax error. Thus, state merging
1740  (from LALR or IELR) and default reductions corrupt the expected
1741  token list. However, the list is correct for canonical LR with
1742  one exception: it will still contain any token that will not be
1743  accepted due to an error action in a later state.
1744  */
1745  if (yytoken != YYEMPTY)
1746  {
1747  int yyn = yypact[*yyssp];
1748  yyarg[yycount++] = yytname[yytoken];
1749  if (!yypact_value_is_default (yyn))
1750  {
1751  /* Start YYX at -YYN if negative to avoid negative indexes in
1752  YYCHECK. In other words, skip the first -YYN actions for
1753  this state because they are default actions. */
1754  int yyxbegin = yyn < 0 ? -yyn : 0;
1755  /* Stay within bounds of both yycheck and yytname. */
1756  int yychecklim = YYLAST - yyn + 1;
1757  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
1758  int yyx;
1759 
1760  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
1761  if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
1762  && !yytable_value_is_error (yytable[yyx + yyn]))
1763  {
1764  if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
1765  {
1766  yycount = 1;
1767  yysize = yysize0;
1768  break;
1769  }
1770  yyarg[yycount++] = yytname[yyx];
1771  {
1772  YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
1773  if (! (yysize <= yysize1
1774  && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1775  return 2;
1776  yysize = yysize1;
1777  }
1778  }
1779  }
1780  }
1781 
1782  switch (yycount)
1783  {
1784 # define YYCASE_(N, S) \
1785  case N: \
1786  yyformat = S; \
1787  break
1788  YYCASE_(0, YY_("syntax error"));
1789  YYCASE_(1, YY_("syntax error, unexpected %s"));
1790  YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
1791  YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
1792  YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
1793  YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
1794 # undef YYCASE_
1795  }
1796 
1797  {
1798  YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
1799  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
1800  return 2;
1801  yysize = yysize1;
1802  }
1803 
1804  if (*yymsg_alloc < yysize)
1805  {
1806  *yymsg_alloc = 2 * yysize;
1807  if (! (yysize <= *yymsg_alloc
1808  && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
1809  *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
1810  return 1;
1811  }
1812 
1813  /* Avoid sprintf, as that infringes on the user's name space.
1814  Don't have undefined behavior even if the translation
1815  produced a string with the wrong number of "%s"s. */
1816  {
1817  char *yyp = *yymsg;
1818  int yyi = 0;
1819  while ((*yyp = *yyformat) != '\0')
1820  if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
1821  {
1822  yyp += yytnamerr (yyp, yyarg[yyi++]);
1823  yyformat += 2;
1824  }
1825  else
1826  {
1827  yyp++;
1828  yyformat++;
1829  }
1830  }
1831  return 0;
1832 }
1833 #endif /* YYERROR_VERBOSE */
1834 
1835 /*-----------------------------------------------.
1836 | Release the memory associated to this symbol. |
1837 `-----------------------------------------------*/
1838 
1839 static void
1840 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, octave::base_parser& parser)
1841 {
1842  YYUSE (yyvaluep);
1843  YYUSE (parser);
1844  if (!yymsg)
1845  yymsg = "Deleting";
1846  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
1847 
1849  switch (yytype)
1850  {
1851  case 3: /* '=' */
1852 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1853  { }
1854 #line 1855 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1855  break;
1856 
1857  case 4: /* ':' */
1858 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1859  { }
1860 #line 1861 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1861  break;
1862 
1863  case 5: /* '-' */
1864 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1865  { }
1866 #line 1867 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1867  break;
1868 
1869  case 6: /* '+' */
1870 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1871  { }
1872 #line 1873 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1873  break;
1874 
1875  case 7: /* '*' */
1876 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1877  { }
1878 #line 1879 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1879  break;
1880 
1881  case 8: /* '/' */
1882 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1883  { }
1884 #line 1885 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1885  break;
1886 
1887  case 9: /* ADD_EQ */
1888 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1889  { }
1890 #line 1891 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1891  break;
1892 
1893  case 10: /* SUB_EQ */
1894 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1895  { }
1896 #line 1897 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1897  break;
1898 
1899  case 11: /* MUL_EQ */
1900 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1901  { }
1902 #line 1903 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1903  break;
1904 
1905  case 12: /* DIV_EQ */
1906 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1907  { }
1908 #line 1909 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1909  break;
1910 
1911  case 13: /* LEFTDIV_EQ */
1912 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1913  { }
1914 #line 1915 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1915  break;
1916 
1917  case 14: /* POW_EQ */
1918 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1919  { }
1920 #line 1921 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1921  break;
1922 
1923  case 15: /* EMUL_EQ */
1924 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1925  { }
1926 #line 1927 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1927  break;
1928 
1929  case 16: /* EDIV_EQ */
1930 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1931  { }
1932 #line 1933 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1933  break;
1934 
1935  case 17: /* ELEFTDIV_EQ */
1936 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1937  { }
1938 #line 1939 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1939  break;
1940 
1941  case 18: /* EPOW_EQ */
1942 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1943  { }
1944 #line 1945 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1945  break;
1946 
1947  case 19: /* AND_EQ */
1948 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1949  { }
1950 #line 1951 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1951  break;
1952 
1953  case 20: /* OR_EQ */
1954 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1955  { }
1956 #line 1957 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1957  break;
1958 
1959  case 21: /* EXPR_AND_AND */
1960 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1961  { }
1962 #line 1963 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1963  break;
1964 
1965  case 22: /* EXPR_OR_OR */
1966 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1967  { }
1968 #line 1969 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1969  break;
1970 
1971  case 23: /* EXPR_AND */
1972 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1973  { }
1974 #line 1975 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1975  break;
1976 
1977  case 24: /* EXPR_OR */
1978 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1979  { }
1980 #line 1981 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1981  break;
1982 
1983  case 25: /* EXPR_NOT */
1984 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1985  { }
1986 #line 1987 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1987  break;
1988 
1989  case 26: /* EXPR_LT */
1990 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1991  { }
1992 #line 1993 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1993  break;
1994 
1995  case 27: /* EXPR_LE */
1996 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
1997  { }
1998 #line 1999 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
1999  break;
2000 
2001  case 28: /* EXPR_EQ */
2002 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2003  { }
2004 #line 2005 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2005  break;
2006 
2007  case 29: /* EXPR_NE */
2008 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2009  { }
2010 #line 2011 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2011  break;
2012 
2013  case 30: /* EXPR_GE */
2014 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2015  { }
2016 #line 2017 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2017  break;
2018 
2019  case 31: /* EXPR_GT */
2020 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2021  { }
2022 #line 2023 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2023  break;
2024 
2025  case 32: /* LEFTDIV */
2026 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2027  { }
2028 #line 2029 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2029  break;
2030 
2031  case 33: /* EMUL */
2032 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2033  { }
2034 #line 2035 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2035  break;
2036 
2037  case 34: /* EDIV */
2038 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2039  { }
2040 #line 2041 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2041  break;
2042 
2043  case 35: /* ELEFTDIV */
2044 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2045  { }
2046 #line 2047 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2047  break;
2048 
2049  case 36: /* EPLUS */
2050 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2051  { }
2052 #line 2053 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2053  break;
2054 
2055  case 37: /* EMINUS */
2056 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2057  { }
2058 #line 2059 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2059  break;
2060 
2061  case 38: /* HERMITIAN */
2062 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2063  { }
2064 #line 2065 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2065  break;
2066 
2067  case 39: /* TRANSPOSE */
2068 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2069  { }
2070 #line 2071 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2071  break;
2072 
2073  case 40: /* PLUS_PLUS */
2074 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2075  { }
2076 #line 2077 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2077  break;
2078 
2079  case 41: /* MINUS_MINUS */
2080 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2081  { }
2082 #line 2083 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2083  break;
2084 
2085  case 42: /* POW */
2086 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2087  { }
2088 #line 2089 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2089  break;
2090 
2091  case 43: /* EPOW */
2092 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2093  { }
2094 #line 2095 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2095  break;
2096 
2097  case 44: /* NUM */
2098 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2099  { }
2100 #line 2101 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2101  break;
2102 
2103  case 45: /* IMAG_NUM */
2104 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2105  { }
2106 #line 2107 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2107  break;
2108 
2109  case 46: /* STRUCT_ELT */
2110 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2111  { }
2112 #line 2113 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2113  break;
2114 
2115  case 47: /* NAME */
2116 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2117  { }
2118 #line 2119 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2119  break;
2120 
2121  case 48: /* END */
2122 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2123  { }
2124 #line 2125 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2125  break;
2126 
2127  case 49: /* DQ_STRING */
2128 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2129  { }
2130 #line 2131 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2131  break;
2132 
2133  case 50: /* SQ_STRING */
2134 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2135  { }
2136 #line 2137 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2137  break;
2138 
2139  case 51: /* FOR */
2140 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2141  { }
2142 #line 2143 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2143  break;
2144 
2145  case 52: /* PARFOR */
2146 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2147  { }
2148 #line 2149 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2149  break;
2150 
2151  case 53: /* WHILE */
2152 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2153  { }
2154 #line 2155 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2155  break;
2156 
2157  case 54: /* DO */
2158 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2159  { }
2160 #line 2161 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2161  break;
2162 
2163  case 55: /* UNTIL */
2164 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2165  { }
2166 #line 2167 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2167  break;
2168 
2169  case 56: /* IF */
2170 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2171  { }
2172 #line 2173 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2173  break;
2174 
2175  case 57: /* ELSEIF */
2176 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2177  { }
2178 #line 2179 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2179  break;
2180 
2181  case 58: /* ELSE */
2182 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2183  { }
2184 #line 2185 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2185  break;
2186 
2187  case 59: /* SWITCH */
2188 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2189  { }
2190 #line 2191 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2191  break;
2192 
2193  case 60: /* CASE */
2194 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2195  { }
2196 #line 2197 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2197  break;
2198 
2199  case 61: /* OTHERWISE */
2200 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2201  { }
2202 #line 2203 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2203  break;
2204 
2205  case 62: /* BREAK */
2206 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2207  { }
2208 #line 2209 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2209  break;
2210 
2211  case 63: /* CONTINUE */
2212 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2213  { }
2214 #line 2215 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2215  break;
2216 
2217  case 64: /* FUNC_RET */
2218 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2219  { }
2220 #line 2221 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2221  break;
2222 
2223  case 65: /* UNWIND */
2224 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2225  { }
2226 #line 2227 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2227  break;
2228 
2229  case 66: /* CLEANUP */
2230 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2231  { }
2232 #line 2233 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2233  break;
2234 
2235  case 67: /* TRY */
2236 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2237  { }
2238 #line 2239 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2239  break;
2240 
2241  case 68: /* CATCH */
2242 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2243  { }
2244 #line 2245 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2245  break;
2246 
2247  case 69: /* GLOBAL */
2248 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2249  { }
2250 #line 2251 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2251  break;
2252 
2253  case 70: /* PERSISTENT */
2254 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2255  { }
2256 #line 2257 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2257  break;
2258 
2259  case 71: /* FCN_HANDLE */
2260 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2261  { }
2262 #line 2263 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2263  break;
2264 
2265  case 72: /* CLASSDEF */
2266 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2267  { }
2268 #line 2269 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2269  break;
2270 
2271  case 73: /* PROPERTIES */
2272 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2273  { }
2274 #line 2275 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2275  break;
2276 
2277  case 74: /* METHODS */
2278 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2279  { }
2280 #line 2281 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2281  break;
2282 
2283  case 75: /* EVENTS */
2284 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2285  { }
2286 #line 2287 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2287  break;
2288 
2289  case 76: /* ENUMERATION */
2290 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2291  { }
2292 #line 2293 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2293  break;
2294 
2295  case 77: /* METAQUERY */
2296 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2297  { }
2298 #line 2299 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2299  break;
2300 
2301  case 78: /* SUPERCLASSREF */
2302 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2303  { }
2304 #line 2305 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2305  break;
2306 
2307  case 79: /* FQ_IDENT */
2308 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2309  { }
2310 #line 2311 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2311  break;
2312 
2313  case 80: /* GET */
2314 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2315  { }
2316 #line 2317 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2317  break;
2318 
2319  case 81: /* SET */
2320 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2321  { }
2322 #line 2323 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2323  break;
2324 
2325  case 82: /* FCN */
2326 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2327  { }
2328 #line 2329 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2329  break;
2330 
2331  case 83: /* LEXICAL_ERROR */
2332 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2333  { }
2334 #line 2335 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2335  break;
2336 
2337  case 97: /* UNARY */
2338 #line 323 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2339  { }
2340 #line 2341 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2341  break;
2342 
2343  case 99: /* input */
2344 #line 325 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2345  { delete ((*yyvaluep).tree_type); }
2346 #line 2347 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2347  break;
2348 
2349  case 100: /* simple_list */
2350 #line 350 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2351  { delete ((*yyvaluep).tree_statement_list_type); }
2352 #line 2353 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2353  break;
2354 
2355  case 101: /* simple_list1 */
2356 #line 350 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2357  { delete ((*yyvaluep).tree_statement_list_type); }
2358 #line 2359 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2359  break;
2360 
2361  case 102: /* opt_list */
2362 #line 350 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2363  { delete ((*yyvaluep).tree_statement_list_type); }
2364 #line 2365 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2365  break;
2366 
2367  case 103: /* list */
2368 #line 350 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2369  { delete ((*yyvaluep).tree_statement_list_type); }
2370 #line 2371 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2371  break;
2372 
2373  case 104: /* list1 */
2374 #line 350 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2375  { delete ((*yyvaluep).tree_statement_list_type); }
2376 #line 2377 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2377  break;
2378 
2379  case 105: /* statement */
2380 #line 349 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2381  { delete ((*yyvaluep).tree_statement_type); }
2382 #line 2383 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2383  break;
2384 
2385  case 106: /* word_list_cmd */
2386 #line 335 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2387  { delete ((*yyvaluep).tree_index_expression_type); }
2388 #line 2389 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2389  break;
2390 
2391  case 107: /* word_list */
2392 #line 337 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2393  { delete ((*yyvaluep).tree_argument_list_type); }
2394 #line 2395 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2395  break;
2396 
2397  case 108: /* identifier */
2398 #line 334 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2399  { delete ((*yyvaluep).tree_identifier_type); }
2400 #line 2401 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2401  break;
2402 
2403  case 109: /* superclass_identifier */
2404 #line 331 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2405  { delete ((*yyvaluep).tree_funcall_type); }
2406 #line 2407 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2407  break;
2408 
2409  case 110: /* meta_identifier */
2410 #line 331 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2411  { delete ((*yyvaluep).tree_funcall_type); }
2412 #line 2413 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2413  break;
2414 
2415  case 111: /* string */
2416 #line 329 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2417  { delete ((*yyvaluep).tree_constant_type); }
2418 #line 2419 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2419  break;
2420 
2421  case 112: /* constant */
2422 #line 329 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2423  { delete ((*yyvaluep).tree_constant_type); }
2424 #line 2425 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2425  break;
2426 
2427  case 113: /* matrix */
2428 #line 328 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2429  { delete ((*yyvaluep).tree_expression_type); }
2430 #line 2431 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2431  break;
2432 
2433  case 114: /* matrix_rows */
2434 #line 326 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2435  { delete ((*yyvaluep).tree_matrix_type); }
2436 #line 2437 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2437  break;
2438 
2439  case 115: /* cell */
2440 #line 328 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2441  { delete ((*yyvaluep).tree_expression_type); }
2442 #line 2443 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2443  break;
2444 
2445  case 116: /* cell_rows */
2446 #line 327 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2447  { delete ((*yyvaluep).tree_cell_type); }
2448 #line 2449 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2449  break;
2450 
2451  case 117: /* cell_or_matrix_row */
2452 #line 337 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2453  { delete ((*yyvaluep).tree_argument_list_type); }
2454 #line 2455 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2455  break;
2456 
2457  case 118: /* fcn_handle */
2458 #line 330 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2459  { delete ((*yyvaluep).tree_fcn_handle_type); }
2460 #line 2461 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2461  break;
2462 
2463  case 119: /* anon_fcn_handle */
2464 #line 333 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2465  { delete ((*yyvaluep).tree_anon_fcn_handle_type); }
2466 #line 2467 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2467  break;
2468 
2469  case 120: /* primary_expr */
2470 #line 328 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2471  { delete ((*yyvaluep).tree_expression_type); }
2472 #line 2473 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2473  break;
2474 
2475  case 121: /* magic_colon */
2476 #line 329 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2477  { delete ((*yyvaluep).tree_constant_type); }
2478 #line 2479 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2479  break;
2480 
2481  case 122: /* magic_tilde */
2482 #line 334 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2483  { delete ((*yyvaluep).tree_identifier_type); }
2484 #line 2485 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2485  break;
2486 
2487  case 123: /* arg_list */
2488 #line 337 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2489  { delete ((*yyvaluep).tree_argument_list_type); }
2490 #line 2491 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2491  break;
2492 
2493  case 125: /* oper_expr */
2494 #line 328 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2495  { delete ((*yyvaluep).tree_expression_type); }
2496 #line 2497 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2497  break;
2498 
2499  case 126: /* power_expr */
2500 #line 328 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2501  { delete ((*yyvaluep).tree_expression_type); }
2502 #line 2503 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2503  break;
2504 
2505  case 127: /* colon_expr */
2506 #line 328 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2507  { delete ((*yyvaluep).tree_expression_type); }
2508 #line 2509 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2509  break;
2510 
2511  case 128: /* colon_expr1 */
2512 #line 336 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2513  { delete ((*yyvaluep).tree_colon_expression_type); }
2514 #line 2515 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2515  break;
2516 
2517  case 129: /* simple_expr */
2518 #line 328 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2519  { delete ((*yyvaluep).tree_expression_type); }
2520 #line 2521 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2521  break;
2522 
2523  case 130: /* assign_lhs */
2524 #line 337 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2525  { delete ((*yyvaluep).tree_argument_list_type); }
2526 #line 2527 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2527  break;
2528 
2529  case 131: /* assign_expr */
2530 #line 328 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2531  { delete ((*yyvaluep).tree_expression_type); }
2532 #line 2533 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2533  break;
2534 
2535  case 132: /* expression */
2536 #line 328 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2537  { delete ((*yyvaluep).tree_expression_type); }
2538 #line 2539 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2539  break;
2540 
2541  case 133: /* command */
2542 #line 339 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2543  { delete ((*yyvaluep).tree_command_type); }
2544 #line 2545 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2545  break;
2546 
2547  case 134: /* declaration */
2548 #line 348 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2549  { delete ((*yyvaluep).tree_decl_command_type); }
2550 #line 2551 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2551  break;
2552 
2553  case 135: /* decl1 */
2554 #line 347 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2555  { delete ((*yyvaluep).tree_decl_init_list_type); }
2556 #line 2557 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2557  break;
2558 
2559  case 137: /* decl2 */
2560 #line 346 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2561  { delete ((*yyvaluep).tree_decl_elt_type); }
2562 #line 2563 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2563  break;
2564 
2565  case 138: /* select_command */
2566 #line 339 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2567  { delete ((*yyvaluep).tree_command_type); }
2568 #line 2569 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2569  break;
2570 
2571  case 139: /* if_command */
2572 #line 340 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2573  { delete ((*yyvaluep).tree_if_command_type); }
2574 #line 2575 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2575  break;
2576 
2577  case 140: /* if_cmd_list */
2578 #line 342 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2579  { delete ((*yyvaluep).tree_if_command_list_type); }
2580 #line 2581 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2581  break;
2582 
2583  case 141: /* if_cmd_list1 */
2584 #line 342 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2585  { delete ((*yyvaluep).tree_if_command_list_type); }
2586 #line 2587 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2587  break;
2588 
2589  case 142: /* elseif_clause */
2590 #line 341 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2591  { delete ((*yyvaluep).tree_if_clause_type); }
2592 #line 2593 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2593  break;
2594 
2595  case 143: /* else_clause */
2596 #line 341 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2597  { delete ((*yyvaluep).tree_if_clause_type); }
2598 #line 2599 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2599  break;
2600 
2601  case 144: /* switch_command */
2602 #line 343 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2603  { delete ((*yyvaluep).tree_switch_command_type); }
2604 #line 2605 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2605  break;
2606 
2607  case 145: /* case_list */
2608 #line 345 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2609  { delete ((*yyvaluep).tree_switch_case_list_type); }
2610 #line 2611 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2611  break;
2612 
2613  case 146: /* case_list1 */
2614 #line 345 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2615  { delete ((*yyvaluep).tree_switch_case_list_type); }
2616 #line 2617 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2617  break;
2618 
2619  case 147: /* switch_case */
2620 #line 344 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2621  { delete ((*yyvaluep).tree_switch_case_type); }
2622 #line 2623 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2623  break;
2624 
2625  case 148: /* default_case */
2626 #line 344 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2627  { delete ((*yyvaluep).tree_switch_case_type); }
2628 #line 2629 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2629  break;
2630 
2631  case 149: /* loop_command */
2632 #line 339 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2633  { delete ((*yyvaluep).tree_command_type); }
2634 #line 2635 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2635  break;
2636 
2637  case 150: /* jump_command */
2638 #line 339 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2639  { delete ((*yyvaluep).tree_command_type); }
2640 #line 2641 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2641  break;
2642 
2643  case 151: /* except_command */
2644 #line 339 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2645  { delete ((*yyvaluep).tree_command_type); }
2646 #line 2647 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2647  break;
2648 
2649  case 155: /* param_list */
2650 #line 338 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2651  { delete ((*yyvaluep).tree_parameter_list_type); }
2652 #line 2653 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2653  break;
2654 
2655  case 156: /* param_list1 */
2656 #line 338 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2657  { delete ((*yyvaluep).tree_parameter_list_type); }
2658 #line 2659 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2659  break;
2660 
2661  case 157: /* param_list2 */
2662 #line 338 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2663  { delete ((*yyvaluep).tree_parameter_list_type); }
2664 #line 2665 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2665  break;
2666 
2667  case 158: /* param_list_elt */
2668 #line 346 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2669  { delete ((*yyvaluep).tree_decl_elt_type); }
2670 #line 2671 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2671  break;
2672 
2673  case 159: /* return_list */
2674 #line 338 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2675  { delete ((*yyvaluep).tree_parameter_list_type); }
2676 #line 2677 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2677  break;
2678 
2679  case 160: /* return_list1 */
2680 #line 338 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2681  { delete ((*yyvaluep).tree_parameter_list_type); }
2682 #line 2683 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2683  break;
2684 
2685  case 161: /* file */
2686 #line 339 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2687  { delete ((*yyvaluep).tree_command_type); }
2688 #line 2689 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2689  break;
2690 
2691  case 162: /* function_beg */
2692 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2693  { }
2694 #line 2695 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2695  break;
2696 
2697  case 163: /* function */
2698 #line 332 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2699  { delete ((*yyvaluep).tree_function_def_type); }
2700 #line 2701 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2701  break;
2702 
2703  case 164: /* fcn_name */
2704 #line 334 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2705  { delete ((*yyvaluep).tree_identifier_type); }
2706 #line 2707 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2707  break;
2708 
2709  case 165: /* function1 */
2710 #line 351 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2711  { delete ((*yyvaluep).octave_user_function_type); }
2712 #line 2713 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2713  break;
2714 
2715  case 166: /* function2 */
2716 #line 351 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2717  { delete ((*yyvaluep).octave_user_function_type); }
2718 #line 2719 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2719  break;
2720 
2721  case 167: /* function_end */
2722 #line 349 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2723  { delete ((*yyvaluep).tree_statement_type); }
2724 #line 2725 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2725  break;
2726 
2727  case 168: /* classdef_beg */
2728 #line 320 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2729  { }
2730 #line 2731 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2731  break;
2732 
2733  case 169: /* classdef */
2734 #line 353 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2735  { delete ((*yyvaluep).tree_classdef_type); }
2736 #line 2737 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2737  break;
2738 
2739  case 170: /* opt_attr_list */
2740 #line 355 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2741  { delete ((*yyvaluep).tree_classdef_attribute_list_type); }
2742 #line 2743 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2743  break;
2744 
2745  case 171: /* attr_list */
2746 #line 355 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2747  { delete ((*yyvaluep).tree_classdef_attribute_list_type); }
2748 #line 2749 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2749  break;
2750 
2751  case 172: /* attr */
2752 #line 354 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2753  { delete ((*yyvaluep).tree_classdef_attribute_type); }
2754 #line 2755 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2755  break;
2756 
2757  case 173: /* opt_superclass_list */
2758 #line 357 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2759  { delete ((*yyvaluep).tree_classdef_superclass_list_type); }
2760 #line 2761 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2761  break;
2762 
2763  case 174: /* superclass_list */
2764 #line 357 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2765  { delete ((*yyvaluep).tree_classdef_superclass_list_type); }
2766 #line 2767 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2767  break;
2768 
2769  case 177: /* superclass */
2770 #line 356 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2771  { delete ((*yyvaluep).tree_classdef_superclass_type); }
2772 #line 2773 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2773  break;
2774 
2775  case 178: /* class_body */
2776 #line 358 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2777  { delete ((*yyvaluep).tree_classdef_body_type); }
2778 #line 2779 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2779  break;
2780 
2781  case 179: /* properties_block */
2782 #line 361 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2783  { delete ((*yyvaluep).tree_classdef_properties_block_type); }
2784 #line 2785 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2785  break;
2786 
2787  case 180: /* property_list */
2788 #line 360 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2789  { delete ((*yyvaluep).tree_classdef_property_list_type); }
2790 #line 2791 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2791  break;
2792 
2793  case 181: /* class_property */
2794 #line 359 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2795  { delete ((*yyvaluep).tree_classdef_property_type); }
2796 #line 2797 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2797  break;
2798 
2799  case 182: /* methods_block */
2800 #line 363 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2801  { delete ((*yyvaluep).tree_classdef_methods_block_type); }
2802 #line 2803 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2803  break;
2804 
2805  case 183: /* method_decl1 */
2806 #line 351 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2807  { delete ((*yyvaluep).octave_user_function_type); }
2808 #line 2809 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2809  break;
2810 
2811  case 184: /* method_decl */
2812 #line 332 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2813  { delete ((*yyvaluep).tree_function_def_type); }
2814 #line 2815 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2815  break;
2816 
2817  case 186: /* method */
2818 #line 332 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2819  { delete ((*yyvaluep).tree_function_def_type); }
2820 #line 2821 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2821  break;
2822 
2823  case 187: /* methods_list */
2824 #line 362 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2825  { delete ((*yyvaluep).tree_classdef_methods_list_type); }
2826 #line 2827 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2827  break;
2828 
2829  case 188: /* events_block */
2830 #line 366 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2831  { delete ((*yyvaluep).tree_classdef_events_block_type); }
2832 #line 2833 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2833  break;
2834 
2835  case 189: /* events_list */
2836 #line 365 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2837  { delete ((*yyvaluep).tree_classdef_events_list_type); }
2838 #line 2839 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2839  break;
2840 
2841  case 190: /* class_event */
2842 #line 364 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2843  { delete ((*yyvaluep).tree_classdef_event_type); }
2844 #line 2845 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2845  break;
2846 
2847  case 191: /* enum_block */
2848 #line 369 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2849  { delete ((*yyvaluep).tree_classdef_enum_block_type); }
2850 #line 2851 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2851  break;
2852 
2853  case 192: /* enum_list */
2854 #line 368 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2855  { delete ((*yyvaluep).tree_classdef_enum_list_type); }
2856 #line 2857 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2857  break;
2858 
2859  case 193: /* class_enum */
2860 #line 367 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2861  { delete ((*yyvaluep).tree_classdef_enum_type); }
2862 #line 2863 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2863  break;
2864 
2865  case 195: /* stash_comment */
2866 #line 322 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2867  { }
2868 #line 2869 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2869  break;
2870 
2871  case 197: /* sep_no_nl */
2872 #line 321 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2873  { }
2874 #line 2875 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2875  break;
2876 
2877  case 198: /* opt_sep_no_nl */
2878 #line 321 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2879  { }
2880 #line 2881 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2881  break;
2882 
2883  case 199: /* opt_nl */
2884 #line 321 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2885  { }
2886 #line 2887 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2887  break;
2888 
2889  case 200: /* nl */
2890 #line 321 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2891  { }
2892 #line 2893 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2893  break;
2894 
2895  case 201: /* sep */
2896 #line 321 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2897  { }
2898 #line 2899 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2899  break;
2900 
2901  case 202: /* opt_sep */
2902 #line 321 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1257 */
2903  { }
2904 #line 2905 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1257 */
2905  break;
2906 
2907 
2908  default:
2909  break;
2910  }
2912 }
2913 
2914 
2915 
2916 struct yypstate
2917  {
2918  /* Number of syntax errors so far. */
2919  int yynerrs;
2920 
2921  int yystate;
2922  /* Number of tokens to shift before error messages enabled. */
2924 
2925  /* The stacks and their tools:
2926  'yyss': related to states.
2927  'yyvs': related to semantic values.
2928 
2929  Refer to the stacks through separate pointers, to allow yyoverflow
2930  to reallocate them elsewhere. */
2931 
2932  /* The state stack. */
2936 
2937  /* The semantic value stack. */
2941 
2943  /* Used to determine if this is the first time this instance has
2944  been used. */
2945  int yynew;
2946  };
2947 
2948 int
2950 {
2951  return yypull_parse (YY_NULLPTR, parser);
2952 }
2953 
2954 int
2956 {
2957  int yystatus;
2958  yypstate *yyps_local;
2959  int yychar;
2960  YYSTYPE yylval;
2961  if (yyps)
2962  yyps_local = yyps;
2963  else
2964  {
2965  yyps_local = yypstate_new ();
2966  if (!yyps_local)
2967  {
2968  yyerror (parser, YY_("memory exhausted"));
2969  return 2;
2970  }
2971  }
2972  do {
2973  yychar = yylex (&yylval, scanner);
2974  yystatus =
2975  yypush_parse (yyps_local, yychar, &yylval, parser);
2976  } while (yystatus == YYPUSH_MORE);
2977  if (!yyps)
2978  yypstate_delete (yyps_local);
2979  return yystatus;
2980 }
2981 
2982 /* Initialize the parser data structure. */
2983 yypstate *
2985 {
2986  yypstate *yyps;
2987  yyps = (yypstate *) malloc (sizeof *yyps);
2988  if (!yyps)
2989  return YY_NULLPTR;
2990  yyps->yynew = 1;
2991  return yyps;
2992 }
2993 
2994 void
2996 {
2997 #ifndef yyoverflow
2998  /* If the stack was reallocated but the parse did not complete, then the
2999  stack still needs to be freed. */
3000  if (!yyps->yynew && yyps->yyss != yyps->yyssa)
3001  YYSTACK_FREE (yyps->yyss);
3002 #endif
3003  free (yyps);
3004 }
3005 
3006 #define octave_nerrs yyps->octave_nerrs
3007 #define yystate yyps->yystate
3008 #define yyerrstatus yyps->yyerrstatus
3009 #define yyssa yyps->yyssa
3010 #define yyss yyps->yyss
3011 #define yyssp yyps->yyssp
3012 #define yyvsa yyps->yyvsa
3013 #define yyvs yyps->yyvs
3014 #define yyvsp yyps->yyvsp
3015 #define yystacksize yyps->yystacksize
3016 
3017 
3018 /*---------------.
3019 | yypush_parse. |
3020 `---------------*/
3021 
3022 int
3023 yypush_parse (yypstate *yyps, int yypushed_char, YYSTYPE const *yypushed_val, octave::base_parser& parser)
3024 {
3025 /* The lookahead symbol. */
3026 int yychar;
3027 
3028 
3029 /* The semantic value of the lookahead symbol. */
3030 /* Default value used for initialization, for pacifying older GCCs
3031  or non-GCC compilers. */
3032 YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
3033 YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
3034 
3035  int yyn;
3036  int yyresult;
3037  /* Lookahead token as an internal (translated) token number. */
3038  int yytoken = 0;
3039  /* The variables used to return semantic value and location from the
3040  action routines. */
3041  YYSTYPE yyval;
3042 
3043 #if YYERROR_VERBOSE
3044  /* Buffer for error messages, and its allocated size. */
3045  char yymsgbuf[128];
3046  char *yymsg = yymsgbuf;
3047  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
3048 #endif
3049 
3050 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
3051 
3052  /* The number of symbols on the RHS of the reduced rule.
3053  Keep to zero when no symbol should be popped. */
3054  int yylen = 0;
3055 
3056  if (!yyps->yynew)
3057  {
3058  yyn = yypact[yystate];
3059  goto yyread_pushed_token;
3060  }
3061 
3062  yyssp = yyss = yyssa;
3063  yyvsp = yyvs = yyvsa;
3065 
3066  YYDPRINTF ((stderr, "Starting parse\n"));
3067 
3068  yystate = 0;
3069  yyerrstatus = 0;
3070  yynerrs = 0;
3071  yychar = YYEMPTY; /* Cause a token to be read. */
3072  goto yysetstate;
3073 
3074 /*------------------------------------------------------------.
3075 | yynewstate -- Push a new state, which is found in yystate. |
3076 `------------------------------------------------------------*/
3077  yynewstate:
3078  /* In all cases, when you get here, the value and location stacks
3079  have just been pushed. So pushing a state here evens the stacks. */
3080  yyssp++;
3081 
3082  yysetstate:
3083  *yyssp = yystate;
3084 
3085  if (yyss + yystacksize - 1 <= yyssp)
3086  {
3087  /* Get the current used size of the three stacks, in elements. */
3088  YYSIZE_T yysize = yyssp - yyss + 1;
3089 
3090 #ifdef yyoverflow
3091  {
3092  /* Give user a chance to reallocate the stack. Use copies of
3093  these so that the &'s don't force the real ones into
3094  memory. */
3095  YYSTYPE *yyvs1 = yyvs;
3096  yytype_int16 *yyss1 = yyss;
3097 
3098  /* Each stack pointer address is followed by the size of the
3099  data in use in that stack, in bytes. This used to be a
3100  conditional around just the two extra args, but that might
3101  be undefined if yyoverflow is a macro. */
3102  yyoverflow (YY_("memory exhausted"),
3103  &yyss1, yysize * sizeof (*yyssp),
3104  &yyvs1, yysize * sizeof (*yyvsp),
3105  &yystacksize);
3106 
3107  yyss = yyss1;
3108  yyvs = yyvs1;
3109  }
3110 #else /* no yyoverflow */
3111 # ifndef YYSTACK_RELOCATE
3112  goto yyexhaustedlab;
3113 # else
3114  /* Extend the stack our own way. */
3115  if (YYMAXDEPTH <= yystacksize)
3116  goto yyexhaustedlab;
3117  yystacksize *= 2;
3118  if (YYMAXDEPTH < yystacksize)
3120 
3121  {
3122  yytype_int16 *yyss1 = yyss;
3123  union yyalloc *yyptr =
3125  if (! yyptr)
3126  goto yyexhaustedlab;
3127  YYSTACK_RELOCATE (yyss_alloc, yyss);
3129 # undef YYSTACK_RELOCATE
3130  if (yyss1 != yyssa)
3131  YYSTACK_FREE (yyss1);
3132  }
3133 # endif
3134 #endif /* no yyoverflow */
3135 
3136  yyssp = yyss + yysize - 1;
3137  yyvsp = yyvs + yysize - 1;
3138 
3139  YYDPRINTF ((stderr, "Stack size increased to %lu\n",
3140  (unsigned long int) yystacksize));
3141 
3142  if (yyss + yystacksize - 1 <= yyssp)
3143  YYABORT;
3144  }
3145 
3146  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
3147 
3148  if (yystate == YYFINAL)
3149  YYACCEPT;
3150 
3151  goto yybackup;
3152 
3153 /*-----------.
3154 | yybackup. |
3155 `-----------*/
3156 yybackup:
3157 
3158  /* Do appropriate processing given the current state. Read a
3159  lookahead token if we need one and don't already have one. */
3160 
3161  /* First try to decide what to do without reference to lookahead token. */
3162  yyn = yypact[yystate];
3163  if (yypact_value_is_default (yyn))
3164  goto yydefault;
3165 
3166  /* Not known => get a lookahead token if don't already have one. */
3167 
3168  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
3169  if (yychar == YYEMPTY)
3170  {
3171  if (!yyps->yynew)
3172  {
3173  YYDPRINTF ((stderr, "Return for a new token:\n"));
3174  yyresult = YYPUSH_MORE;
3175  goto yypushreturn;
3176  }
3177  yyps->yynew = 0;
3178 yyread_pushed_token:
3179  YYDPRINTF ((stderr, "Reading a token: "));
3180  yychar = yypushed_char;
3181  if (yypushed_val)
3182  yylval = *yypushed_val;
3183  }
3184 
3185  if (yychar <= YYEOF)
3186  {
3187  yychar = yytoken = YYEOF;
3188  YYDPRINTF ((stderr, "Now at end of input.\n"));
3189  }
3190  else
3191  {
3192  yytoken = YYTRANSLATE (yychar);
3193  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
3194  }
3195 
3196  /* If the proper action on seeing token YYTOKEN is to reduce or to
3197  detect an error, take that action. */
3198  yyn += yytoken;
3199  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
3200  goto yydefault;
3201  yyn = yytable[yyn];
3202  if (yyn <= 0)
3203  {
3204  if (yytable_value_is_error (yyn))
3205  goto yyerrlab;
3206  yyn = -yyn;
3207  goto yyreduce;
3208  }
3209 
3210  /* Count tokens shifted since error; after three, turn off error
3211  status. */
3212  if (yyerrstatus)
3213  yyerrstatus--;
3214 
3215  /* Shift the lookahead token. */
3216  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
3217 
3218  /* Discard the shifted token. */
3219  yychar = YYEMPTY;
3220 
3221  yystate = yyn;
3223  *++yyvsp = yylval;
3225 
3226  goto yynewstate;
3227 
3228 
3229 /*-----------------------------------------------------------.
3230 | yydefault -- do the default action for the current state. |
3231 `-----------------------------------------------------------*/
3232 yydefault:
3233  yyn = yydefact[yystate];
3234  if (yyn == 0)
3235  goto yyerrlab;
3236  goto yyreduce;
3237 
3238 
3239 /*-----------------------------.
3240 | yyreduce -- Do a reduction. |
3241 `-----------------------------*/
3242 yyreduce:
3243  /* yyn is the number of a rule to reduce with. */
3244  yylen = yyr2[yyn];
3245 
3246  /* If YYLEN is nonzero, implement the default value of the action:
3247  '$$ = $1'.
3248 
3249  Otherwise, the following line sets YYVAL to garbage.
3250  This behavior is undocumented and Bison
3251  users should not rely upon it. Assigning to YYVAL
3252  unconditionally makes the parser a bit smaller, and it avoids a
3253  GCC warning that YYVAL may be used uninitialized. */
3254  yyval = yyvsp[1-yylen];
3255 
3256 
3257  YY_REDUCE_PRINT (yyn);
3258  switch (yyn)
3259  {
3260  case 2:
3261 #line 390 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3262  {
3263  (yyval.tree_type) = 0;
3264  parser.stmt_list = (yyvsp[-1].tree_statement_list_type);
3265  YYACCEPT;
3266  }
3267 #line 3268 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3268  break;
3269 
3270  case 3:
3271 #line 396 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3272  {
3273  (yyval.tree_type) = 0;
3274  lexer.end_of_input = true;
3275  parser.stmt_list = (yyvsp[-1].tree_statement_list_type);
3276  YYACCEPT;
3277  }
3278 #line 3279 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3279  break;
3280 
3281  case 4:
3282 #line 403 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3283  {
3284  (yyval.tree_type) = 0;
3285  YYABORT;
3286  }
3287 #line 3288 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3288  break;
3289 
3290  case 5:
3291 #line 410 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3292  {
3293  YYUSE ((yyvsp[0].punct_type));
3294 
3295  (yyval.tree_statement_list_type) = 0;
3296  }
3297 #line 3298 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3298  break;
3299 
3300  case 6:
3301 #line 416 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3302  { (yyval.tree_statement_list_type) = parser.set_stmt_print_flag ((yyvsp[-1].tree_statement_list_type), (yyvsp[0].punct_type), false); }
3303 #line 3304 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3304  break;
3305 
3306  case 7:
3307 #line 420 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3308  { (yyval.tree_statement_list_type) = parser.make_statement_list ((yyvsp[0].tree_statement_type)); }
3309 #line 3310 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3310  break;
3311 
3312  case 8:
3313 #line 422 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3314  { (yyval.tree_statement_list_type) = parser.append_statement_list ((yyvsp[-2].tree_statement_list_type), (yyvsp[-1].punct_type), (yyvsp[0].tree_statement_type), false); }
3315 #line 3316 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3316  break;
3317 
3318  case 9:
3319 #line 426 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3320  { (yyval.tree_statement_list_type) = new tree_statement_list (); }
3321 #line 3322 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3322  break;
3323 
3324  case 10:
3325 #line 428 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3326  { (yyval.tree_statement_list_type) = (yyvsp[0].tree_statement_list_type); }
3327 #line 3328 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3328  break;
3329 
3330  case 11:
3331 #line 432 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3332  { (yyval.tree_statement_list_type) = parser.set_stmt_print_flag ((yyvsp[-1].tree_statement_list_type), (yyvsp[0].punct_type), true); }
3333 #line 3334 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3334  break;
3335 
3336  case 12:
3337 #line 436 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3338  { (yyval.tree_statement_list_type) = parser.make_statement_list ((yyvsp[0].tree_statement_type)); }
3339 #line 3340 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3340  break;
3341 
3342  case 13:
3343 #line 438 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3344  { (yyval.tree_statement_list_type) = parser.append_statement_list ((yyvsp[-2].tree_statement_list_type), (yyvsp[-1].punct_type), (yyvsp[0].tree_statement_type), true); }
3345 #line 3346 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3346  break;
3347 
3348  case 14:
3349 #line 442 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3350  { (yyval.tree_statement_type) = parser.make_statement ((yyvsp[0].tree_expression_type)); }
3351 #line 3352 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3352  break;
3353 
3354  case 15:
3355 #line 444 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3356  { (yyval.tree_statement_type) = parser.make_statement ((yyvsp[0].tree_command_type)); }
3357 #line 3358 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3358  break;
3359 
3360  case 16:
3361 #line 446 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3362  { (yyval.tree_statement_type) = parser.make_statement ((yyvsp[0].tree_index_expression_type)); }
3363 #line 3364 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3364  break;
3365 
3366  case 17:
3367 #line 458 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3368  {
3369  (yyval.tree_index_expression_type) = parser.make_index_expression ((yyvsp[-1].tree_identifier_type), (yyvsp[0].tree_argument_list_type), '(');
3370  if (! (yyval.tree_index_expression_type))
3371  {
3372  // make_index_expression deleted $1 and $2.
3373  YYABORT;
3374  }
3375  }
3376 #line 3377 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3377  break;
3378 
3379  case 18:
3380 #line 469 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3381  { (yyval.tree_argument_list_type) = new tree_argument_list ((yyvsp[0].tree_constant_type)); }
3382 #line 3383 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3383  break;
3384 
3385  case 19:
3386 #line 471 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3387  {
3388  (yyvsp[-1].tree_argument_list_type)->append ((yyvsp[0].tree_constant_type));
3389  (yyval.tree_argument_list_type) = (yyvsp[-1].tree_argument_list_type);
3390  }
3391 #line 3392 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3392  break;
3393 
3394  case 20:
3395 #line 482 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3396  {
3397  symbol_table::symbol_record *sr = (yyvsp[0].tok_val)->sym_rec ();
3398  (yyval.tree_identifier_type) = new tree_identifier (*sr, (yyvsp[0].tok_val)->line (), (yyvsp[0].tok_val)->column ());
3399  }
3400 #line 3401 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3401  break;
3402 
3403  case 21:
3404 #line 490 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3405  {
3406  std::string method_nm = (yyvsp[0].tok_val)->superclass_method_name ();
3407  std::string class_nm = (yyvsp[0].tok_val)->superclass_class_name ();
3408 
3409  (yyval.tree_funcall_type) = parser.make_superclass_ref (method_nm, class_nm);
3410  }
3411 #line 3412 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3412  break;
3413 
3414  case 22:
3415 #line 499 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3416  {
3417  std::string class_nm = (yyvsp[0].tok_val)->text ();
3418 
3419  (yyval.tree_funcall_type) = parser.make_meta_class_query (class_nm);
3420  }
3421 #line 3422 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3422  break;
3423 
3424  case 23:
3425 #line 507 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3426  { (yyval.tree_constant_type) = parser.make_constant (DQ_STRING, (yyvsp[0].tok_val)); }
3427 #line 3428 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3428  break;
3429 
3430  case 24:
3431 #line 509 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3432  { (yyval.tree_constant_type) = parser.make_constant (SQ_STRING, (yyvsp[0].tok_val)); }
3433 #line 3434 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3434  break;
3435 
3436  case 25:
3437 #line 513 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3438  { (yyval.tree_constant_type) = parser.make_constant (NUM, (yyvsp[0].tok_val)); }
3439 #line 3440 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3440  break;
3441 
3442  case 26:
3443 #line 515 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3444  { (yyval.tree_constant_type) = parser.make_constant (IMAG_NUM, (yyvsp[0].tok_val)); }
3445 #line 3446 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3446  break;
3447 
3448  case 27:
3449 #line 517 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3450  { (yyval.tree_constant_type) = (yyvsp[0].tree_constant_type); }
3451 #line 3452 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3452  break;
3453 
3454  case 28:
3455 #line 521 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3456  { (yyval.tree_expression_type) = parser.finish_matrix ((yyvsp[-1].tree_matrix_type)); }
3457 #line 3458 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3458  break;
3459 
3460  case 29:
3461 #line 525 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3462  { (yyval.tree_matrix_type) = (yyvsp[0].tree_argument_list_type) ? new tree_matrix ((yyvsp[0].tree_argument_list_type)) : 0; }
3463 #line 3464 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3464  break;
3465 
3466  case 30:
3467 #line 527 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3468  {
3469  if ((yyvsp[-2].tree_matrix_type))
3470  {
3471  if ((yyvsp[0].tree_argument_list_type))
3472  (yyvsp[-2].tree_matrix_type)->append ((yyvsp[0].tree_argument_list_type));
3473 
3474  (yyval.tree_matrix_type) = (yyvsp[-2].tree_matrix_type);
3475  }
3476  else
3477  (yyval.tree_matrix_type) = (yyvsp[0].tree_argument_list_type) ? new tree_matrix ((yyvsp[0].tree_argument_list_type)) : 0;
3478  }
3479 #line 3480 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3480  break;
3481 
3482  case 31:
3483 #line 541 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3484  { (yyval.tree_expression_type) = parser.finish_cell ((yyvsp[-1].tree_cell_type)); }
3485 #line 3486 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3486  break;
3487 
3488  case 32:
3489 #line 545 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3490  { (yyval.tree_cell_type) = (yyvsp[0].tree_argument_list_type) ? new tree_cell ((yyvsp[0].tree_argument_list_type)) : 0; }
3491 #line 3492 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3492  break;
3493 
3494  case 33:
3495 #line 547 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3496  {
3497  if ((yyvsp[-2].tree_cell_type))
3498  {
3499  if ((yyvsp[0].tree_argument_list_type))
3500  (yyvsp[-2].tree_cell_type)->append ((yyvsp[0].tree_argument_list_type));
3501 
3502  (yyval.tree_cell_type) = (yyvsp[-2].tree_cell_type);
3503  }
3504  else
3505  (yyval.tree_cell_type) = (yyvsp[0].tree_argument_list_type) ? new tree_cell ((yyvsp[0].tree_argument_list_type)) : 0;
3506  }
3507 #line 3508 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3508  break;
3509 
3510  case 34:
3511 #line 565 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3512  { (yyval.tree_argument_list_type) = 0; }
3513 #line 3514 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3514  break;
3515 
3516  case 35:
3517 #line 567 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3518  { (yyval.tree_argument_list_type) = 0; }
3519 #line 3520 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3520  break;
3521 
3522  case 36:
3523 #line 569 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3524  { (yyval.tree_argument_list_type) = (yyvsp[0].tree_argument_list_type); }
3525 #line 3526 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3526  break;
3527 
3528  case 37:
3529 #line 571 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3530  { (yyval.tree_argument_list_type) = (yyvsp[-1].tree_argument_list_type); }
3531 #line 3532 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3532  break;
3533 
3534  case 38:
3535 #line 573 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3536  { (yyval.tree_argument_list_type) = (yyvsp[0].tree_argument_list_type); }
3537 #line 3538 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3538  break;
3539 
3540  case 39:
3541 #line 575 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3542  { (yyval.tree_argument_list_type) = (yyvsp[-1].tree_argument_list_type); }
3543 #line 3544 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3544  break;
3545 
3546  case 40:
3547 #line 579 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3548  {
3549  (yyval.tree_fcn_handle_type) = parser.make_fcn_handle ((yyvsp[0].tok_val));
3550  lexer.looking_at_function_handle--;
3551  }
3552 #line 3553 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3553  break;
3554 
3555  case 41:
3556 #line 586 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3557  {
3558  (yyval.tree_anon_fcn_handle_type) = parser.make_anon_fcn_handle ((yyvsp[-2].tree_parameter_list_type), (yyvsp[0].tree_statement_type));
3559  lexer.nesting_level.remove ();
3560  }
3561 #line 3562 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3562  break;
3563 
3564  case 42:
3565 #line 593 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3566  { (yyval.tree_expression_type) = (yyvsp[0].tree_identifier_type); }
3567 #line 3568 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3568  break;
3569 
3570  case 43:
3571 #line 595 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3572  { (yyval.tree_expression_type) = (yyvsp[0].tree_constant_type); }
3573 #line 3574 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3574  break;
3575 
3576  case 44:
3577 #line 597 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3578  { (yyval.tree_expression_type) = (yyvsp[0].tree_fcn_handle_type); }
3579 #line 3580 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3580  break;
3581 
3582  case 45:
3583 #line 599 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3584  {
3585  lexer.looking_at_matrix_or_assign_lhs = false;
3586  (yyval.tree_expression_type) = (yyvsp[0].tree_expression_type);
3587  }
3588 #line 3589 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3589  break;
3590 
3591  case 46:
3592 #line 604 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3593  { (yyval.tree_expression_type) = (yyvsp[0].tree_expression_type); }
3594 #line 3595 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3595  break;
3596 
3597  case 47:
3598 #line 606 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3599  { (yyval.tree_expression_type) = (yyvsp[0].tree_funcall_type); }
3600 #line 3601 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3601  break;
3602 
3603  case 48:
3604 #line 608 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3605  { (yyval.tree_expression_type) = (yyvsp[0].tree_funcall_type); }
3606 #line 3607 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3607  break;
3608 
3609  case 49:
3610 #line 610 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3611  { (yyval.tree_expression_type) = (yyvsp[-1].tree_expression_type)->mark_in_parens (); }
3612 #line 3613 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3613  break;
3614 
3615  case 50:
3616 #line 614 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3617  {
3618  YYUSE ((yyvsp[0].tok_val));
3619 
3621  (yyval.tree_constant_type) = new tree_constant (tmp);
3622  }
3623 #line 3624 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3624  break;
3625 
3626  case 51:
3627 #line 623 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3628  {
3629  YYUSE ((yyvsp[0].tok_val));
3630 
3631  (yyval.tree_identifier_type) = new tree_black_hole ();
3632  }
3633 #line 3634 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3634  break;
3635 
3636  case 52:
3637 #line 631 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3638  { (yyval.tree_argument_list_type) = new tree_argument_list ((yyvsp[0].tree_expression_type)); }
3639 #line 3640 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3640  break;
3641 
3642  case 53:
3643 #line 633 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3644  { (yyval.tree_argument_list_type) = new tree_argument_list ((yyvsp[0].tree_constant_type)); }
3645 #line 3646 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3646  break;
3647 
3648  case 54:
3649 #line 635 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3650  { (yyval.tree_argument_list_type) = new tree_argument_list ((yyvsp[0].tree_identifier_type)); }
3651 #line 3652 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3652  break;
3653 
3654  case 55:
3655 #line 637 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3656  {
3657  (yyvsp[-2].tree_argument_list_type)->append ((yyvsp[0].tree_constant_type));
3658  (yyval.tree_argument_list_type) = (yyvsp[-2].tree_argument_list_type);
3659  }
3660 #line 3661 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3661  break;
3662 
3663  case 56:
3664 #line 642 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3665  {
3666  (yyvsp[-2].tree_argument_list_type)->append ((yyvsp[0].tree_identifier_type));
3667  (yyval.tree_argument_list_type) = (yyvsp[-2].tree_argument_list_type);
3668  }
3669 #line 3670 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3670  break;
3671 
3672  case 57:
3673 #line 647 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3674  {
3675  (yyvsp[-2].tree_argument_list_type)->append ((yyvsp[0].tree_expression_type));
3676  (yyval.tree_argument_list_type) = (yyvsp[-2].tree_argument_list_type);
3677  }
3678 #line 3679 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3679  break;
3680 
3681  case 58:
3682 #line 654 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3683  {
3684  (yyval.dummy_type) = 0;
3685  lexer.looking_at_indirect_ref = true;
3686  }
3687 #line 3688 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3688  break;
3689 
3690  case 59:
3691 #line 661 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3692  { (yyval.tree_expression_type) = (yyvsp[0].tree_expression_type); }
3693 #line 3694 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3694  break;
3695 
3696  case 60:
3697 #line 663 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3698  { (yyval.tree_expression_type) = parser.make_postfix_op (PLUS_PLUS, (yyvsp[-1].tree_expression_type), (yyvsp[0].tok_val)); }
3699 #line 3700 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3700  break;
3701 
3702  case 61:
3703 #line 665 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3704  { (yyval.tree_expression_type) = parser.make_postfix_op (MINUS_MINUS, (yyvsp[-1].tree_expression_type), (yyvsp[0].tok_val)); }
3705 #line 3706 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3706  break;
3707 
3708  case 62:
3709 #line 667 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3710  {
3711  (yyval.tree_expression_type) = parser.make_index_expression ((yyvsp[-2].tree_expression_type), 0, '(');
3712  if (! (yyval.tree_expression_type))
3713  {
3714  // make_index_expression deleted $1.
3715  YYABORT;
3716  }
3717  }
3718 #line 3719 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3719  break;
3720 
3721  case 63:
3722 #line 676 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3723  {
3724  (yyval.tree_expression_type) = parser.make_index_expression ((yyvsp[-3].tree_expression_type), (yyvsp[-1].tree_argument_list_type), '(');
3725  if (! (yyval.tree_expression_type))
3726  {
3727  // make_index_expression deleted $1 and $3.
3728  YYABORT;
3729  }
3730  }
3731 #line 3732 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3732  break;
3733 
3734  case 64:
3735 #line 685 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3736  {
3737  (yyval.tree_expression_type) = parser.make_index_expression ((yyvsp[-2].tree_expression_type), 0, '{');
3738  if (! (yyval.tree_expression_type))
3739  {
3740  // make_index_expression deleted $1.
3741  YYABORT;
3742  }
3743  }
3744 #line 3745 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3745  break;
3746 
3747  case 65:
3748 #line 694 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3749  {
3750  (yyval.tree_expression_type) = parser.make_index_expression ((yyvsp[-3].tree_expression_type), (yyvsp[-1].tree_argument_list_type), '{');
3751  if (! (yyval.tree_expression_type))
3752  {
3753  // make_index_expression deleted $1 and $3.
3754  YYABORT;
3755  }
3756  }
3757 #line 3758 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3758  break;
3759 
3760  case 66:
3761 #line 703 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3762  { (yyval.tree_expression_type) = parser.make_postfix_op (HERMITIAN, (yyvsp[-1].tree_expression_type), (yyvsp[0].tok_val)); }
3763 #line 3764 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3764  break;
3765 
3766  case 67:
3767 #line 705 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3768  { (yyval.tree_expression_type) = parser.make_postfix_op (TRANSPOSE, (yyvsp[-1].tree_expression_type), (yyvsp[0].tok_val)); }
3769 #line 3770 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3770  break;
3771 
3772  case 68:
3773 #line 707 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3774  { (yyval.tree_expression_type) = parser.make_indirect_ref ((yyvsp[-2].tree_expression_type), (yyvsp[0].tok_val)->text ()); }
3775 #line 3776 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3776  break;
3777 
3778  case 69:
3779 #line 709 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3780  { (yyval.tree_expression_type) = parser.make_indirect_ref ((yyvsp[-4].tree_expression_type), (yyvsp[-1].tree_expression_type)); }
3781 #line 3782 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3782  break;
3783 
3784  case 70:
3785 #line 711 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3786  { (yyval.tree_expression_type) = parser.make_prefix_op (PLUS_PLUS, (yyvsp[0].tree_expression_type), (yyvsp[-1].tok_val)); }
3787 #line 3788 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3788  break;
3789 
3790  case 71:
3791 #line 713 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3792  { (yyval.tree_expression_type) = parser.make_prefix_op (MINUS_MINUS, (yyvsp[0].tree_expression_type), (yyvsp[-1].tok_val)); }
3793 #line 3794 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3794  break;
3795 
3796  case 72:
3797 #line 715 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3798  { (yyval.tree_expression_type) = parser.make_prefix_op (EXPR_NOT, (yyvsp[0].tree_expression_type), (yyvsp[-1].tok_val)); }
3799 #line 3800 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3800  break;
3801 
3802  case 73:
3803 #line 717 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3804  { (yyval.tree_expression_type) = parser.make_prefix_op ('+', (yyvsp[0].tree_expression_type), (yyvsp[-1].tok_val)); }
3805 #line 3806 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3806  break;
3807 
3808  case 74:
3809 #line 719 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3810  { (yyval.tree_expression_type) = parser.make_prefix_op ('-', (yyvsp[0].tree_expression_type), (yyvsp[-1].tok_val)); }
3811 #line 3812 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3812  break;
3813 
3814  case 75:
3815 #line 721 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3816  { (yyval.tree_expression_type) = parser.make_binary_op (POW, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3817 #line 3818 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3818  break;
3819 
3820  case 76:
3821 #line 723 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3822  { (yyval.tree_expression_type) = parser.make_binary_op (EPOW, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3823 #line 3824 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3824  break;
3825 
3826  case 77:
3827 #line 725 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3828  { (yyval.tree_expression_type) = parser.make_binary_op ('+', (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3829 #line 3830 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3830  break;
3831 
3832  case 78:
3833 #line 727 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3834  { (yyval.tree_expression_type) = parser.make_binary_op ('-', (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3835 #line 3836 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3836  break;
3837 
3838  case 79:
3839 #line 729 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3840  { (yyval.tree_expression_type) = parser.make_binary_op ('*', (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3841 #line 3842 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3842  break;
3843 
3844  case 80:
3845 #line 731 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3846  { (yyval.tree_expression_type) = parser.make_binary_op ('/', (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3847 #line 3848 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3848  break;
3849 
3850  case 81:
3851 #line 733 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3852  { (yyval.tree_expression_type) = parser.make_binary_op ('+', (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3853 #line 3854 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3854  break;
3855 
3856  case 82:
3857 #line 735 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3858  { (yyval.tree_expression_type) = parser.make_binary_op ('-', (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3859 #line 3860 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3860  break;
3861 
3862  case 83:
3863 #line 737 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3864  { (yyval.tree_expression_type) = parser.make_binary_op (EMUL, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3865 #line 3866 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3866  break;
3867 
3868  case 84:
3869 #line 739 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3870  { (yyval.tree_expression_type) = parser.make_binary_op (EDIV, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3871 #line 3872 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3872  break;
3873 
3874  case 85:
3875 #line 741 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3876  { (yyval.tree_expression_type) = parser.make_binary_op (LEFTDIV, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3877 #line 3878 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3878  break;
3879 
3880  case 86:
3881 #line 743 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3882  { (yyval.tree_expression_type) = parser.make_binary_op (ELEFTDIV, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
3883 #line 3884 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3884  break;
3885 
3886  case 87:
3887 #line 747 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3888  { (yyval.tree_expression_type) = (yyvsp[0].tree_expression_type); }
3889 #line 3890 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3890  break;
3891 
3892  case 88:
3893 #line 749 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3894  { (yyval.tree_expression_type) = parser.make_postfix_op (PLUS_PLUS, (yyvsp[-1].tree_expression_type), (yyvsp[0].tok_val)); }
3895 #line 3896 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3896  break;
3897 
3898  case 89:
3899 #line 751 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3900  { (yyval.tree_expression_type) = parser.make_postfix_op (MINUS_MINUS, (yyvsp[-1].tree_expression_type), (yyvsp[0].tok_val)); }
3901 #line 3902 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3902  break;
3903 
3904  case 90:
3905 #line 753 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3906  {
3907  (yyval.tree_expression_type) = parser.make_index_expression ((yyvsp[-2].tree_expression_type), 0, '(');
3908  if (! (yyval.tree_expression_type))
3909  {
3910  // make_index_expression deleted $1.
3911  YYABORT;
3912  }
3913  }
3914 #line 3915 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3915  break;
3916 
3917  case 91:
3918 #line 762 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3919  {
3920  (yyval.tree_expression_type) = parser.make_index_expression ((yyvsp[-3].tree_expression_type), (yyvsp[-1].tree_argument_list_type), '(');
3921  if (! (yyval.tree_expression_type))
3922  {
3923  // make_index_expression deleted $1 and $3.
3924  YYABORT;
3925  }
3926  }
3927 #line 3928 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3928  break;
3929 
3930  case 92:
3931 #line 771 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3932  {
3933  (yyval.tree_expression_type) = parser.make_index_expression ((yyvsp[-2].tree_expression_type), 0, '{');
3934  if (! (yyval.tree_expression_type))
3935  {
3936  // make_index_expression deleted $1.
3937  YYABORT;
3938  }
3939  }
3940 #line 3941 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3941  break;
3942 
3943  case 93:
3944 #line 780 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3945  {
3946  (yyval.tree_expression_type) = parser.make_index_expression ((yyvsp[-3].tree_expression_type), (yyvsp[-1].tree_argument_list_type), '{');
3947  if (! (yyval.tree_expression_type))
3948  {
3949  // make_index_expression deleted $1 and $3.
3950  YYABORT;
3951  }
3952  }
3953 #line 3954 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3954  break;
3955 
3956  case 94:
3957 #line 789 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3958  { (yyval.tree_expression_type) = parser.make_indirect_ref ((yyvsp[-2].tree_expression_type), (yyvsp[0].tok_val)->text ()); }
3959 #line 3960 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3960  break;
3961 
3962  case 95:
3963 #line 791 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3964  { (yyval.tree_expression_type) = parser.make_indirect_ref ((yyvsp[-4].tree_expression_type), (yyvsp[-1].tree_expression_type)); }
3965 #line 3966 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3966  break;
3967 
3968  case 96:
3969 #line 793 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3970  { (yyval.tree_expression_type) = parser.make_prefix_op (PLUS_PLUS, (yyvsp[0].tree_expression_type), (yyvsp[-1].tok_val)); }
3971 #line 3972 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3972  break;
3973 
3974  case 97:
3975 #line 795 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3976  { (yyval.tree_expression_type) = parser.make_prefix_op (MINUS_MINUS, (yyvsp[0].tree_expression_type), (yyvsp[-1].tok_val)); }
3977 #line 3978 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3978  break;
3979 
3980  case 98:
3981 #line 797 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3982  { (yyval.tree_expression_type) = parser.make_prefix_op (EXPR_NOT, (yyvsp[0].tree_expression_type), (yyvsp[-1].tok_val)); }
3983 #line 3984 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3984  break;
3985 
3986  case 99:
3987 #line 799 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3988  { (yyval.tree_expression_type) = parser.make_prefix_op ('+', (yyvsp[0].tree_expression_type), (yyvsp[-1].tok_val)); }
3989 #line 3990 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3990  break;
3991 
3992  case 100:
3993 #line 801 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
3994  { (yyval.tree_expression_type) = parser.make_prefix_op ('-', (yyvsp[0].tree_expression_type), (yyvsp[-1].tok_val)); }
3995 #line 3996 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
3996  break;
3997 
3998  case 101:
3999 #line 805 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4000  { (yyval.tree_expression_type) = parser.finish_colon_expression ((yyvsp[0].tree_colon_expression_type)); }
4001 #line 4002 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4002  break;
4003 
4004  case 102:
4005 #line 809 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4006  { (yyval.tree_colon_expression_type) = new tree_colon_expression ((yyvsp[0].tree_expression_type)); }
4007 #line 4008 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4008  break;
4009 
4010  case 103:
4011 #line 811 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4012  {
4013  YYUSE ((yyvsp[-1].tok_val));
4014 
4015  if (! ((yyval.tree_colon_expression_type) = (yyvsp[-2].tree_colon_expression_type)->append ((yyvsp[0].tree_expression_type))))
4016  {
4017  delete (yyvsp[-2].tree_colon_expression_type);
4018  delete (yyvsp[0].tree_expression_type);
4019  YYABORT;
4020  }
4021  }
4022 #line 4023 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4023  break;
4024 
4025  case 104:
4026 #line 824 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4027  { (yyval.tree_expression_type) = (yyvsp[0].tree_expression_type); }
4028 #line 4029 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4029  break;
4030 
4031  case 105:
4032 #line 826 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4033  { (yyval.tree_expression_type) = parser.make_binary_op (EXPR_LT, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4034 #line 4035 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4035  break;
4036 
4037  case 106:
4038 #line 828 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4039  { (yyval.tree_expression_type) = parser.make_binary_op (EXPR_LE, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4040 #line 4041 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4041  break;
4042 
4043  case 107:
4044 #line 830 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4045  { (yyval.tree_expression_type) = parser.make_binary_op (EXPR_EQ, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4046 #line 4047 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4047  break;
4048 
4049  case 108:
4050 #line 832 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4051  { (yyval.tree_expression_type) = parser.make_binary_op (EXPR_GE, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4052 #line 4053 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4053  break;
4054 
4055  case 109:
4056 #line 834 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4057  { (yyval.tree_expression_type) = parser.make_binary_op (EXPR_GT, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4058 #line 4059 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4059  break;
4060 
4061  case 110:
4062 #line 836 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4063  { (yyval.tree_expression_type) = parser.make_binary_op (EXPR_NE, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4064 #line 4065 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4065  break;
4066 
4067  case 111:
4068 #line 838 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4069  { (yyval.tree_expression_type) = parser.make_binary_op (EXPR_AND, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4070 #line 4071 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4071  break;
4072 
4073  case 112:
4074 #line 840 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4075  { (yyval.tree_expression_type) = parser.make_binary_op (EXPR_OR, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4076 #line 4077 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4077  break;
4078 
4079  case 113:
4080 #line 842 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4081  { (yyval.tree_expression_type) = parser.make_boolean_op (EXPR_AND_AND, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4082 #line 4083 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4083  break;
4084 
4085  case 114:
4086 #line 844 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4087  { (yyval.tree_expression_type) = parser.make_boolean_op (EXPR_OR_OR, (yyvsp[-2].tree_expression_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4088 #line 4089 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4089  break;
4090 
4091  case 115:
4092 #line 848 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4093  {
4094  (yyval.tree_argument_list_type) = parser.validate_matrix_for_assignment ((yyvsp[0].tree_expression_type));
4095 
4096  if ((yyval.tree_argument_list_type))
4097  { lexer.looking_at_matrix_or_assign_lhs = false; }
4098  else
4099  {
4100  // validate_matrix_for_assignment deleted $1.
4101  YYABORT;
4102  }
4103  }
4104 #line 4105 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4105  break;
4106 
4107  case 116:
4108 #line 862 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4109  { (yyval.tree_expression_type) = parser.make_assign_op ('=', (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4110 #line 4111 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4111  break;
4112 
4113  case 117:
4114 #line 864 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4115  { (yyval.tree_expression_type) = parser.make_assign_op (ADD_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4116 #line 4117 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4117  break;
4118 
4119  case 118:
4120 #line 866 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4121  { (yyval.tree_expression_type) = parser.make_assign_op (SUB_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4122 #line 4123 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4123  break;
4124 
4125  case 119:
4126 #line 868 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4127  { (yyval.tree_expression_type) = parser.make_assign_op (MUL_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4128 #line 4129 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4129  break;
4130 
4131  case 120:
4132 #line 870 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4133  { (yyval.tree_expression_type) = parser.make_assign_op (DIV_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4134 #line 4135 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4135  break;
4136 
4137  case 121:
4138 #line 872 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4139  { (yyval.tree_expression_type) = parser.make_assign_op (LEFTDIV_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4140 #line 4141 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4141  break;
4142 
4143  case 122:
4144 #line 874 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4145  { (yyval.tree_expression_type) = parser.make_assign_op (POW_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4146 #line 4147 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4147  break;
4148 
4149  case 123:
4150 #line 876 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4151  { (yyval.tree_expression_type) = parser.make_assign_op (EMUL_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4152 #line 4153 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4153  break;
4154 
4155  case 124:
4156 #line 878 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4157  { (yyval.tree_expression_type) = parser.make_assign_op (EDIV_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4158 #line 4159 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4159  break;
4160 
4161  case 125:
4162 #line 880 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4163  { (yyval.tree_expression_type) = parser.make_assign_op (ELEFTDIV_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4164 #line 4165 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4165  break;
4166 
4167  case 126:
4168 #line 882 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4169  { (yyval.tree_expression_type) = parser.make_assign_op (EPOW_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4170 #line 4171 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4171  break;
4172 
4173  case 127:
4174 #line 884 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4175  { (yyval.tree_expression_type) = parser.make_assign_op (AND_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4176 #line 4177 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4177  break;
4178 
4179  case 128:
4180 #line 886 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4181  { (yyval.tree_expression_type) = parser.make_assign_op (OR_EQ, (yyvsp[-2].tree_argument_list_type), (yyvsp[-1].tok_val), (yyvsp[0].tree_expression_type)); }
4182 #line 4183 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4183  break;
4184 
4185  case 129:
4186 #line 890 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4187  {
4188  if ((yyvsp[0].tree_expression_type) && ((yyvsp[0].tree_expression_type)->is_matrix () || (yyvsp[0].tree_expression_type)->is_cell ()))
4189  {
4190  if (parser.validate_array_list ((yyvsp[0].tree_expression_type)))
4191  (yyval.tree_expression_type) = (yyvsp[0].tree_expression_type);
4192  else
4193  {
4194  delete (yyvsp[0].tree_expression_type);
4195  YYABORT;
4196  }
4197  }
4198  else
4199  (yyval.tree_expression_type) = (yyvsp[0].tree_expression_type);
4200  }
4201 #line 4202 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4202  break;
4203 
4204  case 130:
4205 #line 905 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4206  {
4207  if (! (yyvsp[0].tree_expression_type))
4208  YYABORT;
4209 
4210  (yyval.tree_expression_type) = (yyvsp[0].tree_expression_type);
4211  }
4212 #line 4213 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4213  break;
4214 
4215  case 131:
4216 #line 912 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4217  { (yyval.tree_expression_type) = (yyvsp[0].tree_anon_fcn_handle_type); }
4218 #line 4219 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4219  break;
4220 
4221  case 132:
4222 #line 920 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4223  { (yyval.tree_command_type) = (yyvsp[0].tree_decl_command_type); }
4224 #line 4225 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4225  break;
4226 
4227  case 133:
4228 #line 922 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4229  { (yyval.tree_command_type) = (yyvsp[0].tree_command_type); }
4230 #line 4231 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4231  break;
4232 
4233  case 134:
4234 #line 924 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4235  { (yyval.tree_command_type) = (yyvsp[0].tree_command_type); }
4236 #line 4237 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4237  break;
4238 
4239  case 135:
4240 #line 926 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4241  { (yyval.tree_command_type) = (yyvsp[0].tree_command_type); }
4242 #line 4243 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4243  break;
4244 
4245  case 136:
4246 #line 928 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4247  { (yyval.tree_command_type) = (yyvsp[0].tree_command_type); }
4248 #line 4249 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4249  break;
4250 
4251  case 137:
4252 #line 930 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4253  { (yyval.tree_command_type) = (yyvsp[0].tree_function_def_type); }
4254 #line 4255 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4255  break;
4256 
4257  case 138:
4258 #line 932 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4259  { (yyval.tree_command_type) = (yyvsp[0].tree_command_type); }
4260 #line 4261 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4261  break;
4262 
4263  case 139:
4264 #line 940 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4265  {
4266  (yyval.tree_decl_command_type) = parser.make_decl_command (GLOBAL, (yyvsp[-1].tok_val), (yyvsp[0].tree_decl_init_list_type));
4267  lexer.looking_at_decl_list = false;
4268  }
4269 #line 4270 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4270  break;
4271 
4272  case 140:
4273 #line 945 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4274  {
4275  (yyval.tree_decl_command_type) = parser.make_decl_command (PERSISTENT, (yyvsp[-1].tok_val), (yyvsp[0].tree_decl_init_list_type));
4276  lexer.looking_at_decl_list = false;
4277  }
4278 #line 4279 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4279  break;
4280 
4281  case 141:
4282 #line 952 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4283  { (yyval.tree_decl_init_list_type) = new tree_decl_init_list ((yyvsp[0].tree_decl_elt_type)); }
4284 #line 4285 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4285  break;
4286 
4287  case 142:
4288 #line 954 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4289  {
4290  (yyvsp[-1].tree_decl_init_list_type)->append ((yyvsp[0].tree_decl_elt_type));
4291  (yyval.tree_decl_init_list_type) = (yyvsp[-1].tree_decl_init_list_type);
4292  }
4293 #line 4294 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4294  break;
4295 
4296  case 143:
4297 #line 961 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4298  {
4299  (yyval.dummy_type) = 0;
4300  lexer.looking_at_initializer_expression = true;
4301  }
4302 #line 4303 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4303  break;
4304 
4305  case 144:
4306 #line 967 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4307  { (yyval.tree_decl_elt_type) = new tree_decl_elt ((yyvsp[0].tree_identifier_type)); }
4308 #line 4309 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4309  break;
4310 
4311  case 145:
4312 #line 969 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4313  {
4314  YYUSE ((yyvsp[-2].tok_val));
4315 
4316  lexer.looking_at_initializer_expression = false;
4317  (yyval.tree_decl_elt_type) = new tree_decl_elt ((yyvsp[-3].tree_identifier_type), (yyvsp[0].tree_expression_type));
4318  }
4319 #line 4320 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4320  break;
4321 
4322  case 146:
4323 #line 982 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4324  { (yyval.tree_command_type) = (yyvsp[0].tree_if_command_type); }
4325 #line 4326 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4326  break;
4327 
4328  case 147:
4329 #line 984 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4330  { (yyval.tree_command_type) = (yyvsp[0].tree_switch_command_type); }
4331 #line 4332 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4332  break;
4333 
4334  case 148:
4335 #line 992 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4336  {
4337  if (! ((yyval.tree_if_command_type) = parser.finish_if_command ((yyvsp[-3].tok_val), (yyvsp[-1].tree_if_command_list_type), (yyvsp[0].tok_val), (yyvsp[-2].comment_type))))
4338  {
4339  // finish_if_command deleted $3.
4340  YYABORT;
4341  }
4342  }
4343 #line 4344 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4344  break;
4345 
4346  case 149:
4347 #line 1002 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4348  { (yyval.tree_if_command_list_type) = (yyvsp[0].tree_if_command_list_type); }
4349 #line 4350 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4350  break;
4351 
4352  case 150:
4353 #line 1004 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4354  {
4355  (yyvsp[-1].tree_if_command_list_type)->append ((yyvsp[0].tree_if_clause_type));
4356  (yyval.tree_if_command_list_type) = (yyvsp[-1].tree_if_command_list_type);
4357  }
4358 #line 4359 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4359  break;
4360 
4361  case 151:
4362 #line 1011 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4363  {
4364  YYUSE ((yyvsp[-1].punct_type));
4365 
4366  (yyvsp[-3].tree_expression_type)->mark_braindead_shortcircuit ();
4367 
4368  (yyval.tree_if_command_list_type) = parser.start_if_command ((yyvsp[-3].tree_expression_type), (yyvsp[0].tree_statement_list_type));
4369  }
4370 #line 4371 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4371  break;
4372 
4373  case 152:
4374 #line 1019 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4375  {
4376  (yyvsp[-1].tree_if_command_list_type)->append ((yyvsp[0].tree_if_clause_type));
4377  (yyval.tree_if_command_list_type) = (yyvsp[-1].tree_if_command_list_type);
4378  }
4379 #line 4380 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4380  break;
4381 
4382  case 153:
4383 #line 1026 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4384  {
4385  YYUSE ((yyvsp[-4].punct_type));
4386  YYUSE ((yyvsp[-1].punct_type));
4387 
4388  (yyvsp[-3].tree_expression_type)->mark_braindead_shortcircuit ();
4389 
4390  (yyval.tree_if_clause_type) = parser.make_elseif_clause ((yyvsp[-6].tok_val), (yyvsp[-3].tree_expression_type), (yyvsp[0].tree_statement_list_type), (yyvsp[-5].comment_type));
4391  }
4392 #line 4393 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4393  break;
4394 
4395  case 154:
4396 #line 1037 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4397  {
4398  YYUSE ((yyvsp[-3].tok_val));
4399  YYUSE ((yyvsp[-1].punct_type));
4400 
4401  (yyval.tree_if_clause_type) = new tree_if_clause ((yyvsp[0].tree_statement_list_type), (yyvsp[-2].comment_type));
4402  }
4403 #line 4404 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4404  break;
4405 
4406  case 155:
4407 #line 1050 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4408  {
4409  YYUSE ((yyvsp[-2].punct_type));
4410 
4411  if (! ((yyval.tree_switch_command_type) = parser.finish_switch_command ((yyvsp[-5].tok_val), (yyvsp[-3].tree_expression_type), (yyvsp[-1].tree_switch_case_list_type), (yyvsp[0].tok_val), (yyvsp[-4].comment_type))))
4412  {
4413  // finish_switch_command deleted $3 adn $5.
4414  YYABORT;
4415  }
4416  }
4417 #line 4418 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4418  break;
4419 
4420  case 156:
4421 #line 1062 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4422  { (yyval.tree_switch_case_list_type) = new tree_switch_case_list (); }
4423 #line 4424 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4424  break;
4425 
4426  case 157:
4427 #line 1064 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4428  { (yyval.tree_switch_case_list_type) = new tree_switch_case_list ((yyvsp[0].tree_switch_case_type)); }
4429 #line 4430 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4430  break;
4431 
4432  case 158:
4433 #line 1066 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4434  { (yyval.tree_switch_case_list_type) = (yyvsp[0].tree_switch_case_list_type); }
4435 #line 4436 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4436  break;
4437 
4438  case 159:
4439 #line 1068 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4440  {
4441  (yyvsp[-1].tree_switch_case_list_type)->append ((yyvsp[0].tree_switch_case_type));
4442  (yyval.tree_switch_case_list_type) = (yyvsp[-1].tree_switch_case_list_type);
4443  }
4444 #line 4445 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4445  break;
4446 
4447  case 160:
4448 #line 1075 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4449  { (yyval.tree_switch_case_list_type) = new tree_switch_case_list ((yyvsp[0].tree_switch_case_type)); }
4450 #line 4451 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4451  break;
4452 
4453  case 161:
4454 #line 1077 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4455  {
4456  (yyvsp[-1].tree_switch_case_list_type)->append ((yyvsp[0].tree_switch_case_type));
4457  (yyval.tree_switch_case_list_type) = (yyvsp[-1].tree_switch_case_list_type);
4458  }
4459 #line 4460 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4460  break;
4461 
4462  case 162:
4463 #line 1084 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4464  {
4465  YYUSE ((yyvsp[-4].punct_type));
4466  YYUSE ((yyvsp[-1].punct_type));
4467 
4468  (yyval.tree_switch_case_type) = parser.make_switch_case ((yyvsp[-6].tok_val), (yyvsp[-3].tree_expression_type), (yyvsp[0].tree_statement_list_type), (yyvsp[-5].comment_type));
4469  }
4470 #line 4471 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4471  break;
4472 
4473  case 163:
4474 #line 1093 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4475  {
4476  YYUSE ((yyvsp[-3].tok_val));
4477  YYUSE ((yyvsp[-1].punct_type));
4478 
4479  (yyval.tree_switch_case_type) = new tree_switch_case ((yyvsp[0].tree_statement_list_type), (yyvsp[-2].comment_type));
4480  }
4481 #line 4482 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4482  break;
4483 
4484  case 164:
4485 #line 1106 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4486  {
4487  YYUSE ((yyvsp[-2].punct_type));
4488 
4489  (yyvsp[-4].tree_expression_type)->mark_braindead_shortcircuit ();
4490 
4491  if (! ((yyval.tree_command_type) = parser.make_while_command ((yyvsp[-6].tok_val), (yyvsp[-4].tree_expression_type), (yyvsp[-1].tree_statement_list_type), (yyvsp[0].tok_val), (yyvsp[-5].comment_type))))
4492  {
4493  // make_while_command deleted $3 and $6.
4494  YYABORT;
4495  }
4496  }
4497 #line 4498 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4498  break;
4499 
4500  case 165:
4501 #line 1118 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4502  {
4503  YYUSE ((yyvsp[-5].tok_val));
4504  YYUSE ((yyvsp[-3].punct_type));
4505 
4506  (yyval.tree_command_type) = parser.make_do_until_command ((yyvsp[-1].tok_val), (yyvsp[-2].tree_statement_list_type), (yyvsp[0].tree_expression_type), (yyvsp[-4].comment_type));
4507  }
4508 #line 4509 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4509  break;
4510 
4511  case 166:
4512 #line 1125 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4513  {
4514  YYUSE ((yyvsp[-5].tok_val));
4515  YYUSE ((yyvsp[-2].punct_type));
4516 
4517  if (! ((yyval.tree_command_type) = parser.make_for_command (FOR, (yyvsp[-8].tok_val), (yyvsp[-6].tree_argument_list_type), (yyvsp[-4].tree_expression_type), 0,
4518  (yyvsp[-1].tree_statement_list_type), (yyvsp[0].tok_val), (yyvsp[-7].comment_type))))
4519  {
4520  // make_for_command deleted $3, $5, and $8.
4521  YYABORT;
4522  }
4523  }
4524 #line 4525 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4525  break;
4526 
4527  case 167:
4528 #line 1137 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4529  {
4530  YYUSE ((yyvsp[-5].tok_val));
4531  YYUSE ((yyvsp[-2].punct_type));
4532 
4533  if (! ((yyval.tree_command_type) = parser.make_for_command (FOR, (yyvsp[-9].tok_val), (yyvsp[-6].tree_argument_list_type), (yyvsp[-4].tree_expression_type), 0,
4534  (yyvsp[-1].tree_statement_list_type), (yyvsp[0].tok_val), (yyvsp[-8].comment_type))))
4535  {
4536  // make_for_command deleted $4, $6, and $9.
4537  YYABORT;
4538  }
4539  }
4540 #line 4541 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4541  break;
4542 
4543  case 168:
4544 #line 1149 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4545  {
4546  YYUSE ((yyvsp[-5].tok_val));
4547  YYUSE ((yyvsp[-2].punct_type));
4548 
4549  if (! ((yyval.tree_command_type) = parser.make_for_command (PARFOR, (yyvsp[-8].tok_val), (yyvsp[-6].tree_argument_list_type), (yyvsp[-4].tree_expression_type),
4550  0, (yyvsp[-1].tree_statement_list_type), (yyvsp[0].tok_val), (yyvsp[-7].comment_type))))
4551  {
4552  // make_for_command deleted $3, $5, and $8.
4553  YYABORT;
4554  }
4555  }
4556 #line 4557 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4557  break;
4558 
4559  case 169:
4560 #line 1161 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4561  {
4562  YYUSE ((yyvsp[-7].tok_val));
4563  YYUSE ((yyvsp[-2].punct_type));
4564 
4565  if (! ((yyval.tree_command_type) = parser.make_for_command (PARFOR, (yyvsp[-11].tok_val), (yyvsp[-8].tree_argument_list_type), (yyvsp[-6].tree_expression_type),
4566  (yyvsp[-4].tree_expression_type), (yyvsp[-1].tree_statement_list_type), (yyvsp[0].tok_val), (yyvsp[-10].comment_type))))
4567  {
4568  // make_for_command deleted $4, $6, $8, and $11.
4569  YYABORT;
4570  }
4571  }
4572 #line 4573 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4573  break;
4574 
4575  case 170:
4576 #line 1179 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4577  { (yyval.tree_command_type) = parser.make_break_command ((yyvsp[0].tok_val)); }
4578 #line 4579 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4579  break;
4580 
4581  case 171:
4582 #line 1181 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4583  { (yyval.tree_command_type) = parser.make_continue_command ((yyvsp[0].tok_val)); }
4584 #line 4585 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4585  break;
4586 
4587  case 172:
4588 #line 1183 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4589  { (yyval.tree_command_type) = parser.make_return_command ((yyvsp[0].tok_val)); }
4590 #line 4591 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4591  break;
4592 
4593  case 173:
4594 #line 1192 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4595  {
4596  YYUSE ((yyvsp[-6].punct_type));
4597  YYUSE ((yyvsp[-4].tok_val));
4598  YYUSE ((yyvsp[-2].punct_type));
4599 
4600  if (! ((yyval.tree_command_type) = parser.make_unwind_command ((yyvsp[-8].tok_val), (yyvsp[-5].tree_statement_list_type), (yyvsp[-1].tree_statement_list_type), (yyvsp[0].tok_val), (yyvsp[-7].comment_type), (yyvsp[-3].comment_type))))
4601  {
4602  // make_unwind_command deleted $4 and $8.
4603  YYABORT;
4604  }
4605  }
4606 #line 4607 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4607  break;
4608 
4609  case 174:
4610 #line 1205 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4611  {
4612  YYUSE ((yyvsp[-6].punct_type));
4613  YYUSE ((yyvsp[-4].tok_val));
4614  YYUSE ((yyvsp[-2].punct_type));
4615 
4616  if (! ((yyval.tree_command_type) = parser.make_try_command ((yyvsp[-8].tok_val), (yyvsp[-5].tree_statement_list_type), (yyvsp[-2].punct_type), (yyvsp[-1].tree_statement_list_type), (yyvsp[0].tok_val), (yyvsp[-7].comment_type), (yyvsp[-3].comment_type))))
4617  {
4618  // make_try_command deleted $4 and $8.
4619  YYABORT;
4620  }
4621  }
4622 #line 4623 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4623  break;
4624 
4625  case 175:
4626 #line 1217 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4627  {
4628  YYUSE ((yyvsp[-2].punct_type));
4629 
4630  if (! ((yyval.tree_command_type) = parser.make_try_command ((yyvsp[-4].tok_val), (yyvsp[-1].tree_statement_list_type), 0, 0, (yyvsp[0].tok_val), (yyvsp[-3].comment_type), 0)))
4631  {
4632  // make_try_command deleted $4.
4633  YYABORT;
4634  }
4635  }
4636 #line 4637 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4637  break;
4638 
4639  case 176:
4640 #line 1233 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4641  {
4642  (yyval.dummy_type) = 0;
4643 
4644  parser.curr_fcn_depth++;
4645 
4646  if (parser.max_fcn_depth < parser.curr_fcn_depth)
4647  parser.max_fcn_depth = parser.curr_fcn_depth;
4648 
4649  lexer.symtab_context.push (symbol_table::alloc_scope ());
4650 
4651  parser.function_scopes.push_back
4652  (lexer.symtab_context.curr_scope ());
4653 
4654  if (! lexer.reading_script_file
4655  && parser.curr_fcn_depth == 1
4656  && ! parser.parsing_subfunctions)
4657  parser.primary_fcn_scope
4658  = lexer.symtab_context.curr_scope ();
4659 
4660  if (lexer.reading_script_file
4661  && parser.curr_fcn_depth > 1)
4662  {
4663  parser.bison_error ("nested functions not implemented in this context");
4664  YYABORT;
4665  }
4666  }
4667 #line 4668 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4668  break;
4669 
4670  case 177:
4671 #line 1266 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4672  {
4673  (yyval.dummy_type) = 0;
4674  lexer.looking_at_parameter_list = true;
4675 
4676  if (lexer.looking_at_function_handle)
4677  {
4678  lexer.symtab_context.push (symbol_table::alloc_scope ());
4679  lexer.looking_at_function_handle--;
4680  lexer.looking_at_anon_fcn_args = true;
4681  }
4682  }
4683 #line 4684 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4684  break;
4685 
4686  case 178:
4687 #line 1280 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4688  {
4689  (yyval.dummy_type) = 0;
4690  lexer.looking_at_parameter_list = false;
4691  lexer.looking_for_object_index = false;
4692  }
4693 #line 4694 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4694  break;
4695 
4696  case 179:
4697 #line 1288 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4698  {
4699  if ((yyvsp[-1].tree_parameter_list_type))
4700  lexer.mark_as_variables ((yyvsp[-1].tree_parameter_list_type)->variable_names ());
4701 
4702  (yyval.tree_parameter_list_type) = (yyvsp[-1].tree_parameter_list_type);
4703  }
4704 #line 4705 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4705  break;
4706 
4707  case 180:
4708 #line 1295 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4709  {
4710  (yyval.tree_parameter_list_type) = 0;
4711  parser.bison_error ("invalid parameter list");
4712  YYABORT;
4713  }
4714 #line 4715 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4715  break;
4716 
4717  case 181:
4718 #line 1303 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4719  { (yyval.tree_parameter_list_type) = 0; }
4720 #line 4721 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4721  break;
4722 
4723  case 182:
4724 #line 1305 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4725  {
4726  (yyvsp[0].tree_parameter_list_type)->mark_as_formal_parameters ();
4727  if ((yyvsp[0].tree_parameter_list_type)->validate (tree_parameter_list::in))
4728  {
4729  lexer.mark_as_variables ((yyvsp[0].tree_parameter_list_type)->variable_names ());
4730  (yyval.tree_parameter_list_type) = (yyvsp[0].tree_parameter_list_type);
4731  }
4732  else
4733  {
4734  delete (yyvsp[0].tree_parameter_list_type);
4735  YYABORT;
4736  }
4737  }
4738 #line 4739 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4739  break;
4740 
4741  case 183:
4742 #line 1321 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4743  { (yyval.tree_parameter_list_type) = new tree_parameter_list ((yyvsp[0].tree_decl_elt_type)); }
4744 #line 4745 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4745  break;
4746 
4747  case 184:
4748 #line 1323 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4749  {
4750  (yyvsp[-2].tree_parameter_list_type)->append ((yyvsp[0].tree_decl_elt_type));
4751  (yyval.tree_parameter_list_type) = (yyvsp[-2].tree_parameter_list_type);
4752  }
4753 #line 4754 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4754  break;
4755 
4756  case 185:
4757 #line 1330 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4758  { (yyval.tree_decl_elt_type) = (yyvsp[0].tree_decl_elt_type); }
4759 #line 4760 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4760  break;
4761 
4762  case 186:
4763 #line 1332 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4764  { (yyval.tree_decl_elt_type) = new tree_decl_elt ((yyvsp[0].tree_identifier_type)); }
4765 #line 4766 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4766  break;
4767 
4768  case 187:
4769 #line 1340 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4770  {
4771  lexer.looking_at_return_list = false;
4772 
4773  (yyval.tree_parameter_list_type) = new tree_parameter_list ();
4774  }
4775 #line 4776 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4776  break;
4777 
4778  case 188:
4779 #line 1346 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4780  {
4781  lexer.looking_at_return_list = false;
4782 
4783  tree_parameter_list *tmp = new tree_parameter_list ((yyvsp[0].tree_identifier_type));
4784 
4785  // Even though this parameter list can contain only
4786  // a single identifier, we still need to validate it
4787  // to check for varargin or varargout.
4788 
4790  (yyval.tree_parameter_list_type) = tmp;
4791  else
4792  {
4793  delete tmp;
4794  YYABORT;
4795  }
4796  }
4797 #line 4798 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4798  break;
4799 
4800  case 189:
4801 #line 1364 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4802  {
4803  lexer.looking_at_return_list = false;
4804 
4805  // Check for duplicate parameter names, varargin,
4806  // or varargout.
4807 
4808  if ((yyvsp[-1].tree_parameter_list_type)->validate (tree_parameter_list::out))
4809  (yyval.tree_parameter_list_type) = (yyvsp[-1].tree_parameter_list_type);
4810  else
4811  {
4812  delete (yyvsp[-1].tree_parameter_list_type);
4813  YYABORT;
4814  }
4815  }
4816 #line 4817 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4817  break;
4818 
4819  case 190:
4820 #line 1381 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4821  { (yyval.tree_parameter_list_type) = new tree_parameter_list (new tree_decl_elt ((yyvsp[0].tree_identifier_type))); }
4822 #line 4823 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4823  break;
4824 
4825  case 191:
4826 #line 1383 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4827  {
4828  (yyvsp[-2].tree_parameter_list_type)->append (new tree_decl_elt ((yyvsp[0].tree_identifier_type)));
4829  (yyval.tree_parameter_list_type) = (yyvsp[-2].tree_parameter_list_type);
4830  }
4831 #line 4832 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4832  break;
4833 
4834  case 192:
4835 #line 1394 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4836  {
4837  YYUSE ((yyvsp[-2].punct_type));
4838 
4839  if (lexer.reading_fcn_file)
4840  {
4841  // Delete the dummy statement_list we created
4842  // after parsing the function. Any function
4843  // definitions found in the file have already
4844  // been stored in the symbol table or in
4845  // base_parser::primary_fcn_ptr.
4846 
4847  delete (yyvsp[-1].tree_statement_list_type);
4848  }
4849  else
4850  {
4851  tree_statement *end_of_script
4852  = parser.make_end ("endscript", true,
4853  lexer.input_line_number,
4854  lexer.current_input_column);
4855 
4856  parser.make_script ((yyvsp[-1].tree_statement_list_type), end_of_script);
4857  }
4858 
4859  (yyval.tree_command_type) = 0;
4860  }
4861 #line 4862 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4862  break;
4863 
4864  case 193:
4865 #line 1420 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4866  {
4867  YYUSE ((yyvsp[-3].punct_type));
4868  YYUSE ((yyvsp[-1].punct_type));
4869 
4870  if (lexer.reading_classdef_file)
4871  parser.classdef_object = (yyvsp[-2].tree_classdef_type);
4872 
4873  (yyval.tree_command_type) = 0;
4874  }
4875 #line 4876 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4876  break;
4877 
4878  case 194:
4879 #line 1436 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4880  {
4881  (yyval.tok_val) = (yyvsp[0].tok_val);
4882  if (lexer.reading_classdef_file
4883  || lexer.parsing_classdef)
4884  lexer.maybe_classdef_get_set_method = true;
4885  }
4886 #line 4887 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4887  break;
4888 
4889  case 195:
4890 #line 1445 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4891  {
4892  (yyval.tree_function_def_type) = parser.finish_function (0, (yyvsp[0].octave_user_function_type), (yyvsp[-1].comment_type), (yyvsp[-2].tok_val)->line (),
4893  (yyvsp[-2].tok_val)->column ());
4895  }
4896 #line 4897 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4897  break;
4898 
4899  case 196:
4900 #line 1451 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4901  {
4902  YYUSE ((yyvsp[-1].tok_val));
4903 
4904  (yyval.tree_function_def_type) = parser.finish_function ((yyvsp[-2].tree_parameter_list_type), (yyvsp[0].octave_user_function_type), (yyvsp[-3].comment_type), (yyvsp[-4].tok_val)->line (),
4905  (yyvsp[-4].tok_val)->column ());
4907  }
4908 #line 4909 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4909  break;
4910 
4911  case 197:
4912 #line 1461 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4913  {
4914  std::string id_name = (yyvsp[0].tree_identifier_type)->name ();
4915 
4916  lexer.parsed_function_name.top () = true;
4917  lexer.maybe_classdef_get_set_method = false;
4918 
4919  (yyval.tree_identifier_type) = (yyvsp[0].tree_identifier_type);
4920  }
4921 #line 4922 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4922  break;
4923 
4924  case 198:
4925 #line 1470 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4926  {
4927  YYUSE ((yyvsp[-2].tok_val));
4928 
4929  lexer.parsed_function_name.top () = true;
4930  lexer.maybe_classdef_get_set_method = false;
4931  lexer.parsing_classdef_get_method = true;
4932  (yyval.tree_identifier_type) = (yyvsp[0].tree_identifier_type);
4933  }
4934 #line 4935 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4935  break;
4936 
4937  case 199:
4938 #line 1479 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4939  {
4940  YYUSE ((yyvsp[-2].tok_val));
4941 
4942  lexer.parsed_function_name.top () = true;
4943  lexer.maybe_classdef_get_set_method = false;
4944  lexer.parsing_classdef_set_method = true;
4945  (yyval.tree_identifier_type) = (yyvsp[0].tree_identifier_type);
4946  }
4947 #line 4948 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4948  break;
4949 
4950  case 200:
4951 #line 1490 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4952  {
4953  std::string fname = (yyvsp[-1].tree_identifier_type)->name ();
4954 
4955  delete (yyvsp[-1].tree_identifier_type);
4956 
4957  if (lexer.parsing_classdef_get_method)
4958  fname.insert (0, "get.");
4959  else if (lexer.parsing_classdef_set_method)
4960  fname.insert (0, "set.");
4961 
4962  lexer.parsing_classdef_get_method = false;
4963  lexer.parsing_classdef_set_method = false;
4964 
4965  (yyval.octave_user_function_type) = parser.frob_function (fname, (yyvsp[0].octave_user_function_type));
4966  }
4967 #line 4968 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4968  break;
4969 
4970  case 201:
4971 #line 1508 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4972  {
4973  YYUSE ((yyvsp[-2].punct_type));
4974 
4975  (yyval.octave_user_function_type) = parser.start_function ((yyvsp[-3].tree_parameter_list_type), (yyvsp[-1].tree_statement_list_type), (yyvsp[0].tree_statement_type));
4976  }
4977 #line 4978 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4978  break;
4979 
4980  case 202:
4981 #line 1514 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4982  {
4983  YYUSE ((yyvsp[-2].punct_type));
4984 
4985  (yyval.octave_user_function_type) = parser.start_function (0, (yyvsp[-1].tree_statement_list_type), (yyvsp[0].tree_statement_type));
4986  }
4987 #line 4988 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
4988  break;
4989 
4990  case 203:
4991 #line 1522 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
4992  {
4993  parser.endfunction_found = true;
4994 
4995  if (parser.end_token_ok ((yyvsp[0].tok_val), token::function_end))
4996  (yyval.tree_statement_type) = parser.make_end ("endfunction", false,
4997  (yyvsp[0].tok_val)->line (), (yyvsp[0].tok_val)->column ());
4998  else
4999  {
5000  parser.end_token_error ((yyvsp[0].tok_val), token::function_end);
5001  YYABORT;
5002  }
5003  }
5004 #line 5005 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5005  break;
5006 
5007  case 204:
5008 #line 1535 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5009  {
5010 // A lot of tests are based on the assumption that this is OK
5011 // if (lexer.reading_script_file)
5012 // {
5013 // parser.bison_error ("function body open at end of script");
5014 // YYABORT;
5015 // }
5016 
5017  if (parser.endfunction_found)
5018  {
5019  parser.bison_error ("inconsistent function endings -- "
5020  "if one function is explicitly ended, "
5021  "so must all the others");
5022  YYABORT;
5023  }
5024 
5025  if (! (lexer.reading_fcn_file || lexer.reading_script_file
5026  || lexer.input_from_eval_string ()))
5027  {
5028  parser.bison_error ("function body open at end of input");
5029  YYABORT;
5030  }
5031 
5032  if (lexer.reading_classdef_file)
5033  {
5034  parser.bison_error ("classdef body open at end of input");
5035  YYABORT;
5036  }
5037 
5038  (yyval.tree_statement_type) = parser.make_end ("endfunction", true,
5039  lexer.input_line_number,
5040  lexer.current_input_column);
5041  }
5042 #line 5043 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5043  break;
5044 
5045  case 205:
5046 #line 1575 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5047  {
5048  if (! lexer.reading_classdef_file)
5049  {
5050  parser.bison_error ("classdef must appear inside a file containing only a class definition");
5051  YYABORT;
5052  }
5053 
5054  lexer.parsing_classdef = true;
5055  (yyval.tok_val) = (yyvsp[0].tok_val);
5056  }
5057 #line 5058 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5058  break;
5059 
5060  case 206:
5061 #line 1588 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5062  {
5063  YYUSE ((yyvsp[-3].punct_type));
5064  YYUSE ((yyvsp[-1].punct_type));
5065 
5066  lexer.parsing_classdef = false;
5067 
5068  if (! ((yyval.tree_classdef_type) = parser.make_classdef ((yyvsp[-8].tok_val), (yyvsp[-6].tree_classdef_attribute_list_type), (yyvsp[-5].tree_identifier_type), (yyvsp[-4].tree_classdef_superclass_list_type), (yyvsp[-2].tree_classdef_body_type), (yyvsp[0].tok_val), (yyvsp[-7].comment_type))))
5069  {
5070  // make_classdef deleted $3, $4, $5, and $7.
5071  YYABORT;
5072  }
5073  }
5074 #line 5075 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5075  break;
5076 
5077  case 207:
5078 #line 1601 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5079  {
5080  YYUSE ((yyvsp[-1].punct_type));
5081 
5082  lexer.parsing_classdef = false;
5083 
5084  if (! ((yyval.tree_classdef_type) = parser.make_classdef ((yyvsp[-6].tok_val), (yyvsp[-4].tree_classdef_attribute_list_type), (yyvsp[-3].tree_identifier_type), (yyvsp[-2].tree_classdef_superclass_list_type), 0, (yyvsp[0].tok_val), (yyvsp[-5].comment_type))))
5085  {
5086  // make_classdef deleted $3, $4, and $5.
5087  YYABORT;
5088  }
5089  }
5090 #line 5091 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5091  break;
5092 
5093  case 208:
5094 #line 1615 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5095  { (yyval.tree_classdef_attribute_list_type) = 0; }
5096 #line 5097 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5097  break;
5098 
5099  case 209:
5100 #line 1617 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5101  { (yyval.tree_classdef_attribute_list_type) = (yyvsp[-1].tree_classdef_attribute_list_type); }
5102 #line 5103 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5103  break;
5104 
5105  case 210:
5106 #line 1621 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5107  { (yyval.tree_classdef_attribute_list_type) = new tree_classdef_attribute_list ((yyvsp[0].tree_classdef_attribute_type)); }
5108 #line 5109 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5109  break;
5110 
5111  case 211:
5112 #line 1623 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5113  {
5114  (yyvsp[-2].tree_classdef_attribute_list_type)->append ((yyvsp[0].tree_classdef_attribute_type));
5115  (yyval.tree_classdef_attribute_list_type) = (yyvsp[-2].tree_classdef_attribute_list_type);
5116  }
5117 #line 5118 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5118  break;
5119 
5120  case 212:
5121 #line 1630 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5122  { (yyval.tree_classdef_attribute_type) = new tree_classdef_attribute ((yyvsp[0].tree_identifier_type)); }
5123 #line 5124 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5124  break;
5125 
5126  case 213:
5127 #line 1632 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5128  {
5129  YYUSE ((yyvsp[-2].tok_val));
5130 
5131  lexer.looking_at_initializer_expression = false;
5132  (yyval.tree_classdef_attribute_type) = new tree_classdef_attribute ((yyvsp[-3].tree_identifier_type), (yyvsp[0].tree_expression_type));
5133  }
5134 #line 5135 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5135  break;
5136 
5137  case 214:
5138 #line 1639 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5139  {
5140  YYUSE ((yyvsp[-1].tok_val));
5141 
5142  (yyval.tree_classdef_attribute_type) = new tree_classdef_attribute ((yyvsp[0].tree_identifier_type), false);
5143  }
5144 #line 5145 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5145  break;
5146 
5147  case 215:
5148 #line 1648 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5149  { (yyval.tree_classdef_superclass_list_type) = 0; }
5150 #line 5151 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5151  break;
5152 
5153  case 216:
5154 #line 1650 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5155  { (yyval.tree_classdef_superclass_list_type) = (yyvsp[0].tree_classdef_superclass_list_type); }
5156 #line 5157 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5157  break;
5158 
5159  case 217:
5160 #line 1654 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5161  {
5162  YYUSE ((yyvsp[0].tok_val));
5163 
5164  lexer.enable_fq_identifier ();
5165  }
5166 #line 5167 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5167  break;
5168 
5169  case 218:
5170 #line 1660 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5171  { (yyval.tree_classdef_superclass_list_type) = new tree_classdef_superclass_list ((yyvsp[0].tree_classdef_superclass_type)); }
5172 #line 5173 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5173  break;
5174 
5175  case 219:
5176 #line 1662 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5177  {
5178  YYUSE ((yyvsp[0].tok_val));
5179 
5180  lexer.enable_fq_identifier ();
5181  }
5182 #line 5183 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5183  break;
5184 
5185  case 220:
5186 #line 1668 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5187  {
5188  (yyvsp[-3].tree_classdef_superclass_list_type)->append ((yyvsp[0].tree_classdef_superclass_type));
5189  (yyval.tree_classdef_superclass_list_type) = (yyvsp[-3].tree_classdef_superclass_list_type);
5190  }
5191 #line 5192 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5192  break;
5193 
5194  case 221:
5195 #line 1675 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5196  { (yyval.tree_classdef_superclass_type) = new tree_classdef_superclass ((yyvsp[0].tok_val)->text ()); }
5197 #line 5198 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5198  break;
5199 
5200  case 222:
5201 #line 1679 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5202  { (yyval.tree_classdef_body_type) = new tree_classdef_body ((yyvsp[0].tree_classdef_properties_block_type)); }
5203 #line 5204 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5204  break;
5205 
5206  case 223:
5207 #line 1681 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5208  { (yyval.tree_classdef_body_type) = new tree_classdef_body ((yyvsp[0].tree_classdef_methods_block_type)); }
5209 #line 5210 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5210  break;
5211 
5212  case 224:
5213 #line 1683 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5214  { (yyval.tree_classdef_body_type) = new tree_classdef_body ((yyvsp[0].tree_classdef_events_block_type)); }
5215 #line 5216 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5216  break;
5217 
5218  case 225:
5219 #line 1685 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5220  { (yyval.tree_classdef_body_type) = new tree_classdef_body ((yyvsp[0].tree_classdef_enum_block_type)); }
5221 #line 5222 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5222  break;
5223 
5224  case 226:
5225 #line 1687 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5226  {
5227  YYUSE ((yyvsp[-1].punct_type));
5228 
5229  (yyvsp[-2].tree_classdef_body_type)->append ((yyvsp[0].tree_classdef_properties_block_type));
5230  (yyval.tree_classdef_body_type) = (yyvsp[-2].tree_classdef_body_type);
5231  }
5232 #line 5233 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5233  break;
5234 
5235  case 227:
5236 #line 1694 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5237  {
5238  YYUSE ((yyvsp[-1].punct_type));
5239 
5240  (yyvsp[-2].tree_classdef_body_type)->append ((yyvsp[0].tree_classdef_methods_block_type));
5241  (yyval.tree_classdef_body_type) = (yyvsp[-2].tree_classdef_body_type);
5242  }
5243 #line 5244 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5244  break;
5245 
5246  case 228:
5247 #line 1701 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5248  {
5249  YYUSE ((yyvsp[-1].punct_type));
5250 
5251  (yyvsp[-2].tree_classdef_body_type)->append ((yyvsp[0].tree_classdef_events_block_type));
5252  (yyval.tree_classdef_body_type) = (yyvsp[-2].tree_classdef_body_type);
5253  }
5254 #line 5255 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5255  break;
5256 
5257  case 229:
5258 #line 1708 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5259  {
5260  YYUSE ((yyvsp[-1].punct_type));
5261 
5262  (yyvsp[-2].tree_classdef_body_type)->append ((yyvsp[0].tree_classdef_enum_block_type));
5263  (yyval.tree_classdef_body_type) = (yyvsp[-2].tree_classdef_body_type);
5264  }
5265 #line 5266 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5266  break;
5267 
5268  case 230:
5269 #line 1718 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5270  {
5271  YYUSE ((yyvsp[-3].punct_type));
5272  YYUSE ((yyvsp[-1].punct_type));
5273 
5274  if (! ((yyval.tree_classdef_properties_block_type) = parser.make_classdef_properties_block
5275  ((yyvsp[-6].tok_val), (yyvsp[-4].tree_classdef_attribute_list_type), (yyvsp[-2].tree_classdef_property_list_type), (yyvsp[0].tok_val), (yyvsp[-5].comment_type))))
5276  {
5277  // make_classdef_properties_block delete $3 and $5.
5278  YYABORT;
5279  }
5280  }
5281 #line 5282 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5282  break;
5283 
5284  case 231:
5285 #line 1730 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5286  {
5287  YYUSE ((yyvsp[-1].punct_type));
5288 
5289  if (! ((yyval.tree_classdef_properties_block_type) = parser.make_classdef_properties_block
5290  ((yyvsp[-4].tok_val), (yyvsp[-2].tree_classdef_attribute_list_type), 0, (yyvsp[0].tok_val), (yyvsp[-3].comment_type))))
5291  {
5292  // make_classdef_properties_block delete $3.
5293  YYABORT;
5294  }
5295  }
5296 #line 5297 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5297  break;
5298 
5299  case 232:
5300 #line 1744 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5301  { (yyval.tree_classdef_property_list_type) = new tree_classdef_property_list ((yyvsp[0].tree_classdef_property_type)); }
5302 #line 5303 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5303  break;
5304 
5305  case 233:
5306 #line 1746 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5307  {
5308  YYUSE ((yyvsp[-1].punct_type));
5309 
5310  (yyvsp[-2].tree_classdef_property_list_type)->append ((yyvsp[0].tree_classdef_property_type));
5311  (yyval.tree_classdef_property_list_type) = (yyvsp[-2].tree_classdef_property_list_type);
5312  }
5313 #line 5314 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5314  break;
5315 
5316  case 234:
5317 #line 1755 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5318  { (yyval.tree_classdef_property_type) = new tree_classdef_property ((yyvsp[0].tree_identifier_type)); }
5319 #line 5320 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5320  break;
5321 
5322  case 235:
5323 #line 1757 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5324  {
5325  YYUSE ((yyvsp[-2].tok_val));
5326 
5327  lexer.looking_at_initializer_expression = false;
5328  (yyval.tree_classdef_property_type) = new tree_classdef_property ((yyvsp[-3].tree_identifier_type), (yyvsp[0].tree_expression_type));
5329  }
5330 #line 5331 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5331  break;
5332 
5333  case 236:
5334 #line 1766 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5335  {
5336  YYUSE ((yyvsp[-3].punct_type));
5337  YYUSE ((yyvsp[-1].punct_type));
5338 
5339  if (! ((yyval.tree_classdef_methods_block_type) = parser.make_classdef_methods_block
5340  ((yyvsp[-6].tok_val), (yyvsp[-4].tree_classdef_attribute_list_type), (yyvsp[-2].tree_classdef_methods_list_type), (yyvsp[0].tok_val), (yyvsp[-5].comment_type))))
5341  {
5342  // make_classdef_methods_block deleted $3 and $5.
5343  YYABORT;
5344  }
5345  }
5346 #line 5347 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5347  break;
5348 
5349  case 237:
5350 #line 1778 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5351  {
5352  YYUSE ((yyvsp[-1].punct_type));
5353 
5354  if (! ((yyval.tree_classdef_methods_block_type) = parser.make_classdef_methods_block
5355  ((yyvsp[-4].tok_val), (yyvsp[-2].tree_classdef_attribute_list_type), 0, (yyvsp[0].tok_val), (yyvsp[-3].comment_type))))
5356  {
5357  // make_classdef_methods_block deleted $3.
5358  YYABORT;
5359  }
5360  }
5361 #line 5362 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5362  break;
5363 
5364  case 238:
5365 #line 1792 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5366  {
5367  if (! ((yyval.octave_user_function_type) = parser.start_classdef_external_method ((yyvsp[0].tree_identifier_type), 0)))
5368  YYABORT;
5369  }
5370 #line 5371 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5371  break;
5372 
5373  case 239:
5374 #line 1797 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5375  {
5376  if (! ((yyval.octave_user_function_type) = parser.start_classdef_external_method ((yyvsp[-1].tree_identifier_type), (yyvsp[0].tree_parameter_list_type))))
5377  YYABORT;
5378  }
5379 #line 5380 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5380  break;
5381 
5382  case 240:
5383 #line 1804 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5384  { (yyval.tree_function_def_type) = parser.finish_classdef_external_method ((yyvsp[0].octave_user_function_type), 0, (yyvsp[-1].comment_type)); }
5385 #line 5386 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5386  break;
5387 
5388  case 241:
5389 #line 1806 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5390  {
5391  YYUSE ((yyvsp[0].tok_val));
5392 
5393  lexer.defining_func++;
5394  lexer.parsed_function_name.push (false);
5395  }
5396 #line 5397 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5397  break;
5398 
5399  case 242:
5400 #line 1813 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5401  {
5402  lexer.defining_func--;
5403  lexer.parsed_function_name.pop ();
5404  (yyval.tree_function_def_type) = parser.finish_classdef_external_method ((yyvsp[0].octave_user_function_type), (yyvsp[-3].tree_parameter_list_type), (yyvsp[-4].comment_type));
5405  }
5406 #line 5407 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5407  break;
5408 
5409  case 243:
5410 #line 1821 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5411  { (yyval.tree_function_def_type) = (yyvsp[0].tree_function_def_type); }
5412 #line 5413 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5413  break;
5414 
5415  case 244:
5416 #line 1823 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5417  { (yyval.tree_function_def_type) = (yyvsp[0].tree_function_def_type); }
5418 #line 5419 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5419  break;
5420 
5421  case 245:
5422 #line 1827 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5423  {
5424  octave_value fcn;
5425  if ((yyvsp[0].tree_function_def_type))
5426  fcn = (yyvsp[0].tree_function_def_type)->function ();
5427  delete (yyvsp[0].tree_function_def_type);
5428  (yyval.tree_classdef_methods_list_type) = new tree_classdef_methods_list (fcn);
5429  }
5430 #line 5431 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5431  break;
5432 
5433  case 246:
5434 #line 1835 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5435  {
5436  YYUSE ((yyvsp[-1].punct_type));
5437 
5438  octave_value fcn;
5439  if ((yyvsp[0].tree_function_def_type))
5440  fcn = (yyvsp[0].tree_function_def_type)->function ();
5441  delete (yyvsp[0].tree_function_def_type);
5442 
5443  (yyvsp[-2].tree_classdef_methods_list_type)->append (fcn);
5444  (yyval.tree_classdef_methods_list_type) = (yyvsp[-2].tree_classdef_methods_list_type);
5445  }
5446 #line 5447 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5447  break;
5448 
5449  case 247:
5450 #line 1849 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5451  {
5452  YYUSE ((yyvsp[-3].punct_type));
5453  YYUSE ((yyvsp[-1].punct_type));
5454 
5455  if (! ((yyval.tree_classdef_events_block_type) = parser.make_classdef_events_block
5456  ((yyvsp[-6].tok_val), (yyvsp[-4].tree_classdef_attribute_list_type), (yyvsp[-2].tree_classdef_events_list_type), (yyvsp[0].tok_val), (yyvsp[-5].comment_type))))
5457  {
5458  // make_classdef_events_block deleted $3 and $5.
5459  YYABORT;
5460  }
5461  }
5462 #line 5463 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5463  break;
5464 
5465  case 248:
5466 #line 1861 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5467  {
5468  YYUSE ((yyvsp[-1].punct_type));
5469 
5470  if (! ((yyval.tree_classdef_events_block_type) = parser.make_classdef_events_block
5471  ((yyvsp[-4].tok_val), (yyvsp[-2].tree_classdef_attribute_list_type), 0, (yyvsp[0].tok_val), (yyvsp[-3].comment_type))))
5472  {
5473  // make_classdef_events_block deleted $3.
5474  YYABORT;
5475  }
5476  }
5477 #line 5478 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5478  break;
5479 
5480  case 249:
5481 #line 1874 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5482  { (yyval.tree_classdef_events_list_type) = new tree_classdef_events_list ((yyvsp[0].tree_classdef_event_type)); }
5483 #line 5484 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5484  break;
5485 
5486  case 250:
5487 #line 1876 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5488  {
5489  YYUSE ((yyvsp[-1].punct_type));
5490 
5491  (yyvsp[-2].tree_classdef_events_list_type)->append ((yyvsp[0].tree_classdef_event_type));
5492  (yyval.tree_classdef_events_list_type) = (yyvsp[-2].tree_classdef_events_list_type);
5493  }
5494 #line 5495 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5495  break;
5496 
5497  case 251:
5498 #line 1885 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5499  { (yyval.tree_classdef_event_type) = new tree_classdef_event ((yyvsp[0].tree_identifier_type)); }
5500 #line 5501 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5501  break;
5502 
5503  case 252:
5504 #line 1889 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5505  {
5506  YYUSE ((yyvsp[-3].punct_type));
5507  YYUSE ((yyvsp[-1].punct_type));
5508 
5509  if (! ((yyval.tree_classdef_enum_block_type) = parser.make_classdef_enum_block
5510  ((yyvsp[-6].tok_val), (yyvsp[-4].tree_classdef_attribute_list_type), (yyvsp[-2].tree_classdef_enum_list_type), (yyvsp[0].tok_val), (yyvsp[-5].comment_type))))
5511  {
5512  // make_classdef_enum_block deleted $3 and $5.
5513  YYABORT;
5514  }
5515  }
5516 #line 5517 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5517  break;
5518 
5519  case 253:
5520 #line 1901 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5521  {
5522  YYUSE ((yyvsp[-1].punct_type));
5523 
5524  if (! ((yyval.tree_classdef_enum_block_type) = parser.make_classdef_enum_block
5525  ((yyvsp[-4].tok_val), (yyvsp[-2].tree_classdef_attribute_list_type), 0, (yyvsp[0].tok_val), (yyvsp[-3].comment_type))))
5526  {
5527  // make_classdef_enum_block deleted $3.
5528  YYABORT;
5529  }
5530  }
5531 #line 5532 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5532  break;
5533 
5534  case 254:
5535 #line 1914 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5536  { (yyval.tree_classdef_enum_list_type) = new tree_classdef_enum_list ((yyvsp[0].tree_classdef_enum_type)); }
5537 #line 5538 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5538  break;
5539 
5540  case 255:
5541 #line 1916 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5542  {
5543  YYUSE ((yyvsp[-1].punct_type));
5544 
5545  (yyvsp[-2].tree_classdef_enum_list_type)->append ((yyvsp[0].tree_classdef_enum_type));
5546  (yyval.tree_classdef_enum_list_type) = (yyvsp[-2].tree_classdef_enum_list_type);
5547  }
5548 #line 5549 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5549  break;
5550 
5551  case 256:
5552 #line 1925 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5553  { (yyval.tree_classdef_enum_type) = new tree_classdef_enum ((yyvsp[-3].tree_identifier_type), (yyvsp[-1].tree_expression_type)); }
5554 #line 5555 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5555  break;
5556 
5557  case 257:
5558 #line 1933 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5559  {
5560  (yyval.dummy_type) = 0;
5561  lexer.at_beginning_of_statement = true;
5562  }
5563 #line 5564 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5564  break;
5565 
5566  case 258:
5567 #line 1940 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5568  { (yyval.comment_type) = lexer.get_comment (); }
5569 #line 5570 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5570  break;
5571 
5572  case 259:
5573 #line 1944 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5574  {
5575  (yyval.dummy_type) = 0;
5576  std::string msg = (yyvsp[0].tok_val)->text ();
5577  parser.bison_error (msg.c_str ());
5578  }
5579 #line 5580 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5580  break;
5581 
5582  case 260:
5583 #line 1950 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5584  { (yyval.dummy_type) = 0; }
5585 #line 5586 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5586  break;
5587 
5588  case 261:
5589 #line 1954 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5590  { (yyval.punct_type) = ','; }
5591 #line 5592 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5592  break;
5593 
5594  case 262:
5595 #line 1956 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5596  { (yyval.punct_type) = ';'; }
5597 #line 5598 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5598  break;
5599 
5600  case 263:
5601 #line 1958 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5602  { (yyval.punct_type) = (yyvsp[-1].punct_type); }
5603 #line 5604 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5604  break;
5605 
5606  case 264:
5607 #line 1960 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5608  { (yyval.punct_type) = (yyvsp[-1].punct_type); }
5609 #line 5610 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5610  break;
5611 
5612  case 265:
5613 #line 1964 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5614  { (yyval.punct_type) = 0; }
5615 #line 5616 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5616  break;
5617 
5618  case 266:
5619 #line 1966 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5620  { (yyval.punct_type) = (yyvsp[0].punct_type); }
5621 #line 5622 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5622  break;
5623 
5624  case 267:
5625 #line 1970 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5626  { (yyval.punct_type) = 0; }
5627 #line 5628 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5628  break;
5629 
5630  case 268:
5631 #line 1972 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5632  { (yyval.punct_type) = (yyvsp[0].punct_type); }
5633 #line 5634 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5634  break;
5635 
5636  case 269:
5637 #line 1976 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5638  { (yyval.punct_type) = '\n'; }
5639 #line 5640 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5640  break;
5641 
5642  case 270:
5643 #line 1978 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5644  { (yyval.punct_type) = (yyvsp[-1].punct_type); }
5645 #line 5646 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5646  break;
5647 
5648  case 271:
5649 #line 1982 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5650  { (yyval.punct_type) = ','; }
5651 #line 5652 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5652  break;
5653 
5654  case 272:
5655 #line 1984 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5656  { (yyval.punct_type) = ';'; }
5657 #line 5658 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5658  break;
5659 
5660  case 273:
5661 #line 1986 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5662  { (yyval.punct_type) = '\n'; }
5663 #line 5664 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5664  break;
5665 
5666  case 274:
5667 #line 1988 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5668  { (yyval.punct_type) = (yyvsp[-1].punct_type); }
5669 #line 5670 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5670  break;
5671 
5672  case 275:
5673 #line 1990 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5674  { (yyval.punct_type) = (yyvsp[-1].punct_type); }
5675 #line 5676 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5676  break;
5677 
5678  case 276:
5679 #line 1992 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5680  { (yyval.punct_type) = (yyvsp[-1].punct_type); }
5681 #line 5682 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5682  break;
5683 
5684  case 277:
5685 #line 1996 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5686  { (yyval.punct_type) = 0; }
5687 #line 5688 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5688  break;
5689 
5690  case 278:
5691 #line 1998 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1646 */
5692  { (yyval.punct_type) = (yyvsp[0].punct_type); }
5693 #line 5694 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5694  break;
5695 
5696 
5697 #line 5698 "libinterp/parse-tree/oct-parse.cc" /* yacc.c:1646 */
5698  default: break;
5699  }
5700  /* User semantic actions sometimes alter yychar, and that requires
5701  that yytoken be updated with the new translation. We take the
5702  approach of translating immediately before every use of yytoken.
5703  One alternative is translating here after every semantic action,
5704  but that translation would be missed if the semantic action invokes
5705  YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
5706  if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
5707  incorrect destructor might then be invoked immediately. In the
5708  case of YYERROR or YYBACKUP, subsequent parser actions might lead
5709  to an incorrect destructor call or verbose syntax error message
5710  before the lookahead is translated. */
5711  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
5712 
5713  YYPOPSTACK (yylen);
5714  yylen = 0;
5715  YY_STACK_PRINT (yyss, yyssp);
5716 
5717  *++yyvsp = yyval;
5718 
5719  /* Now 'shift' the result of the reduction. Determine what state
5720  that goes to, based on the state we popped back to and the rule
5721  number reduced by. */
5722 
5723  yyn = yyr1[yyn];
5724 
5725  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
5726  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
5727  yystate = yytable[yystate];
5728  else
5729  yystate = yydefgoto[yyn - YYNTOKENS];
5730 
5731  goto yynewstate;
5732 
5733 
5734 /*--------------------------------------.
5735 | yyerrlab -- here on detecting error. |
5736 `--------------------------------------*/
5737 yyerrlab:
5738  /* Make sure we have latest lookahead translation. See comments at
5739  user semantic actions for why this is necessary. */
5740  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
5741 
5742  /* If not already recovering from an error, report this error. */
5743  if (!yyerrstatus)
5744  {
5745  ++yynerrs;
5746 #if ! YYERROR_VERBOSE
5747  yyerror (parser, YY_("syntax error"));
5748 #else
5749 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
5750  yyssp, yytoken)
5751  {
5752  char const *yymsgp = YY_("syntax error");
5753  int yysyntax_error_status;
5754  yysyntax_error_status = YYSYNTAX_ERROR;
5755  if (yysyntax_error_status == 0)
5756  yymsgp = yymsg;
5757  else if (yysyntax_error_status == 1)
5758  {
5759  if (yymsg != yymsgbuf)
5760  YYSTACK_FREE (yymsg);
5761  yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
5762  if (!yymsg)
5763  {
5764  yymsg = yymsgbuf;
5765  yymsg_alloc = sizeof yymsgbuf;
5766  yysyntax_error_status = 2;
5767  }
5768  else
5769  {
5770  yysyntax_error_status = YYSYNTAX_ERROR;
5771  yymsgp = yymsg;
5772  }
5773  }
5774  yyerror (parser, yymsgp);
5775  if (yysyntax_error_status == 2)
5776  goto yyexhaustedlab;
5777  }
5778 # undef YYSYNTAX_ERROR
5779 #endif
5780  }
5781 
5782 
5783 
5784  if (yyerrstatus == 3)
5785  {
5786  /* If just tried and failed to reuse lookahead token after an
5787  error, discard it. */
5788 
5789  if (yychar <= YYEOF)
5790  {
5791  /* Return failure if at end of input. */
5792  if (yychar == YYEOF)
5793  YYABORT;
5794  }
5795  else
5796  {
5797  yydestruct ("Error: discarding",
5798  yytoken, &yylval, parser);
5799  yychar = YYEMPTY;
5800  }
5801  }
5802 
5803  /* Else will try to reuse lookahead token after shifting the error
5804  token. */
5805  goto yyerrlab1;
5806 
5807 
5808 /*---------------------------------------------------.
5809 | yyerrorlab -- error raised explicitly by YYERROR. |
5810 `---------------------------------------------------*/
5811 yyerrorlab:
5812 
5813  /* Pacify compilers like GCC when the user code never invokes
5814  YYERROR and the label yyerrorlab therefore never appears in user
5815  code. */
5816  if (/*CONSTCOND*/ 0)
5817  goto yyerrorlab;
5818 
5819  /* Do not reclaim the symbols of the rule whose action triggered
5820  this YYERROR. */
5821  YYPOPSTACK (yylen);
5822  yylen = 0;
5823  YY_STACK_PRINT (yyss, yyssp);
5824  yystate = *yyssp;
5825  goto yyerrlab1;
5826 
5827 
5828 /*-------------------------------------------------------------.
5829 | yyerrlab1 -- common code for both syntax error and YYERROR. |
5830 `-------------------------------------------------------------*/
5831 yyerrlab1:
5832  yyerrstatus = 3; /* Each real token shifted decrements this. */
5833 
5834  for (;;)
5835  {
5836  yyn = yypact[yystate];
5837  if (!yypact_value_is_default (yyn))
5838  {
5839  yyn += YYTERROR;
5840  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
5841  {
5842  yyn = yytable[yyn];
5843  if (0 < yyn)
5844  break;
5845  }
5846  }
5847 
5848  /* Pop the current state because it cannot handle the error token. */
5849  if (yyssp == yyss)
5850  YYABORT;
5851 
5852 
5853  yydestruct ("Error: popping",
5854  yystos[yystate], yyvsp, parser);
5855  YYPOPSTACK (1);
5856  yystate = *yyssp;
5857  YY_STACK_PRINT (yyss, yyssp);
5858  }
5859 
5861  *++yyvsp = yylval;
5863 
5864 
5865  /* Shift the error token. */
5866  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
5867 
5868  yystate = yyn;
5869  goto yynewstate;
5870 
5871 
5872 /*-------------------------------------.
5873 | yyacceptlab -- YYACCEPT comes here. |
5874 `-------------------------------------*/
5875 yyacceptlab:
5876  yyresult = 0;
5877  goto yyreturn;
5878 
5879 /*-----------------------------------.
5880 | yyabortlab -- YYABORT comes here. |
5881 `-----------------------------------*/
5882 yyabortlab:
5883  yyresult = 1;
5884  goto yyreturn;
5885 
5886 #if !defined yyoverflow || YYERROR_VERBOSE
5887 /*-------------------------------------------------.
5888 | yyexhaustedlab -- memory exhaustion comes here. |
5889 `-------------------------------------------------*/
5890 yyexhaustedlab:
5891  yyerror (parser, YY_("memory exhausted"));
5892  yyresult = 2;
5893  /* Fall through. */
5894 #endif
5895 
5896 yyreturn:
5897  if (yychar != YYEMPTY)
5898  {
5899  /* Make sure we have latest lookahead translation. See comments at
5900  user semantic actions for why this is necessary. */
5901  yytoken = YYTRANSLATE (yychar);
5902  yydestruct ("Cleanup: discarding lookahead",
5903  yytoken, &yylval, parser);
5904  }
5905  /* Do not reclaim the symbols of the rule whose action triggered
5906  this YYABORT or YYACCEPT. */
5907  YYPOPSTACK (yylen);
5908  YY_STACK_PRINT (yyss, yyssp);
5909  while (yyssp != yyss)
5910  {
5911  yydestruct ("Cleanup: popping",
5912  yystos[*yyssp], yyvsp, parser);
5913  YYPOPSTACK (1);
5914  }
5915 #ifndef yyoverflow
5916  if (yyss != yyssa)
5917  YYSTACK_FREE (yyss);
5918 #endif
5919  yyps->yynew = 1;
5920 
5921 yypushreturn:
5922 #if YYERROR_VERBOSE
5923  if (yymsg != yymsgbuf)
5924  YYSTACK_FREE (yymsg);
5925 #endif
5926  return yyresult;
5927 }
5928 #line 2001 "libinterp/parse-tree/oct-parse.yy" /* yacc.c:1906 */
5929 
5930 
5931 #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC)
5932 // Restore prevailing warning state for remainder of the file.
5933 #pragma GCC diagnostic pop
5934 #endif
5935 
5936 // Generic error messages.
5937 
5938 #undef lexer
5939 
5940 static void
5941 yyerror (octave::base_parser& parser, const char *s)
5942 {
5943  parser.bison_error (s);
5944 }
5945 
5946 namespace octave
5947 {
5949  : endfunction_found (false), autoloading (false),
5950  fcn_file_from_relative_lookup (false), parsing_subfunctions (false),
5951  max_fcn_depth (0), curr_fcn_depth (0), primary_fcn_scope (-1),
5952  curr_class_name (), curr_package_name (), function_scopes (),
5953  primary_fcn_ptr (0), subfunction_names (), classdef_object (0),
5954  stmt_list (0), lexer (lxr), parser_state (yypstate_new ())
5955  { }
5956 
5958  {
5959  delete stmt_list;
5960 
5961  delete &lexer;
5962 
5963  // FIXME: Deleting the internal Bison parser state structure does
5964  // not clean up any partial parse trees in the event of an interrupt or
5965  // error. It's not clear how to safely do that with the C language
5966  // parser that Bison generates. The C++ language parser that Bison
5967  // generates would do it for us automatically whenever an exception
5968  // is thrown while parsing input, but there is currently no C++
5969  // interface for a push parser.
5970 
5971  yypstate_delete (static_cast<yypstate *> (parser_state));
5972  }
5973 
5974  void
5976  {
5977  endfunction_found = false;
5978  autoloading = false;
5980  parsing_subfunctions = false;
5981  max_fcn_depth = 0;
5982  curr_fcn_depth = 0;
5983  primary_fcn_scope = -1;
5984  curr_class_name = "";
5985  curr_package_name = "";
5986  function_scopes.clear ();
5987  primary_fcn_ptr = 0;
5988  subfunction_names.clear ();
5989 
5990  delete stmt_list;
5991  stmt_list = 0;
5992 
5993  lexer.reset ();
5994 
5995  yypstate_delete (static_cast<yypstate *> (parser_state));
5997  }
5998 }
5999 
6000 // Error mesages for mismatched end tokens.
6001 
6002 static std::string
6004 {
6005  std::string retval = "<unknown>";
6006 
6007  switch (ettype)
6008  {
6009  case token::simple_end:
6010  retval = "end";
6011  break;
6012 
6013  case token::classdef_end:
6014  retval = "endclassdef";
6015  break;
6016 
6018  retval = "endenumeration";
6019  break;
6020 
6021  case token::events_end:
6022  retval = "endevents";
6023  break;
6024 
6025  case token::for_end:
6026  retval = "endfor";
6027  break;
6028 
6029  case token::function_end:
6030  retval = "endfunction";
6031  break;
6032 
6033  case token::if_end:
6034  retval = "endif";
6035  break;
6036 
6037  case token::methods_end:
6038  retval = "endmethods";
6039  break;
6040 
6041  case token::parfor_end:
6042  retval = "endparfor";
6043  break;
6044 
6045  case token::properties_end:
6046  retval = "endproperties";
6047  break;
6048 
6049  case token::switch_end:
6050  retval = "endswitch";
6051  break;
6052 
6053  case token::try_catch_end:
6054  retval = "end_try_catch";
6055  break;
6056 
6058  retval = "end_unwind_protect";
6059  break;
6060 
6061  case token::while_end:
6062  retval = "endwhile";
6063  break;
6064 
6065  default:
6066  panic_impossible ();
6067  break;
6068  }
6069 
6070  return retval;
6071 }
6072 
6073 namespace octave
6074 {
6075  void
6077  {
6078  std::string msg = ("'" + end_token_as_string (expected)
6079  + "' command matched by '"
6080  + end_token_as_string (tok->ettype ()) + "'");
6081 
6082  bison_error (msg, tok->line (), tok->column ());
6083  }
6084 
6085  // Check to see that end tokens are properly matched.
6086 
6087  bool
6089  {
6090  token::end_tok_type ettype = tok->ettype ();
6091 
6092  return ettype == expected || ettype == token::simple_end;
6093  }
6094 
6095  // Maybe print a warning if an assignment expression is used as the
6096  // test in a logical expression.
6097 
6098  void
6100  {
6101  if (expr->is_assignment_expression ()
6102  && expr->paren_count () < 2)
6103  {
6104  if (lexer.fcn_file_full_name.empty ())
6106  ("Octave:assign-as-truth-value",
6107  "suggest parenthesis around assignment used as truth value");
6108  else
6110  ("Octave:assign-as-truth-value",
6111  "suggest parenthesis around assignment used as truth value near line %d, column %d in file '%s'",
6112  expr->line (), expr->column (), lexer.fcn_file_full_name.c_str ());
6113  }
6114  }
6115 
6116  // Maybe print a warning about switch labels that aren't constants.
6117 
6118  void
6120  {
6121  if (! expr->is_constant ())
6122  {
6123  if (lexer.fcn_file_full_name.empty ())
6124  warning_with_id ("Octave:variable-switch-label",
6125  "variable switch label");
6126  else
6128  ("Octave:variable-switch-label",
6129  "variable switch label near line %d, column %d in file '%s'",
6130  expr->line (), expr->column (), lexer.fcn_file_full_name.c_str ());
6131  }
6132  }
6133 
6134  // Finish building a range.
6135 
6136  tree_expression *
6138  {
6140 
6142 
6145 
6146  discard_error_messages = true;
6147  discard_warning_messages = true;
6148 
6149  tree_expression *base = e->base ();
6150  tree_expression *limit = e->limit ();
6151  tree_expression *incr = e->increment ();
6152 
6153  if (base)
6154  {
6155  if (limit)
6156  {
6157  if (base->is_constant () && limit->is_constant ()
6158  && (! incr || (incr && incr->is_constant ())))
6159  {
6160  try
6161  {
6162  octave_value tmp = e->rvalue1 ();
6163 
6164  tree_constant *tc_retval
6165  = new tree_constant (tmp, base->line (), base->column ());
6166 
6167  std::ostringstream buf;
6168 
6169  tree_print_code tpc (buf);
6170 
6171  e->accept (tpc);
6172 
6173  tc_retval->stash_original_text (buf.str ());
6174 
6175  delete e;
6176 
6177  retval = tc_retval;
6178  }
6179  catch (const octave::execution_exception&)
6180  {
6182  }
6183  }
6184  }
6185  else
6186  {
6187  e->preserve_base ();
6188  delete e;
6189 
6190  retval = base;
6191  }
6192  }
6193 
6194  return retval;
6195  }
6196 
6197  // Make a constant.
6198 
6199  tree_constant *
6201  {
6202  int l = tok_val->line ();
6203  int c = tok_val->column ();
6204 
6205  tree_constant *retval = 0;
6206 
6207  switch (op)
6208  {
6209  case NUM:
6210  {
6211  octave_value tmp (tok_val->number ());
6212  retval = new tree_constant (tmp, l, c);
6213  retval->stash_original_text (tok_val->text_rep ());
6214  }
6215  break;
6216 
6217  case IMAG_NUM:
6218  {
6219  octave_value tmp (Complex (0.0, tok_val->number ()));
6220  retval = new tree_constant (tmp, l, c);
6221  retval->stash_original_text (tok_val->text_rep ());
6222  }
6223  break;
6224 
6225  case DQ_STRING:
6226  case SQ_STRING:
6227  {
6228  std::string txt = tok_val->text ();
6229 
6230  char delim = op == DQ_STRING ? '"' : '\'';
6231  octave_value tmp (txt, delim);
6232 
6233  if (txt.empty ())
6234  {
6235  if (op == DQ_STRING)
6237  else
6239  }
6240 
6241  retval = new tree_constant (tmp, l, c);
6242 
6243  if (op == DQ_STRING)
6244  txt = undo_string_escapes (txt);
6245 
6246  // FIXME: maybe this should also be handled by
6247  // tok_val->text_rep () for character strings?
6248  retval->stash_original_text (delim + txt + delim);
6249  }
6250  break;
6251 
6252  default:
6253  panic_impossible ();
6254  break;
6255  }
6256 
6257  return retval;
6258  }
6259 
6260  // Make a function handle.
6261 
6262  tree_fcn_handle *
6264  {
6265  int l = tok_val->line ();
6266  int c = tok_val->column ();
6267 
6268  tree_fcn_handle *retval = new tree_fcn_handle (tok_val->text (), l, c);
6269 
6270  return retval;
6271  }
6272 
6273  // Make an anonymous function handle.
6274 
6277  tree_statement *stmt)
6278  {
6279  // FIXME: need to get these from the location of the @ symbol.
6280  int l = lexer.input_line_number;
6282 
6283  tree_parameter_list *ret_list = 0;
6284 
6286 
6288 
6289  stmt->set_print_flag (false);
6290 
6291  tree_statement_list *body = new tree_statement_list (stmt);
6292 
6293  body->mark_as_anon_function_body ();
6294 
6296  = new tree_anon_fcn_handle (param_list, ret_list, body, fcn_scope, l, c);
6297  // FIXME: Stash the filename. This does not work and produces
6298  // errors when executed.
6299  //retval->stash_file_name (lexer.fcn_file_name);
6300 
6301  return retval;
6302  }
6303 
6304  // Build a binary expression.
6305 
6306  tree_expression *
6308  token *tok_val, tree_expression *op2)
6309  {
6311 
6312  switch (op)
6313  {
6314  case POW:
6316  break;
6317 
6318  case EPOW:
6320  break;
6321 
6322  case '+':
6324  break;
6325 
6326  case '-':
6328  break;
6329 
6330  case '*':
6332  break;
6333 
6334  case '/':
6336  break;
6337 
6338  case EMUL:
6340  break;
6341 
6342  case EDIV:
6344  break;
6345 
6346  case LEFTDIV:
6348  break;
6349 
6350  case ELEFTDIV:
6352  break;
6353 
6354  case EXPR_LT:
6355  t = octave_value::op_lt;
6356  break;
6357 
6358  case EXPR_LE:
6359  t = octave_value::op_le;
6360  break;
6361 
6362  case EXPR_EQ:
6363  t = octave_value::op_eq;
6364  break;
6365 
6366  case EXPR_GE:
6367  t = octave_value::op_ge;
6368  break;
6369 
6370  case EXPR_GT:
6371  t = octave_value::op_gt;
6372  break;
6373 
6374  case EXPR_NE:
6375  t = octave_value::op_ne;
6376  break;
6377 
6378  case EXPR_AND:
6380  break;
6381 
6382  case EXPR_OR:
6384  break;
6385 
6386  default:
6387  panic_impossible ();
6388  break;
6389  }
6390 
6391  int l = tok_val->line ();
6392  int c = tok_val->column ();
6393 
6394  return maybe_compound_binary_expression (op1, op2, l, c, t);
6395  }
6396 
6397  // Build a boolean expression.
6398 
6399  tree_expression *
6401  token *tok_val, tree_expression *op2)
6402  {
6404 
6405  switch (op)
6406  {
6407  case EXPR_AND_AND:
6409  break;
6410 
6411  case EXPR_OR_OR:
6413  break;
6414 
6415  default:
6416  panic_impossible ();
6417  break;
6418  }
6419 
6420  int l = tok_val->line ();
6421  int c = tok_val->column ();
6422 
6423  return new tree_boolean_expression (op1, op2, l, c, t);
6424  }
6425 
6426  // Build a prefix expression.
6427 
6428  tree_expression *
6430  {
6432 
6433  switch (op)
6434  {
6435  case EXPR_NOT:
6437  break;
6438 
6439  case '+':
6441  break;
6442 
6443  case '-':
6445  break;
6446 
6447  case PLUS_PLUS:
6449  break;
6450 
6451  case MINUS_MINUS:
6453  break;
6454 
6455  default:
6456  panic_impossible ();
6457  break;
6458  }
6459 
6460  int l = tok_val->line ();
6461  int c = tok_val->column ();
6462 
6463  return new tree_prefix_expression (op1, l, c, t);
6464  }
6465 
6466  // Build a postfix expression.
6467 
6468  tree_expression *
6470  {
6472 
6473  switch (op)
6474  {
6475  case HERMITIAN:
6477  break;
6478 
6479  case TRANSPOSE:
6481  break;
6482 
6483  case PLUS_PLUS:
6485  break;
6486 
6487  case MINUS_MINUS:
6489  break;
6490 
6491  default:
6492  panic_impossible ();
6493  break;
6494  }
6495 
6496  int l = tok_val->line ();
6497  int c = tok_val->column ();
6498 
6499  return new tree_postfix_expression (op1, l, c, t);
6500  }
6501 
6502  // Build an unwind-protect command.
6503 
6504  tree_command *
6506  tree_statement_list *body,
6507  tree_statement_list *cleanup_stmts,
6508  token *end_tok,
6509  octave_comment_list *lc,
6510  octave_comment_list *mc)
6511  {
6512  tree_command *retval = 0;
6513 
6514  if (end_token_ok (end_tok, token::unwind_protect_end))
6515  {
6517 
6518  int l = unwind_tok->line ();
6519  int c = unwind_tok->column ();
6520 
6521  retval = new tree_unwind_protect_command (body, cleanup_stmts,
6522  lc, mc, tc, l, c);
6523  }
6524  else
6525  {
6526  delete body;
6527  delete cleanup_stmts;
6528 
6530  }
6531 
6532  return retval;
6533  }
6534 
6535  // Build a try-catch command.
6536 
6537  tree_command *
6539  tree_statement_list *body,
6540  char catch_sep,
6541  tree_statement_list *cleanup_stmts,
6542  token *end_tok,
6543  octave_comment_list *lc,
6544  octave_comment_list *mc)
6545  {
6546  tree_command *retval = 0;
6547 
6548  if (end_token_ok (end_tok, token::try_catch_end))
6549  {
6551 
6552  int l = try_tok->line ();
6553  int c = try_tok->column ();
6554 
6555  tree_identifier *id = 0;
6556 
6557  if (! catch_sep && cleanup_stmts && ! cleanup_stmts->empty ())
6558  {
6559  tree_statement *stmt = cleanup_stmts->front ();
6560 
6561  if (stmt)
6562  {
6563  tree_expression *expr = stmt->expression ();
6564 
6565  if (expr && expr->is_identifier ())
6566  {
6567  id = dynamic_cast<tree_identifier *> (expr);
6568 
6569  cleanup_stmts->pop_front ();
6570 
6571  stmt->set_expression (0);
6572  delete stmt;
6573  }
6574  }
6575  }
6576 
6577  retval = new tree_try_catch_command (body, cleanup_stmts, id,
6578  lc, mc, tc, l, c);
6579  }
6580  else
6581  {
6582  delete body;
6583  delete cleanup_stmts;
6584 
6586  }
6587 
6588  return retval;
6589  }
6590 
6591  // Build a while command.
6592 
6593  tree_command *
6595  tree_expression *expr,
6596  tree_statement_list *body,
6597  token *end_tok,
6598  octave_comment_list *lc)
6599  {
6600  tree_command *retval = 0;
6601 
6603 
6604  if (end_token_ok (end_tok, token::while_end))
6605  {
6607 
6608  lexer.looping--;
6609 
6610  int l = while_tok->line ();
6611  int c = while_tok->column ();
6612 
6613  retval = new tree_while_command (expr, body, lc, tc, l, c);
6614  }
6615  else
6616  {
6617  delete expr;
6618  delete body;
6619 
6620  end_token_error (end_tok, token::while_end);
6621  }
6622 
6623  return retval;
6624  }
6625 
6626  // Build a do-until command.
6627 
6628  tree_command *
6630  tree_statement_list *body,
6631  tree_expression *expr,
6632  octave_comment_list *lc)
6633  {
6635 
6637 
6638  lexer.looping--;
6639 
6640  int l = until_tok->line ();
6641  int c = until_tok->column ();
6642 
6643  return new tree_do_until_command (expr, body, lc, tc, l, c);
6644  }
6645 
6646  // Build a for command.
6647 
6648  tree_command *
6649  base_parser::make_for_command (int tok_id, token *for_tok,
6650  tree_argument_list *lhs,
6651  tree_expression *expr,
6652  tree_expression *maxproc,
6653  tree_statement_list *body,
6654  token *end_tok,
6655  octave_comment_list *lc)
6656  {
6657  tree_command *retval = 0;
6658 
6659  bool parfor = tok_id == PARFOR;
6660 
6661  if (end_token_ok (end_tok, parfor ? token::parfor_end : token::for_end))
6662  {
6663  expr->mark_as_for_cmd_expr ();
6664 
6666 
6667  lexer.looping--;
6668 
6669  int l = for_tok->line ();
6670  int c = for_tok->column ();
6671 
6672  if (lhs->length () == 1)
6673  {
6674  tree_expression *tmp = lhs->remove_front ();
6675 
6676  retval = new tree_simple_for_command (parfor, tmp, expr, maxproc,
6677  body, lc, tc, l, c);
6678 
6679  delete lhs;
6680  }
6681  else
6682  {
6683  if (parfor)
6684  {
6685  delete lhs;
6686  delete expr;
6687  delete maxproc;
6688  delete body;
6689 
6690  bison_error ("invalid syntax for parfor statement");
6691  }
6692  else
6693  retval = new tree_complex_for_command (lhs, expr, body,
6694  lc, tc, l, c);
6695  }
6696  }
6697  else
6698  {
6699  delete lhs;
6700  delete expr;
6701  delete maxproc;
6702  delete body;
6703 
6704  end_token_error (end_tok, parfor ? token::parfor_end : token::for_end);
6705  }
6706 
6707  return retval;
6708  }
6709 
6710  // Build a break command.
6711 
6712  tree_command *
6714  {
6715  int l = break_tok->line ();
6716  int c = break_tok->column ();
6717 
6718  return new tree_break_command (l, c);
6719  }
6720 
6721  // Build a continue command.
6722 
6723  tree_command *
6725  {
6726  int l = continue_tok->line ();
6727  int c = continue_tok->column ();
6728 
6729  return new tree_continue_command (l, c);
6730  }
6731 
6732  // Build a return command.
6733 
6734  tree_command *
6736  {
6737  int l = return_tok->line ();
6738  int c = return_tok->column ();
6739 
6740  return new tree_return_command (l, c);
6741  }
6742 
6743  // Start an if command.
6744 
6748  {
6750 
6751  tree_if_clause *t = new tree_if_clause (expr, list);
6752 
6753  return new tree_if_command_list (t);
6754  }
6755 
6756  // Finish an if command.
6757 
6758  tree_if_command *
6761  token *end_tok,
6762  octave_comment_list *lc)
6763  {
6764  tree_if_command *retval = 0;
6765 
6766  if (end_token_ok (end_tok, token::if_end))
6767  {
6769 
6770  int l = if_tok->line ();
6771  int c = if_tok->column ();
6772 
6773  if (list && ! list->empty ())
6774  {
6775  tree_if_clause *elt = list->front ();
6776 
6777  if (elt)
6778  {
6779  elt->line (l);
6780  elt->column (c);
6781  }
6782  }
6783 
6784  retval = new tree_if_command (list, lc, tc, l, c);
6785  }
6786  else
6787  {
6788  delete list;
6789 
6790  end_token_error (end_tok, token::if_end);
6791  }
6792 
6793  return retval;
6794  }
6795 
6796  // Build an elseif clause.
6797 
6798  tree_if_clause *
6800  tree_expression *expr,
6802  octave_comment_list *lc)
6803  {
6805 
6806  int l = elseif_tok->line ();
6807  int c = elseif_tok->column ();
6808 
6809  return new tree_if_clause (expr, list, lc, l, c);
6810  }
6811 
6812  // Finish a switch command.
6813 
6816  tree_expression *expr,
6818  token *end_tok,
6819  octave_comment_list *lc)
6820  {
6822 
6823  if (end_token_ok (end_tok, token::switch_end))
6824  {
6826 
6827  int l = switch_tok->line ();
6828  int c = switch_tok->column ();
6829 
6830  if (list && ! list->empty ())
6831  {
6832  tree_switch_case *elt = list->front ();
6833 
6834  if (elt)
6835  {
6836  elt->line (l);
6837  elt->column (c);
6838  }
6839  }
6840 
6841  retval = new tree_switch_command (expr, list, lc, tc, l, c);
6842  }
6843  else
6844  {
6845  delete expr;
6846  delete list;
6847 
6849  }
6850 
6851  return retval;
6852  }
6853 
6854  // Build a switch case.
6855 
6858  tree_expression *expr,
6860  octave_comment_list *lc)
6861  {
6863 
6864  int l = case_tok->line ();
6865  int c = case_tok->column ();
6866 
6867  return new tree_switch_case (expr, list, lc, l, c);
6868  }
6869 
6870  // Build an assignment to a variable.
6871 
6872  tree_expression *
6874  token *eq_tok, tree_expression *rhs)
6875  {
6877 
6878  switch (op)
6879  {
6880  case '=':
6882  break;
6883 
6884  case ADD_EQ:
6886  break;
6887 
6888  case SUB_EQ:
6890  break;
6891 
6892  case MUL_EQ:
6894  break;
6895 
6896  case DIV_EQ:
6898  break;
6899 
6900  case LEFTDIV_EQ:
6902  break;
6903 
6904  case POW_EQ:
6906  break;
6907 
6908  case EMUL_EQ:
6910  break;
6911 
6912  case EDIV_EQ:
6914  break;
6915 
6916  case ELEFTDIV_EQ:
6918  break;
6919 
6920  case EPOW_EQ:
6922  break;
6923 
6924  case AND_EQ:
6926  break;
6927 
6928  case OR_EQ:
6930  break;
6931 
6932  default:
6933  panic_impossible ();
6934  break;
6935  }
6936 
6937  int l = eq_tok->line ();
6938  int c = eq_tok->column ();
6939 
6940  if (! lhs->is_simple_assign_lhs () && t != octave_value::op_asn_eq)
6941  {
6942  // Multiple assignments like [x,y] OP= rhs are only valid for
6943  // '=', not '+=', etc.
6944 
6945  delete lhs;
6946  delete rhs;
6947 
6948  bison_error ("computed multiple assignment not allowed", l, c);
6949 
6950  return 0;
6951  }
6952 
6953  if (lhs->is_simple_assign_lhs ())
6954  {
6955  // We are looking at a simple assignment statement like x = rhs;
6956 
6957  tree_expression *tmp = lhs->remove_front ();
6958 
6959  if ((tmp->is_identifier () || tmp->is_index_expression ())
6960  && is_keyword (tmp->name ()))
6961  {
6962  std::string kw = tmp->name ();
6963 
6964  delete tmp;
6965  delete lhs;
6966  delete rhs;
6967 
6968  bison_error ("invalid assignment to keyword \"" + kw + "\"", l, c);
6969 
6970  return 0;
6971  }
6972 
6973  delete lhs;
6974 
6975  return new tree_simple_assignment (tmp, rhs, false, l, c, t);
6976  }
6977  else
6978  {
6979  std::list<std::string> names = lhs->variable_names ();
6980 
6981  for (std::list<std::string>::const_iterator it = names.begin ();
6982  it != names.end (); it++)
6983  {
6984  std::string kw = *it;
6985 
6986  if (is_keyword (kw))
6987  {
6988  delete lhs;
6989  delete rhs;
6990 
6991  bison_error ("invalid assignment to keyword \"" + kw + "\"",
6992  l, c);
6993 
6994  return 0;
6995  }
6996  }
6997 
6998  return new tree_multi_assignment (lhs, rhs, false, l, c);
6999  }
7000  }
7001 
7002  // Define a script.
7003 
7004  void
7006  tree_statement *end_script)
7007  {
7008  if (! cmds)
7009  cmds = new tree_statement_list ();
7010 
7011  cmds->append (end_script);
7012 
7013  octave_user_script *script
7016  cmds, lexer.help_text);
7017 
7018  lexer.help_text = "";
7019 
7021 
7022  script->stash_fcn_file_time (now);
7023 
7024  primary_fcn_ptr = script;
7025  }
7026 
7027  // Begin defining a function.
7028 
7031  tree_statement_list *body,
7032  tree_statement *end_fcn_stmt)
7033  {
7034  // We'll fill in the return list later.
7035 
7036  if (! body)
7037  body = new tree_statement_list ();
7038 
7039  body->append (end_fcn_stmt);
7040 
7043  param_list, 0, body);
7044 
7045  if (fcn)
7046  {
7048 
7049  fcn->stash_trailing_comment (tc);
7050  fcn->stash_fcn_end_location (end_fcn_stmt->line (),
7051  end_fcn_stmt->column ());
7052  }
7053 
7054  return fcn;
7055  }
7056 
7057  tree_statement *
7058  base_parser::make_end (const std::string& type, bool eof, int l, int c)
7059  {
7060  return make_statement (new tree_no_op_command (type, eof, l, c));
7061  }
7062 
7063  // Do most of the work for defining a function.
7064 
7068  {
7069  std::string id_name = fname;
7070 
7071  // If input is coming from a file, issue a warning if the name of
7072  // the file does not match the name of the function stated in the
7073  // file. Matlab doesn't provide a diagnostic (it ignores the stated
7074  // name).
7076  && curr_fcn_depth == 1 && ! parsing_subfunctions)
7077  {
7078  // FIXME: should lexer.fcn_file_name already be
7079  // preprocessed when we get here? It seems to only be a
7080  // problem with relative filenames.
7081 
7083 
7084  size_t pos = nm.find_last_of (octave::sys::file_ops::dir_sep_chars ());
7085 
7086  if (pos != std::string::npos)
7087  nm = lexer.fcn_file_name.substr (pos+1);
7088 
7089  if (nm != id_name)
7090  {
7092  ("Octave:function-name-clash",
7093  "function name '%s' does not agree with function filename '%s'",
7094  id_name.c_str (), lexer.fcn_file_full_name.c_str ());
7095 
7096  id_name = nm;
7097  }
7098  }
7099 
7101  {
7103 
7105  fcn->stash_fcn_file_time (now);
7106  fcn->mark_as_system_fcn_file ();
7107 
7109  fcn->mark_relative ();
7110 
7112  {
7114 
7115  if (curr_fcn_depth > 1)
7117  else
7119  }
7120 
7122  {
7123  if (curr_class_name == id_name)
7124  fcn->mark_as_class_constructor ();
7125  else
7126  fcn->mark_as_class_method ();
7127 
7129  }
7130 
7131  std::string nm = fcn->fcn_file_name ();
7132 
7134 
7135  if (fs && fs.is_newer (now))
7136  warning_with_id ("Octave:future-time-stamp",
7137  "time stamp for '%s' is in the future", nm.c_str ());
7138  }
7139  else if (! input_from_tmp_history_file
7140  && ! lexer.force_script
7142  && lexer.fcn_file_name == id_name)
7143  {
7144  warning ("function '%s' defined within script file '%s'",
7145  id_name.c_str (), lexer.fcn_file_full_name.c_str ());
7146  }
7147 
7148  fcn->stash_function_name (id_name);
7149 
7150  if (! lexer.help_text.empty () && curr_fcn_depth == 1
7151  && ! parsing_subfunctions)
7152  {
7153  fcn->document (lexer.help_text);
7154 
7155  lexer.help_text = "";
7156  }
7157 
7159  && ! parsing_subfunctions)
7160  primary_fcn_ptr = fcn;
7161 
7162  return fcn;
7163  }
7164 
7168  octave_comment_list *lc,
7169  int l, int c)
7170  {
7172 
7173  if (ret_list)
7174  ret_list->mark_as_formal_parameters ();
7175 
7176  if (fcn)
7177  {
7178  std::string nm = fcn->name ();
7179  std::string file = fcn->fcn_file_name ();
7180 
7181  std::string tmp = nm;
7182  if (! file.empty ())
7183  tmp += ": " + file;
7184 
7185  symbol_table::cache_name (fcn->scope (), tmp);
7186 
7187  if (lc)
7188  fcn->stash_leading_comment (lc);
7189 
7190  fcn->define_ret_list (ret_list);
7191 
7193  {
7194  fcn->mark_as_subfunction ();
7195  fcn->stash_fcn_location (l, c);
7196 
7197  subfunction_names.push_back (nm);
7198 
7199  if (endfunction_found && function_scopes.size () > 1)
7200  {
7201  symbol_table::scope_id pscope
7202  = function_scopes[function_scopes.size ()-2];
7203 
7205  pscope);
7206  }
7207  else
7210  }
7211 
7212  if (curr_fcn_depth == 1 && fcn)
7213  symbol_table::update_nest (fcn->scope ());
7214 
7215  if (! lexer.reading_fcn_file && curr_fcn_depth == 1)
7216  {
7217  // We are either reading a script file or defining a function
7218  // at the command line, so this definition creates a
7219  // tree_function object that is placed in the parse tree.
7220  // Otherwise, it is just inserted in the symbol table,
7221  // either as a subfunction or nested function (see above),
7222  // or as the primary function for the file, via
7223  // primary_fcn_ptr (see also load_fcn_from_file,,
7224  // parse_fcn_file, and
7225  // symbol_table::fcn_info::fcn_info_rep::find_user_function).
7226 
7227  retval = new tree_function_def (fcn);
7228  }
7229  }
7230 
7231  return retval;
7232  }
7233 
7234  void
7236  {
7238 
7240  && ! parsing_subfunctions)
7241  parsing_subfunctions = true;
7242 
7243  curr_fcn_depth--;
7244  function_scopes.pop_back ();
7245 
7246  lexer.defining_func--;
7247  lexer.parsed_function_name.pop ();
7248  lexer.looking_at_return_list = false;
7250  }
7251 
7252  tree_funcall *
7254  const std::string& class_nm)
7255  {
7257 
7258  args(1) = class_nm;
7259  args(0) = method_nm;
7260 
7262  = symbol_table::find_built_in_function ("__superclass_reference__");
7263 
7264  return new tree_funcall (fcn, args);
7265  }
7266 
7267  tree_funcall *
7269  {
7271 
7272  args(0) = class_nm;
7273 
7275  = symbol_table::find_built_in_function ("__meta_class_query__");
7276 
7277  return new tree_funcall (fcn, args);
7278  }
7279 
7280  // A CLASSDEF block defines a class that has a constructor and other
7281  // methods, but it is not an executable command. Parsing the block
7282  // makes some changes in the symbol table (inserting the constructor
7283  // and methods, and adding to the list of known objects) and creates
7284  // a parse tree containing meta information about the class.
7285 
7286  tree_classdef *
7289  tree_identifier *id,
7291  tree_classdef_body *body, token *end_tok,
7292  octave_comment_list *lc)
7293  {
7294  tree_classdef *retval = 0;
7295 
7296  std::string cls_name = id->name ();
7297 
7299 
7300  size_t pos = nm.find_last_of (octave::sys::file_ops::dir_sep_chars ());
7301 
7302  if (pos != std::string::npos)
7303  nm = lexer.fcn_file_name.substr (pos+1);
7304 
7305  if (nm != cls_name)
7306  {
7307  delete a;
7308  delete id;
7309  delete sc;
7310  delete body;
7311 
7312  bison_error ("invalid classdef definition, the class name must match the filename");
7313 
7314  }
7315  else
7316  {
7317  if (end_token_ok (end_tok, token::classdef_end))
7318  {
7320 
7321  int l = tok_val->line ();
7322  int c = tok_val->column ();
7323 
7324  if (! body)
7325  body = new tree_classdef_body ();
7326 
7327  retval = new tree_classdef (a, id, sc, body, lc, tc,
7328  curr_package_name, l, c);
7329  }
7330  else
7331  {
7332  delete a;
7333  delete id;
7334  delete sc;
7335  delete body;
7336 
7338  }
7339  }
7340 
7341  return retval;
7342  }
7343 
7348  token *end_tok,
7349  octave_comment_list *lc)
7350  {
7352 
7353  if (end_token_ok (end_tok, token::properties_end))
7354  {
7356 
7357  int l = tok_val->line ();
7358  int c = tok_val->column ();
7359 
7360  if (! plist)
7361  plist = new tree_classdef_property_list ();
7362 
7363  retval = new tree_classdef_properties_block (a, plist, lc, tc, l, c);
7364  }
7365  else
7366  {
7367  delete a;
7368  delete plist;
7369 
7371  }
7372 
7373  return retval;
7374  }
7375 
7380  token *end_tok,
7381  octave_comment_list *lc)
7382  {
7384 
7385  if (end_token_ok (end_tok, token::methods_end))
7386  {
7388 
7389  int l = tok_val->line ();
7390  int c = tok_val->column ();
7391 
7392  if (! mlist)
7393  mlist = new tree_classdef_methods_list ();
7394 
7395  retval = new tree_classdef_methods_block (a, mlist, lc, tc, l, c);
7396  }
7397  else
7398  {
7399  delete a;
7400  delete mlist;
7401 
7403  }
7404 
7405  return retval;
7406  }
7407 
7412  token *end_tok,
7413  octave_comment_list *lc)
7414  {
7416 
7417  if (end_token_ok (end_tok, token::events_end))
7418  {
7420 
7421  int l = tok_val->line ();
7422  int c = tok_val->column ();
7423 
7424  if (! elist)
7425  elist = new tree_classdef_events_list ();
7426 
7427  retval = new tree_classdef_events_block (a, elist, lc, tc, l, c);
7428  }
7429  else
7430  {
7431  delete a;
7432  delete elist;
7433 
7435  }
7436 
7437  return retval;
7438  }
7439 
7443  tree_classdef_enum_list *elist,
7444  token *end_tok,
7445  octave_comment_list *lc)
7446  {
7448 
7449  if (end_token_ok (end_tok, token::enumeration_end))
7450  {
7452 
7453  int l = tok_val->line ();
7454  int c = tok_val->column ();
7455 
7456  if (! elist)
7457  elist = new tree_classdef_enum_list ();
7458 
7459  retval = new tree_classdef_enum_block (a, elist, lc, tc, l, c);
7460  }
7461  else
7462  {
7463  delete a;
7464  delete elist;
7465 
7467  }
7468 
7469  return retval;
7470  }
7471 
7474  tree_parameter_list *pl)
7475  {
7477 
7478  // External methods are only allowed within @-folders. In this case,
7479  // curr_class_name will be non-empty.
7480 
7481  if (! curr_class_name.empty ())
7482  {
7483 
7484  std::string mname = id->name ();
7485 
7486  // Methods that cannot be declared outside the classdef file:
7487  // - methods with '.' character (e.g. property accessors)
7488  // - class constructor
7489  // - `delete'
7490 
7491  if (mname.find_first_of (".") == std::string::npos
7492  && mname != "delete"
7493  && mname != curr_class_name)
7494  {
7495  // Create a dummy function that is used until the real method
7496  // is loaded.
7497 
7498  retval = new octave_user_function (-1, pl);
7499 
7500  retval->stash_function_name (mname);
7501 
7502  int l = id->line ();
7503  int c = id->column ();
7504 
7505  retval->stash_fcn_location (l, c);
7506  }
7507  else
7508  bison_error ("invalid external method declaration, an external "
7509  "method cannot be the class constructor, `delete' "
7510  "or have a dot (.) character in its name");
7511  }
7512  else
7513  bison_error ("external methods are only allowed in @-folders");
7514 
7515  if (! retval)
7516  delete id;
7517 
7518  return retval;
7519  }
7520 
7523  tree_parameter_list *ret_list,
7524  octave_comment_list *cl)
7525  {
7526  if (ret_list)
7527  fcn->define_ret_list (ret_list);
7528 
7529  if (cl)
7530  fcn->stash_leading_comment (cl);
7531 
7532  int l = fcn->beginning_line ();
7533  int c = fcn->beginning_column ();
7534 
7535  return new tree_function_def (fcn, l, c);
7536  }
7537 
7538  // Make an index expression.
7539 
7543  char type)
7544  {
7546 
7547  if (args && args->has_magic_tilde ())
7548  {
7549  delete expr;
7550  delete args;
7551 
7552  bison_error ("invalid use of empty argument (~) in index expression");
7553  }
7554  else
7555  {
7556  int l = expr->line ();
7557  int c = expr->column ();
7558 
7559  if (! expr->is_postfix_indexed ())
7560  expr->set_postfix_index (type);
7561 
7562  if (expr->is_index_expression ())
7563  {
7565  static_cast<tree_index_expression *> (expr);
7566 
7567  tmp->append (args, type);
7568 
7569  retval = tmp;
7570  }
7571  else
7572  retval = new tree_index_expression (expr, args, l, c, type);
7573  }
7574 
7575  return retval;
7576  }
7577 
7578  // Make an indirect reference expression.
7579 
7582  const std::string& elt)
7583  {
7585 
7586  int l = expr->line ();
7587  int c = expr->column ();
7588 
7589  if (! expr->is_postfix_indexed ())
7590  expr->set_postfix_index ('.');
7591 
7592  if (expr->is_index_expression ())
7593  {
7594  tree_index_expression *tmp = static_cast<tree_index_expression *> (expr);
7595 
7596  tmp->append (elt);
7597 
7598  retval = tmp;
7599  }
7600  else
7601  retval = new tree_index_expression (expr, elt, l, c);
7602 
7604 
7605  return retval;
7606  }
7607 
7608  // Make an indirect reference expression with dynamic field name.
7609 
7612  tree_expression *elt)
7613  {
7615 
7616  int l = expr->line ();
7617  int c = expr->column ();
7618 
7619  if (! expr->is_postfix_indexed ())
7620  expr->set_postfix_index ('.');
7621 
7622  if (expr->is_index_expression ())
7623  {
7624  tree_index_expression *tmp = static_cast<tree_index_expression *> (expr);
7625 
7626  tmp->append (elt);
7627 
7628  retval = tmp;
7629  }
7630  else
7631  retval = new tree_index_expression (expr, elt, l, c);
7632 
7634 
7635  return retval;
7636  }
7637 
7638  // Make a declaration command.
7639 
7642  tree_decl_init_list *lst)
7643  {
7645 
7646  int l = tok_val->line ();
7647  int c = tok_val->column ();
7648 
7649  switch (tok)
7650  {
7651  case GLOBAL:
7652  retval = new tree_global_command (lst, l, c);
7653  break;
7654 
7655  case PERSISTENT:
7656  if (curr_fcn_depth > 0)
7657  retval = new tree_persistent_command (lst, l, c);
7658  else
7659  {
7661  warning ("ignoring persistent declaration near line %d of file '%s'",
7662  l, lexer.fcn_file_full_name.c_str ());
7663  else
7664  warning ("ignoring persistent declaration near line %d", l);
7665  }
7666  break;
7667 
7668  default:
7669  panic_impossible ();
7670  break;
7671  }
7672 
7673  return retval;
7674  }
7675 
7676  bool
7678  {
7679  bool retval = true;
7680 
7681  tree_array_list *al = dynamic_cast<tree_array_list *> (e);
7682 
7683  for (tree_array_list::iterator i = al->begin (); i != al->end (); i++)
7684  {
7685  tree_argument_list *row = *i;
7686 
7687  if (row && row->has_magic_tilde ())
7688  {
7689  retval = false;
7690 
7691  if (e->is_matrix ())
7692  bison_error ("invalid use of tilde (~) in matrix expression");
7693  else
7694  bison_error ("invalid use of tilde (~) in cell expression");
7695 
7696  break;
7697  }
7698  }
7699 
7700  return retval;
7701  }
7702 
7705  {
7707 
7708  if (e->is_constant ())
7709  {
7710  octave_value ov = e->rvalue1 ();
7711 
7712  delete e;
7713 
7714  if (ov.is_empty ())
7715  bison_error ("invalid empty left hand side of assignment");
7716  else
7717  bison_error ("invalid constant left hand side of assignment");
7718  }
7719  else
7720  {
7721  bool is_simple_assign = true;
7722 
7723  tree_argument_list *tmp = 0;
7724 
7725  if (e->is_matrix ())
7726  {
7727  tree_matrix *mat = dynamic_cast<tree_matrix *> (e);
7728 
7729  if (mat && mat->size () == 1)
7730  {
7731  tmp = mat->front ();
7732  mat->pop_front ();
7733  delete e;
7734  is_simple_assign = false;
7735  }
7736  }
7737  else
7738  tmp = new tree_argument_list (e);
7739 
7740  if (tmp && tmp->is_valid_lvalue_list ())
7741  {
7743  retval = tmp;
7744  }
7745  else
7746  {
7747  delete tmp;
7748 
7749  bison_error ("invalid left hand side of assignment");
7750  }
7751 
7752  if (retval && is_simple_assign)
7753  retval->mark_as_simple_assign_lhs ();
7754  }
7755 
7756  return retval;
7757  }
7758 
7759  // Finish building an array_list.
7760 
7761  tree_expression *
7763  {
7764  tree_expression *retval = array_list;
7765 
7767 
7770 
7771  discard_error_messages = true;
7772  discard_warning_messages = true;
7773 
7774  if (array_list->all_elements_are_constant ())
7775  {
7776  try
7777  {
7778  octave_value tmp = array_list->rvalue1 ();
7779 
7780  tree_constant *tc_retval
7781  = new tree_constant (tmp, array_list->line (),
7782  array_list->column ());
7783 
7784  std::ostringstream buf;
7785 
7786  tree_print_code tpc (buf);
7787 
7788  array_list->accept (tpc);
7789 
7790  tc_retval->stash_original_text (buf.str ());
7791 
7792  delete array_list;
7793 
7794  retval = tc_retval;
7795  }
7796  catch (const octave::execution_exception&)
7797  {
7799  }
7800  }
7801 
7802  return retval;
7803  }
7804 
7805  // Finish building a matrix list.
7806 
7807  tree_expression *
7809  {
7810  return (m
7811  ? finish_array_list (m)
7813  }
7814 
7815  // Finish building a cell list.
7816 
7817  tree_expression *
7819  {
7820  return (c
7821  ? finish_array_list (c)
7822  : new tree_constant (octave_value (Cell ())));
7823  }
7824 
7825  void
7827  {
7828  if (curr_fcn_depth > 0)
7829  {
7830  tree_statement *tmp = t->back ();
7831 
7832  if (tmp->is_expression ())
7834  ("Octave:missing-semicolon",
7835  "missing semicolon near line %d, column %d in file '%s'",
7836  tmp->line (), tmp->column (), lexer.fcn_file_full_name.c_str ());
7837  }
7838  }
7839 
7842  char sep, bool warn_missing_semi)
7843  {
7844  tree_statement *tmp = list->back ();
7845 
7846  switch (sep)
7847  {
7848  case ';':
7849  tmp->set_print_flag (false);
7850  break;
7851 
7852  case 0:
7853  case ',':
7854  case '\n':
7855  tmp->set_print_flag (true);
7856  if (warn_missing_semi)
7857  maybe_warn_missing_semi (list);
7858  break;
7859 
7860  default:
7861  warning ("unrecognized separator type!");
7862  break;
7863  }
7864 
7865  // Even if a statement is null, we add it to the list then remove it
7866  // here so that the print flag is applied to the correct statement.
7867 
7868  if (tmp->is_null_statement ())
7869  {
7870  list->pop_back ();
7871  delete tmp;
7872  }
7873 
7874  return list;
7875  }
7876 
7877  // Finish building a statement.
7878  template <typename T>
7879  tree_statement *
7881  {
7882  octave_comment_list *comment = lexer.get_comment ();
7883 
7884  return new tree_statement (arg, comment);
7885  }
7886 
7889  {
7890  return new tree_statement_list (stmt);
7891  }
7892 
7895  char sep, tree_statement *stmt,
7896  bool warn_missing_semi)
7897  {
7898  set_stmt_print_flag (list, sep, warn_missing_semi);
7899 
7900  list->append (stmt);
7901 
7902  return list;
7903  }
7904 
7905  void
7907  {
7908  int err_line = l < 0 ? lexer.input_line_number : l;
7909  int err_col = c < 0 ? lexer.current_input_column - 1 : c;
7910 
7911  std::ostringstream output_buf;
7912 
7915  output_buf << "parse error near line " << err_line
7916  << " of file " << lexer.fcn_file_full_name;
7917  else
7918  output_buf << "parse error:";
7919 
7920  if (str != "parse error")
7921  output_buf << "\n\n " << str;
7922 
7923  output_buf << "\n\n";
7924 
7925  std::string curr_line = lexer.current_input_line;
7926 
7927  if (! curr_line.empty ())
7928  {
7929  size_t len = curr_line.length ();
7930 
7931  if (curr_line[len-1] == '\n')
7932  curr_line.resize (len-1);
7933 
7934  // Print the line, maybe with a pointer near the error token.
7935 
7936  output_buf << ">>> " << curr_line << "\n";
7937 
7938  if (err_col == 0)
7939  err_col = len;
7940 
7941  for (int i = 0; i < err_col + 3; i++)
7942  output_buf << " ";
7943 
7944  output_buf << "^";
7945  }
7946 
7947  output_buf << "\n";
7948 
7949  parse_error_msg = output_buf.str ();
7950  }
7951 
7952  int
7954  {
7955  int status = -1;
7956 
7957  yypstate *pstate = static_cast<yypstate *> (parser_state);
7958 
7959  try
7960  {
7961  status = octave_pull_parse (pstate, *this);
7962  }
7963  catch (octave::execution_exception& e)
7964  {
7966 
7967  if (file.empty ())
7968  error (e, "parse error");
7969  else
7970  error (e, "parse error in %s", file.c_str ());
7971  }
7972  catch (const octave::exit_exception&)
7973  {
7974  throw;
7975  }
7976  catch (octave::interrupt_exception &)
7977  {
7978  throw;
7979  }
7980  catch (...)
7981  {
7983 
7984  if (file.empty ())
7985  error ("unexpected exception while parsing input");
7986  else
7987  error ("unexpected exception while parsing %s", file.c_str ());
7988  }
7989 
7990  if (status != 0)
7991  parse_error ("%s", parse_error_msg.c_str ());
7992 
7993  return status;
7994  }
7995 
7996  // Parse input from INPUT. Pass TRUE for EOF if the end of INPUT should
7997  // finish the parse.
7998 
7999  int
8001  {
8002  int status = -1;
8003 
8004  dynamic_cast<push_lexer&> (lexer).append_input (input, eof);
8005 
8006  do
8007  {
8008  YYSTYPE lval;
8009 
8010  int token = octave_lex (&lval, scanner);
8011 
8012  if (token < 0)
8013  {
8014  if (! eof && lexer.at_end_of_buffer ())
8015  {
8016  status = -1;
8017  break;
8018  }
8019  }
8020 
8021  yypstate *pstate = static_cast<yypstate *> (parser_state);
8022 
8023  try
8024  {
8025  status = octave_push_parse (pstate, token, &lval, *this);
8026  }
8027  catch (octave::execution_exception& e)
8028  {
8030 
8031  if (file.empty ())
8032  error (e, "parse error");
8033  else
8034  error (e, "parse error in %s", file.c_str ());
8035  }
8036  catch (const octave::exit_exception&)
8037  {
8038  throw;
8039  }
8040  catch (octave::interrupt_exception &)
8041  {
8042  throw;
8043  }
8044  catch (...)
8045  {
8047 
8048  if (file.empty ())
8049  error ("unexpected exception while parsing input");
8050  else
8051  error ("unexpected exception while parsing %s", file.c_str ());
8052  }
8053  }
8054  while (status == YYPUSH_MORE);
8055 
8056  if (status != 0)
8057  parse_error ("%s", parse_error_msg.c_str ());
8058 
8059  return status;
8060  }
8061 }
8062 
8063 static void
8065 {
8066  if (f)
8067  fclose (static_cast<FILE *> (f));
8068 }
8069 
8070 static octave_function *
8071 parse_fcn_file (const std::string& full_file, const std::string& file,
8072  const std::string& dispatch_type,
8073  const std::string& package_name,
8074  bool require_file, bool force_script, bool autoload,
8075  bool relative_lookup, const std::string& warn_for)
8076 {
8078 
8079  octave_function *fcn_ptr = 0;
8080 
8081  // Open function file and parse.
8082 
8083  FILE *in_stream = octave::command_editor::get_input_stream ();
8084 
8086 
8089 
8091 
8092  FILE *ffile = 0;
8093 
8094  if (! full_file.empty ())
8095  ffile = std::fopen (full_file.c_str (), "rb");
8096 
8097  if (ffile)
8098  {
8099  frame.add_fcn (safe_fclose, ffile);
8100 
8101  // octave::base_parser constructor sets this for us.
8102  frame.protect_var (LEXER);
8103 
8104  octave::parser parser (ffile);
8105 
8106  parser.curr_class_name = dispatch_type;
8107  parser.curr_package_name = package_name;
8108  parser.autoloading = autoload;
8109  parser.fcn_file_from_relative_lookup = relative_lookup;
8110 
8111  parser.lexer.force_script = force_script;
8112  parser.lexer.prep_for_file ();
8113  parser.lexer.parsing_class_method = ! dispatch_type.empty ();
8114 
8115  parser.lexer.fcn_file_name = file;
8116  parser.lexer.fcn_file_full_name = full_file;
8117 
8118  int status = parser.run ();
8119 
8120  fcn_ptr = parser.primary_fcn_ptr;
8121 
8122  if (status == 0)
8123  {
8124  if (parser.lexer.reading_classdef_file
8125  && parser.classdef_object)
8126  {
8127  // Convert parse tree for classdef object to
8128  // meta.class info (and stash it in the symbol
8129  // table?). Return pointer to constructor?
8130 
8131  if (fcn_ptr)
8132  panic_impossible ();
8133 
8134  bool is_at_folder = ! dispatch_type.empty ();
8135 
8136  fcn_ptr =
8137  parser.classdef_object->make_meta_class (is_at_folder);
8138 
8139  delete (parser.classdef_object);
8140 
8141  parser.classdef_object = 0;
8142  }
8143  else if (fcn_ptr)
8144  {
8145  fcn_ptr->maybe_relocate_end ();
8146 
8147  if (parser.parsing_subfunctions)
8148  {
8149  if (! parser.endfunction_found)
8150  parser.subfunction_names.reverse ();
8151 
8152  fcn_ptr->stash_subfunction_names (parser.subfunction_names);
8153  }
8154  }
8155  }
8156  else
8157  error ("parse error while reading file %s", full_file.c_str ());
8158  }
8159  else if (require_file)
8160  error ("no such file, '%s'", full_file.c_str ());
8161  else if (! warn_for.empty ())
8162  error ("%s: unable to open file '%s'", warn_for.c_str (),
8163  full_file.c_str ());
8164 
8165  return fcn_ptr;
8166 }
8167 
8169 get_help_from_file (const std::string& nm, bool& symbol_found,
8170  std::string& full_file)
8171 {
8173 
8174  full_file = fcn_file_in_path (nm);
8175 
8176  std::string file = full_file;
8177 
8178  size_t file_len = file.length ();
8179 
8180  if ((file_len > 4 && file.substr (file_len-4) == ".oct")
8181  || (file_len > 4 && file.substr (file_len-4) == ".mex")
8182  || (file_len > 2 && file.substr (file_len-2) == ".m"))
8183  {
8184  file = octave::sys::env::base_pathname (file);
8185  file = file.substr (0, file.find_last_of ('.'));
8186 
8187  size_t pos = file.find_last_of (octave::sys::file_ops::dir_sep_str ());
8188  if (pos != std::string::npos)
8189  file = file.substr (pos+1);
8190  }
8191 
8192  if (! file.empty ())
8193  {
8194  symbol_found = true;
8195 
8197  = parse_fcn_file (full_file, file, "", "", true, false, false, false,
8198  "");
8199 
8200  if (fcn)
8201  {
8202  retval = fcn->doc_string ();
8203 
8204  delete fcn;
8205  }
8206  }
8207 
8208  return retval;
8209 }
8210 
8212 get_help_from_file (const std::string& nm, bool& symbol_found)
8213 {
8214  std::string file;
8215  return get_help_from_file (nm, symbol_found, file);
8216 }
8217 
8220 {
8222 
8223  typedef std::map<std::string, std::string>::const_iterator am_iter;
8224 
8225  am_iter p = autoload_map.find (nm);
8226 
8227  if (p != autoload_map.end ())
8228  retval = load_path::find_file (p->second);
8229 
8230  return retval;
8231 }
8232 
8235 {
8236  string_vector names (autoload_map.size ());
8237 
8238  octave_idx_type i = 0;
8239  typedef std::map<std::string, std::string>::const_iterator am_iter;
8240  for (am_iter p = autoload_map.begin (); p != autoload_map.end (); p++)
8241  names[i++] = p->first;
8242 
8243  return names;
8244 }
8245 
8248 {
8249  string_vector names;
8250 
8251  typedef std::map<std::string, std::string>::const_iterator am_iter;
8252  for (am_iter p = autoload_map.begin (); p != autoload_map.end (); p++)
8253  if (nm == p->second)
8254  names.append (p->first);
8255 
8256  return names;
8257 }
8258 
8260 load_fcn_from_file (const std::string& file_name, const std::string& dir_name,
8261  const std::string& dispatch_type,
8262  const std::string& package_name,
8263  const std::string& fcn_name, bool autoload)
8264 {
8265  octave_function *retval = 0;
8266 
8268 
8269  std::string nm = file_name;
8270 
8271  size_t nm_len = nm.length ();
8272 
8273  std::string file;
8274 
8275  bool relative_lookup = false;
8276 
8277  file = nm;
8278 
8279  if ((nm_len > 4 && nm.substr (nm_len-4) == ".oct")
8280  || (nm_len > 4 && nm.substr (nm_len-4) == ".mex")
8281  || (nm_len > 2 && nm.substr (nm_len-2) == ".m"))
8282  {
8283  nm = octave::sys::env::base_pathname (file);
8284  nm = nm.substr (0, nm.find_last_of ('.'));
8285 
8286  size_t pos = nm.find_last_of (octave::sys::file_ops::dir_sep_str ());
8287  if (pos != std::string::npos)
8288  nm = nm.substr (pos+1);
8289  }
8290 
8291  relative_lookup = ! octave::sys::env::absolute_pathname (file);
8292 
8293  file = octave::sys::env::make_absolute (file);
8294 
8295  int len = file.length ();
8296 
8297  if (len > 4 && file.substr (len-4, len-1) == ".oct")
8298  {
8299  if (autoload && ! fcn_name.empty ())
8300  nm = fcn_name;
8301 
8302  retval = octave_dynamic_loader::load_oct (nm, file, relative_lookup);
8303  }
8304  else if (len > 4 && file.substr (len-4, len-1) == ".mex")
8305  {
8306  // Temporarily load m-file version of mex-file, if it exists,
8307  // to get the help-string to use.
8308 
8309  octave_function *tmpfcn = parse_fcn_file (file.substr (0, len - 2),
8310  nm, dispatch_type,
8311  package_name, false,
8312  autoload, autoload,
8313  relative_lookup, "");
8314 
8315  retval = octave_dynamic_loader::load_mex (nm, file, relative_lookup);
8316 
8317  if (tmpfcn)
8318  retval->document (tmpfcn->doc_string ());
8319  delete tmpfcn;
8320  }
8321  else if (len > 2)
8322  {
8323  retval = parse_fcn_file (file, nm, dispatch_type, package_name, true,
8324  autoload, autoload, relative_lookup, "");
8325  }
8326 
8327  if (retval)
8328  {
8329  retval->stash_dir_name (dir_name);
8330  retval->stash_package_name (package_name);
8331 
8332  if (retval->is_user_function ())
8333  {
8334  symbol_table::scope_id id = retval->scope ();
8335 
8337  }
8338  }
8339 
8340  return retval;
8341 }
8342 
8343 DEFUN (autoload, args, ,
8344  doc: /* -*- texinfo -*-
8345 @deftypefn {} {@var{autoload_map} =} autoload ()
8346 @deftypefnx {} {} autoload (@var{function}, @var{file})
8347 @deftypefnx {} {} autoload (@dots{}, "remove")
8348 Define @var{function} to autoload from @var{file}.
8349 
8350 The second argument, @var{file}, should be an absolute filename or a file
8351 name in the same directory as the function or script from which the autoload
8352 command was run. @var{file} @emph{should not} depend on the Octave load
8353 path.
8354 
8355 Normally, calls to @code{autoload} appear in PKG_ADD script files that are
8356 evaluated when a directory is added to Octave's load path. To avoid having
8357 to hardcode directory names in @var{file}, if @var{file} is in the same
8358 directory as the PKG_ADD script then
8359 
8360 @example
8361 autoload ("foo", "bar.oct");
8362 @end example
8363 
8364 @noindent
8365 will load the function @code{foo} from the file @code{bar.oct}. The above
8366 usage when @code{bar.oct} is not in the same directory, or usages such as
8367 
8368 @example
8369 autoload ("foo", file_in_loadpath ("bar.oct"))
8370 @end example
8371 
8372 @noindent
8373 are strongly discouraged, as their behavior may be unpredictable.
8374 
8375 With no arguments, return a structure containing the current autoload map.
8376 
8377 If a third argument @qcode{"remove"} is given, the function is cleared and
8378 not loaded anymore during the current Octave session.
8379 
8380 @seealso{PKG_ADD}
8381 @end deftypefn */)
8382 {
8384 
8385  int nargin = args.length ();
8386 
8387  if (nargin == 1 || nargin > 3)
8388  print_usage ();
8389 
8390  if (nargin == 0)
8391  {
8392  Cell func_names (dim_vector (autoload_map.size (), 1));
8393  Cell file_names (dim_vector (autoload_map.size (), 1));
8394 
8395  octave_idx_type i = 0;
8396  typedef std::map<std::string, std::string>::const_iterator am_iter;
8397  for (am_iter p = autoload_map.begin (); p != autoload_map.end (); p++)
8398  {
8399  func_names(i) = p->first;
8400  file_names(i) = p->second;
8401 
8402  i++;
8403  }
8404 
8405  octave_map m;
8406 
8407  m.assign ("function", func_names);
8408  m.assign ("file", file_names);
8409 
8410  retval = m;
8411  }
8412  else
8413  {
8414  string_vector argv = args.make_argv ("autoload");
8415 
8416  std::string nm = argv[2];
8417 
8419  {
8421 
8422  bool found = false;
8423 
8424  if (fcn)
8425  {
8426  std::string fname = fcn->fcn_file_name ();
8427 
8428  if (! fname.empty ())
8429  {
8430  fname = octave::sys::env::make_absolute (fname);
8431  fname = fname.substr (0, fname.find_last_of (octave::sys::file_ops::dir_sep_str ()) + 1);
8432 
8433  octave::sys::file_stat fs (fname + nm);
8434 
8435  if (fs.exists ())
8436  {
8437  nm = fname + nm;
8438  found = true;
8439  }
8440  }
8441  }
8442  if (! found)
8443  warning_with_id ("Octave:autoload-relative-file-name",
8444  "autoload: '%s' is not an absolute filename",
8445  nm.c_str ());
8446  }
8447  if (nargin == 2)
8448  autoload_map[argv[1]] = nm;
8449  else if (nargin == 3)
8450  {
8451  if (argv[3] != "remove")
8452  error_with_id ("Octave:invalid-input-arg",
8453  "autoload: third argument can only be 'remove'");
8454 
8455  // Remove function from symbol table and autoload map.
8457  autoload_map.erase (argv[1]);
8458  }
8459  }
8460 
8461  return retval;
8462 }
8463 
8464 void
8465 source_file (const std::string& file_name, const std::string& context,
8466  bool verbose, bool require_file, const std::string& warn_for)
8467 {
8468  // Map from absolute name of script file to recursion level. We
8469  // use a map instead of simply placing a limit on recursion in the
8470  // source_file function so that two mutually recursive scripts
8471  // written as
8472  //
8473  // foo1.m:
8474  // ------
8475  // foo2
8476  //
8477  // foo2.m:
8478  // ------
8479  // foo1
8480  //
8481  // and called with
8482  //
8483  // foo1
8484  //
8485  // (for example) will behave the same if they are written as
8486  //
8487  // foo1.m:
8488  // ------
8489  // source ("foo2.m")
8490  //
8491  // foo2.m:
8492  // ------
8493  // source ("foo1.m")
8494  //
8495  // and called with
8496  //
8497  // source ("foo1.m")
8498  //
8499  // (for example).
8500 
8501  static std::map<std::string, int> source_call_depth;
8502 
8503  std::string file_full_name = octave::sys::file_ops::tilde_expand (file_name);
8504 
8505  file_full_name = octave::sys::env::make_absolute (file_full_name);
8506 
8508 
8509  if (source_call_depth.find (file_full_name) == source_call_depth.end ())
8510  source_call_depth[file_full_name] = -1;
8511 
8512  frame.protect_var (source_call_depth[file_full_name]);
8513 
8514  source_call_depth[file_full_name]++;
8515 
8516  if (source_call_depth[file_full_name] >= Vmax_recursion_depth)
8517  error ("max_recursion_depth exceeded");
8518 
8519  if (! context.empty ())
8520  {
8521  if (context == "caller")
8523  else if (context == "base")
8525  else
8526  error ("source: context must be \"caller\" or \"base\"");
8527 
8529  }
8530 
8531  octave_function *fcn = 0;
8532  // Don't delete a function already in symbol_table
8533  bool delete_fcn = false;
8534 
8535  // Find symbol name that would be in symbol_table, if it were loaded.
8536  size_t dir_end = file_name.find_last_of (octave::sys::file_ops::dir_sep_chars ());
8537  dir_end = (dir_end == std::string::npos) ? 0 : dir_end + 1;
8538 
8539  size_t extension = file_name.find_last_of ('.');
8540  if (extension == std::string::npos)
8541  extension = file_name.length ();
8542 
8543  std::string symbol = file_name.substr (dir_end, extension - dir_end);
8544  std::string full_name = octave::sys::canonicalize_file_name (file_name);
8545 
8546  // Check if this file is already loaded (or in the path)
8547  octave_value loaded_sym = symbol_table::find (symbol);
8548  if (loaded_sym.is_function ())
8549  {
8550  fcn = loaded_sym.function_value ();
8551  if (fcn)
8552  {
8554  != full_name)
8555  {
8556  fcn = 0; // wrong file, so load it below
8557  delete_fcn = true; // and delete it when done.
8558  }
8559  }
8560  }
8561 
8562  // If no symbol of this name, or the symbol is for a different file, load
8563  if (! fcn)
8564  {
8565  try
8566  {
8567  fcn = parse_fcn_file (file_full_name, file_name, "", "",
8568  require_file, true, false, false, warn_for);
8569  }
8570  catch (octave::execution_exception& e)
8571  {
8572  error (e, "source: error sourcing file '%s'",
8573  file_full_name.c_str ());
8574  }
8575  }
8576 
8577  // Return or error if we don't have a valid script
8578  if (! fcn)
8579  return;
8580 
8581  if (! fcn->is_user_code ())
8582  {
8583  if (delete_fcn)
8584  delete fcn;
8585  error ("source: %s is not a script", full_name.c_str ());
8586  }
8587 
8588  // Parameter checking is over. Now run.
8590 
8591  if (verbose)
8592  {
8593  std::cout << "executing commands from " << full_name << " ... ";
8594  reading_startup_message_printed = true;
8595  std::cout.flush ();
8596  }
8597 
8598  fcn->do_multi_index_op (0, args);
8599 
8600  if (verbose)
8601  std::cout << "done." << std::endl;
8602 
8603  // Delete scripts not on the path, so they don't shadow ones that are.
8604  if (delete_fcn)
8605  delete fcn;
8606 }
8607 
8608 DEFUN (mfilename, args, ,
8609  doc: /* -*- texinfo -*-
8610 @deftypefn {} {} mfilename ()
8611 @deftypefnx {} {} mfilename ("fullpath")
8612 @deftypefnx {} {} mfilename ("fullpathext")
8613 Return the name of the currently executing file.
8614 
8615 When called from outside an m-file return the empty string.
8616 
8617 Given the argument @qcode{"fullpath"}, include the directory part of the
8618 filename, but not the extension.
8619 
8620 Given the argument @qcode{"fullpathext"}, include the directory part of
8621 the filename and the extension.
8622 @end deftypefn */)
8623 {
8625 
8626  int nargin = args.length ();
8627 
8628  if (nargin > 1)
8629  print_usage ();
8630 
8631  std::string arg;
8632 
8633  if (nargin == 1)
8634  arg = args(0).xstring_value ("mfilename: argument must be a string");
8635 
8637 
8639 
8640  if (fcn)
8641  {
8642  fname = fcn->fcn_file_name ();
8643 
8644  if (fname.empty ())
8645  fname = fcn->name ();
8646  }
8647 
8648  if (arg == "fullpathext")
8649  retval = fname;
8650  else
8651  {
8652  size_t dpos = fname.rfind (octave::sys::file_ops::dir_sep_char ());
8653  size_t epos = fname.rfind ('.');
8654 
8655  if (epos <= dpos)
8656  epos = std::string::npos;
8657 
8658  fname = (epos != std::string::npos) ? fname.substr (0, epos) : fname;
8659 
8660  if (arg == "fullpath")
8661  retval = fname;
8662  else
8663  retval = (dpos != std::string::npos) ? fname.substr (dpos+1) : fname;
8664  }
8665 
8666  return retval;
8667 }
8668 
8669 DEFUN (source, args, ,
8670  doc: /* -*- texinfo -*-
8671 @deftypefn {} {} source (@var{file})
8672 @deftypefnx {} {} source (@var{file}, @var{context})
8673 Parse and execute the contents of @var{file}.
8674 
8675 Without specifying @var{context}, this is equivalent to executing commands
8676 from a script file, but without requiring the file to be named
8677 @file{@var{file}.m} or to be on the execution path.
8678 
8679 Instead of the current context, the script may be executed in either the
8680 context of the function that called the present function
8681 (@qcode{"caller"}), or the top-level context (@qcode{"base"}).
8682 @seealso{run}
8683 @end deftypefn */)
8684 {
8686 
8687  int nargin = args.length ();
8688 
8689  if (nargin < 1 || nargin > 2)
8690  print_usage ();
8691 
8692  std::string file_name = args(0).xstring_value ("source: FILE must be a string");
8693 
8695 
8696  if (nargin == 2)
8697  context = args(1).xstring_value ("source: CONTEXT must be a string");
8698 
8699  source_file (file_name, context);
8700 
8701  return retval;
8702 }
8703 
8704 /*!
8705  Evaluate an Octave function (built-in or interpreted) and return
8706  the list of result values.
8707 
8708  @param name The name of the function to call.
8709  @param args The arguments to the function.
8710  @param nargout The number of output arguments expected.
8711  @return A list of output values. The length of the list is not
8712  necessarily the same as @c nargout.
8713 
8714 */
8716 feval (const std::string& name, const octave_value_list& args, int nargout)
8717 {
8719 
8720  octave_value fcn = symbol_table::find_function (name, args);
8721 
8722  if (fcn.is_defined ())
8723  retval = fcn.do_multi_index_op (nargout, args);
8724  else
8725  error ("feval: function '%s' not found", name.c_str ());
8726 
8727  return retval;
8728 }
8729 
8731 feval (octave_function *fcn, const octave_value_list& args, int nargout)
8732 {
8734 
8735  if (fcn)
8736  retval = fcn->do_multi_index_op (nargout, args);
8737 
8738  return retval;
8739 }
8740 
8741 static octave_value_list
8742 get_feval_args (const octave_value_list& args)
8743 {
8744  return args.slice (1, args.length () - 1, true);
8745 }
8746 
8747 /*!
8748  Evaluate an Octave function (built-in or interpreted) and return
8749  the list of result values.
8750 
8751  @param args The first element of @c args is the function to call.
8752  It may be the name of the function as a string, a function
8753  handle, or an inline function. The remaining arguments are
8754  passed to the function.
8755  @param nargout The number of output arguments expected.
8756  @return A list of output values. The length of the list is not
8757  necessarily the same as @c nargout.
8758 */
8760 feval (const octave_value_list& args, int nargout)
8761 {
8763 
8764  if (args.length () > 0)
8765  {
8766  octave_value f_arg = args(0);
8767 
8768  if (f_arg.is_string ())
8769  {
8770  std::string name = f_arg.string_value ();
8771 
8772  octave_value_list tmp_args = get_feval_args (args);
8773 
8774  retval = feval (name, tmp_args, nargout);
8775  }
8776  else if (f_arg.is_function_handle ()
8777  || f_arg.is_anonymous_function ()
8778  || f_arg.is_inline_function ())
8779  {
8780  const octave_value_list tmp_args = get_feval_args (args);
8781 
8782  retval = f_arg.do_multi_index_op (nargout, tmp_args);
8783  }
8784  else
8785  error ("feval: first argument must be a string, inline function, or a function handle");
8786  }
8787 
8788  return retval;
8789 }
8790 
8791 DEFUN (feval, args, nargout,
8792  doc: /* -*- texinfo -*-
8793 @deftypefn {} {} feval (@var{name}, @dots{})
8794 Evaluate the function named @var{name}.
8795 
8796 Any arguments after the first are passed as inputs to the named function.
8797 For example,
8798 
8799 @example
8800 @group
8801 feval ("acos", -1)
8802  @result{} 3.1416
8803 @end group
8804 @end example
8805 
8806 @noindent
8807 calls the function @code{acos} with the argument @samp{-1}.
8808 
8809 The function @code{feval} can also be used with function handles of any sort
8810 (@pxref{Function Handles}). Historically, @code{feval} was the only way to
8811 call user-supplied functions in strings, but function handles are now
8812 preferred due to the cleaner syntax they offer. For example,
8813 
8814 @example
8815 @group
8816 @var{f} = @@exp;
8817 feval (@var{f}, 1)
8818  @result{} 2.7183
8819 @var{f} (1)
8820  @result{} 2.7183
8821 @end group
8822 @end example
8823 
8824 @noindent
8825 are equivalent ways to call the function referred to by @var{f}. If it
8826 cannot be predicted beforehand whether @var{f} is a function handle,
8827 function name in a string, or inline function then @code{feval} can be used
8828 instead.
8829 @end deftypefn */)
8830 {
8831  if (args.length () == 0)
8832  print_usage ();
8833 
8834  return feval (args, nargout);
8835 }
8836 
8837 DEFUN (builtin, args, nargout,
8838  doc: /* -*- texinfo -*-
8839 @deftypefn {} {[@dots{}] =} builtin (@var{f}, @dots{})
8840 Call the base function @var{f} even if @var{f} is overloaded to another
8841 function for the given type signature.
8842 
8843 This is normally useful when doing object-oriented programming and there is
8844 a requirement to call one of Octave's base functions rather than the
8845 overloaded one of a new class.
8846 
8847 A trivial example which redefines the @code{sin} function to be the
8848 @code{cos} function shows how @code{builtin} works.
8849 
8850 @example
8851 @group
8852 sin (0)
8853  @result{} 0
8854 function y = sin (x), y = cos (x); endfunction
8855 sin (0)
8856  @result{} 1
8857 builtin ("sin", 0)
8858  @result{} 0
8859 @end group
8860 @end example
8861 @end deftypefn */)
8862 {
8864 
8865  if (args.length () == 0)
8866  print_usage ();
8867 
8868  const std::string name (args(0).xstring_value ("builtin: function name (F) must be a string"));
8869 
8871 
8872  if (fcn.is_defined ())
8873  retval = feval (fcn.function_value (), args.splice (0, 1), nargout);
8874  else
8875  error ("builtin: lookup for symbol '%s' failed", name.c_str ());
8876 
8877  return retval;
8878 }
8879 
8881 eval_string (const std::string& eval_str, bool silent,
8882  int& parse_status, int nargout)
8883 {
8885 
8886  octave::parser parser (eval_str);
8887 
8888  do
8889  {
8890  parser.reset ();
8891 
8892  parse_status = parser.run ();
8893 
8894  if (parse_status == 0)
8895  {
8896  if (parser.stmt_list)
8897  {
8898  tree_statement *stmt = 0;
8899 
8900  if (parser.stmt_list->length () == 1
8901  && (stmt = parser.stmt_list->front ())
8902  && stmt->is_expression ())
8903  {
8904  tree_expression *expr = stmt->expression ();
8905 
8906  if (silent)
8907  expr->set_print_flag (false);
8908 
8909  bool do_bind_ans = false;
8910 
8911  if (expr->is_identifier ())
8912  {
8913  tree_identifier *id
8914  = dynamic_cast<tree_identifier *> (expr);
8915 
8916  do_bind_ans = (! id->is_variable ());
8917  }
8918  else
8919  do_bind_ans = (! expr->is_assignment_expression ());
8920 
8921  retval = expr->rvalue (nargout);
8922 
8923  if (do_bind_ans && ! retval.empty ())
8924  bind_ans (retval(0), expr->print_result ());
8925 
8926  if (nargout == 0)
8927  retval = octave_value_list ();
8928  }
8929  else if (nargout == 0)
8931  else
8932  error ("eval: invalid use of statement list");
8933 
8937  break;
8938  }
8939  else if (parser.lexer.end_of_input)
8940  break;
8941  }
8942  }
8943  while (parse_status == 0);
8944 
8945  return retval;
8946 }
8947 
8949 eval_string (const std::string& eval_str, bool silent, int& parse_status)
8950 {
8952 
8953  octave_value_list tmp = eval_string (eval_str, silent, parse_status, 1);
8954 
8955  if (! tmp.empty ())
8956  retval = tmp(0);
8957 
8958  return retval;
8959 }
8960 
8961 static octave_value_list
8962 eval_string (const octave_value& arg, bool silent, int& parse_status,
8963  int nargout)
8964 {
8965  std::string s = arg.xstring_value ("eval: expecting std::string argument");
8966 
8967  return eval_string (s, silent, parse_status, nargout);
8968 }
8969 
8970 void
8972 {
8973  if (*lst)
8974  {
8975  delete *lst;
8976  *lst = 0;
8977  }
8978 }
8979 
8980 DEFUN (eval, args, nargout,
8981  doc: /* -*- texinfo -*-
8982 @deftypefn {} {} eval (@var{try})
8983 @deftypefnx {} {} eval (@var{try}, @var{catch})
8984 Parse the string @var{try} and evaluate it as if it were an Octave
8985 program.
8986 
8987 If execution fails, evaluate the optional string @var{catch}.
8988 
8989 The string @var{try} is evaluated in the current context, so any results
8990 remain available after @code{eval} returns.
8991 
8992 The following example creates the variable @var{A} with the approximate
8993 value of 3.1416 in the current workspace.
8994 
8995 @example
8996 eval ("A = acos(-1);");
8997 @end example
8998 
8999 If an error occurs during the evaluation of @var{try} then the @var{catch}
9000 string is evaluated, as the following example shows:
9001 
9002 @example
9003 @group
9004 eval ('error ("This is a bad example");',
9005  'printf ("This error occurred:\n%s\n", lasterr ());');
9006  @print{} This error occurred:
9007  This is a bad example
9008 @end group
9009 @end example
9010 
9011 Programming Note: if you are only using @code{eval} as an error-capturing
9012 mechanism, rather than for the execution of arbitrary code strings,
9013 Consider using try/catch blocks or unwind_protect/unwind_protect_cleanup
9014 blocks instead. These techniques have higher performance and don't
9015 introduce the security considerations that the evaluation of arbitrary code
9016 does.
9017 @seealso{evalin, evalc, assignin, feval}
9018 @end deftypefn */)
9019 {
9021 
9022  int nargin = args.length ();
9023 
9024  if (nargin == 0)
9025  print_usage ();
9026 
9028 
9029  if (nargin > 1)
9030  {
9033  }
9034 
9035  int parse_status = 0;
9036 
9037  bool execution_error = false;
9038 
9040 
9041  try
9042  {
9043  tmp = eval_string (args(0), nargout > 0, parse_status, nargout);
9044  }
9045  catch (const octave::execution_exception&)
9046  {
9048 
9049  execution_error = true;
9050  }
9051 
9052  if (nargin > 1 && (parse_status != 0 || execution_error))
9053  {
9054  // Set up for letting the user print any messages from
9055  // errors that occurred in the first part of this eval().
9056 
9058 
9059  tmp = eval_string (args(1), nargout > 0, parse_status, nargout);
9060 
9061  if (nargout > 0)
9062  retval = tmp;
9063  }
9064  else
9065  {
9066  if (nargout > 0)
9067  retval = tmp;
9068 
9069  // FIXME: we should really be rethrowing whatever exception occurred,
9070  // not just throwing an execution exception.
9071  if (execution_error)
9073  }
9074 
9075  return retval;
9076 }
9077 
9078 /*
9079 
9080 %!shared x
9081 %! x = 1;
9082 
9083 %!assert (eval ("x"), 1)
9084 %!assert (eval ("x;"))
9085 %!assert (eval ("x;"), 1)
9086 
9087 %!test
9088 %! y = eval ("x");
9089 %! assert (y, 1);
9090 
9091 %!test
9092 %! y = eval ("x;");
9093 %! assert (y, 1);
9094 
9095 %!test
9096 %! eval ("x = 1;");
9097 %! assert (x,1);
9098 
9099 %!test
9100 %! eval ("flipud = 2;");
9101 %! assert (flipud, 2);
9102 
9103 %!function y = __f ()
9104 %! eval ("flipud = 2;");
9105 %! y = flipud;
9106 %!endfunction
9107 %!assert (__f(), 2)
9108 
9109 % bug #35645
9110 %!test
9111 %! [a,] = gcd (1,2);
9112 %! [a,b,] = gcd (1, 2);
9113 
9114 %!error eval ("switch = 13;")
9115 
9116 */
9117 
9118 DEFUN (assignin, args, ,
9119  doc: /* -*- texinfo -*-
9120 @deftypefn {} {} assignin (@var{context}, @var{varname}, @var{value})
9121 Assign @var{value} to @var{varname} in context @var{context}, which
9122 may be either @qcode{"base"} or @qcode{"caller"}.
9123 @seealso{evalin}
9124 @end deftypefn */)
9125 {
9127 
9128  if (args.length () != 3)
9129  print_usage ();
9130 
9131  std::string context = args(0).xstring_value ("assignin: CONTEXT must be a string");
9132 
9134 
9135  if (context == "caller")
9137  else if (context == "base")
9139  else
9140  error ("assignin: CONTEXT must be \"caller\" or \"base\"");
9141 
9143 
9144  std::string nm = args(1).xstring_value ("assignin: VARNAME must be a string");
9145 
9146  if (valid_identifier (nm))
9147  {
9148  // Put the check here so that we don't slow down assignments
9149  // generally. Any that go through Octave's parser should have
9150  // already been checked.
9151 
9152  if (octave::is_keyword (nm))
9153  error ("assignin: invalid assignment to keyword '%s'", nm.c_str ());
9154 
9155  symbol_table::assign (nm, args(2));
9156  }
9157  else
9158  error ("assignin: invalid variable name in argument VARNAME");
9159 
9160  return retval;
9161 }
9162 
9163 /*
9164 
9165 %!error assignin ("base", "switch", "13")
9166 
9167 */
9168 
9169 DEFUN (evalin, args, nargout,
9170  doc: /* -*- texinfo -*-
9171 @deftypefn {} {} evalin (@var{context}, @var{try})
9172 @deftypefnx {} {} evalin (@var{context}, @var{try}, @var{catch})
9173 Like @code{eval}, except that the expressions are evaluated in the context
9174 @var{context}, which may be either @qcode{"caller"} or @qcode{"base"}.
9175 @seealso{eval, assignin}
9176 @end deftypefn */)
9177 {
9179 
9180  int nargin = args.length ();
9181 
9182  if (nargin < 2)
9183  print_usage ();
9184 
9185  std::string context = args(0).xstring_value ("evalin: CONTEXT must be a string");
9186 
9188 
9189  if (context == "caller")
9191  else if (context == "base")
9193  else
9194  error ("evalin: CONTEXT must be \"caller\" or \"base\"");
9195 
9197 
9198  if (nargin > 2)
9199  {
9202  }
9203 
9204  int parse_status = 0;
9205 
9206  bool execution_error = false;
9207 
9209 
9210  try
9211  {
9212  tmp = eval_string (args(1), nargout > 0,
9213  parse_status, nargout);
9214  }
9215  catch (const octave::execution_exception&)
9216  {
9218 
9219  execution_error = true;
9220  }
9221 
9222  if (nargin > 2 && (parse_status != 0 || execution_error))
9223  {
9224  // Set up for letting the user print any messages from
9225  // errors that occurred in the first part of this eval().
9226 
9228 
9229  tmp = eval_string (args(2), nargout > 0,
9230  parse_status, nargout);
9231 
9232  retval = (nargout > 0) ? tmp : octave_value_list ();
9233  }
9234  else
9235  {
9236  if (nargout > 0)
9237  retval = tmp;
9238 
9239  // FIXME: we should really be rethrowing whatever
9240  // exception occurred, not just throwing an
9241  // execution exception.
9242  if (execution_error)
9244  }
9245 
9246  return retval;
9247 }
9248 
9249 static void
9250 maybe_print_last_error_message (bool *doit)
9251 {
9252  if (doit && *doit)
9253  // Print error message again, which was lost because of the stderr buffer
9254  // Note: this keeps error_state and last_error_stack intact
9255  message_with_id ("error", last_error_id ().c_str (),
9256  last_error_message ().c_str ());
9257 }
9258 
9259 static void
9260 restore_octave_stdout (std::streambuf *buf)
9261 {
9262  octave_stdout.flush ();
9263  octave_stdout.rdbuf (buf);
9264 }
9265 
9266 static void
9267 restore_octave_stderr (std::streambuf *buf)
9268 {
9269  std::cerr.flush ();
9270  std::cerr.rdbuf (buf);
9271 }
9272 
9273 DEFUN (evalc, args, nargout,
9274  doc: /* -*- texinfo -*-
9275 @deftypefn {} {@var{s} =} evalc (@var{try})
9276 @deftypefnx {} {@var{s} =} evalc (@var{try}, @var{catch})
9277 Parse and evaluate the string @var{try} as if it were an Octave program,
9278 while capturing the output into the return variable @var{s}.
9279 
9280 If execution fails, evaluate the optional string @var{catch}.
9281 
9282 This function behaves like @code{eval}, but any output or warning messages
9283 which would normally be written to the console are captured and returned in
9284 the string @var{s}.
9285 
9286 The @code{diary} is disabled during the execution of this function. When
9287 @code{system} is used, any output produced by external programs is
9288 @emph{not} captured, unless their output is captured by the @code{system}
9289 function itself.
9290 
9291 @example
9292 @group
9293 s = evalc ("t = 42"), t
9294  @result{} s = t = 42
9295 
9296  @result{} t = 42
9297 @end group
9298 @end example
9299 @seealso{eval, diary}
9300 @end deftypefn */)
9301 {
9302  int nargin = args.length ();
9303 
9304  if (nargin == 0 || nargin > 2)
9305  print_usage ();
9306 
9307  // redirect stdout/stderr to capturing buffer
9308  std::ostringstream buffer;
9309 
9310  std::ostream& out_stream = octave_stdout;
9311  std::ostream& err_stream = std::cerr;
9312 
9313  out_stream.flush ();
9314  err_stream.flush ();
9315 
9316  std::streambuf* old_out_buf = out_stream.rdbuf (buffer.rdbuf ());
9317  std::streambuf* old_err_buf = err_stream.rdbuf (buffer.rdbuf ());
9318 
9319  bool eval_error_occurred = true;
9320 
9322 
9323  frame.add_fcn (maybe_print_last_error_message, &eval_error_occurred);
9324  frame.add_fcn (restore_octave_stdout, old_out_buf);
9325  frame.add_fcn (restore_octave_stderr, old_err_buf);
9326 
9327  // call standard eval function
9329  int eval_nargout = std::max (0, nargout - 1);
9330 
9331  retval = Feval (args, eval_nargout);
9332  eval_error_occurred = false;
9333 
9334  retval.prepend (buffer.str ());
9335  return retval;
9336 }
9337 
9338 /*
9339 
9340 %!assert (evalc ("1"), "ans = 1\n")
9341 %!assert (evalc ("1;"), "")
9342 
9343 %!test
9344 %! [s, y] = evalc ("1");
9345 %! assert (s, "");
9346 %! assert (y, 1);
9347 
9348 %!test
9349 %! [s, y] = evalc ("1;");
9350 %! assert (s, "");
9351 %! assert (y, 1);
9352 
9353 %!test
9354 %! assert (evalc ("y = 2"), "y = 2\n");
9355 %! assert (y, 2);
9356 
9357 %!test
9358 %! assert (evalc ("y = 3;"), "");
9359 %! assert (y, 3);
9360 
9361 %!test
9362 %! [s, a, b] = evalc ("deal (1, 2)");
9363 %! assert (s, "");
9364 %! assert (a, 1);
9365 %! assert (b, 2);
9366 
9367 %!function [a, b] = __f_evalc ()
9368 %! printf ("foo");
9369 %! fprintf (stdout, "bar");
9370 %! disp (pi);
9371 %! a = 1;
9372 %! b = 2;
9373 %!endfunction
9374 %!test
9375 %! [s, a, b] = evalc ("__f_evalc ()");
9376 %! assert (s, "foobar 3.1416\n");
9377 %! assert (a, 1);
9378 %! assert (b, 2);
9379 
9380 %!error <foo> (evalc ("error ('foo')"))
9381 %!error <bar> (evalc ("error ('foo')", "error ('bar')"))
9382 
9383 %!test
9384 %! warning ("off", "quiet", "local");
9385 %! assert (evalc ("warning ('foo')"), "warning: foo\n");
9386 
9387 %!test
9388 %! warning ("off", "quiet", "local");
9389 %! assert (evalc ("error ('foo')", "warning ('bar')"), "warning: bar\n");
9390 
9391 %!error evalc ("switch = 13;")
9392 
9393 */
9394 
9395 DEFUN (__parser_debug_flag__, args, nargout,
9396  doc: /* -*- texinfo -*-
9397 @deftypefn {} {@var{val} =} __parser_debug_flag__ ()
9398 @deftypefnx {} {@var{old_val} =} __parser_debug_flag__ (@var{new_val})
9399 Query or set the internal flag that determines whether Octave's parser
9400 prints debug information as it processes an expression.
9401 @seealso{__lexer_debug_flag__}
9402 @end deftypefn */)
9403 {
9405 
9406  bool debug_flag = octave_debug;
9407 
9408  retval = set_internal_variable (debug_flag, args, nargout,
9409  "__parser_debug_flag__");
9410 
9411  octave_debug = debug_flag;
9412 
9413  return retval;
9414 }
9415 
9416 DEFUN (__parse_file__, args, ,
9417  doc: /* -*- texinfo -*-
9418 @deftypefn {} {} __parse_file__ (@var{file}, @var{verbose})
9419 Undocumented internal function.
9420 @end deftypefn */)
9421 {
9423 
9424  int nargin = args.length ();
9425 
9426  if (nargin < 1 || nargin > 2)
9427  print_usage ();
9428 
9429  std::string file = args(0).xstring_value ("__parse_file__: expecting filename as argument");
9430 
9431  std::string full_file = octave::sys::env::make_absolute (file);
9432 
9433  size_t file_len = file.length ();
9434 
9435  if ((file_len > 4 && file.substr (file_len-4) == ".oct")
9436  || (file_len > 4 && file.substr (file_len-4) == ".mex")
9437  || (file_len > 2 && file.substr (file_len-2) == ".m"))
9438  {
9439  file = octave::sys::env::base_pathname (file);
9440  file = file.substr (0, file.find_last_of ('.'));
9441 
9442  size_t pos = file.find_last_of (octave::sys::file_ops::dir_sep_str ());
9443  if (pos != std::string::npos)
9444  file = file.substr (pos+1);
9445  }
9446 
9447  if (nargin == 2)
9448  octave_stdout << "parsing " << full_file << std::endl;
9449 
9450  octave_function *fcn = parse_fcn_file (full_file, file, "", "",
9451  true, false, false,
9452  false, "__parse_file__");
9453 
9454  if (fcn)
9455  delete fcn;
9456 
9457  return retval;
9458 }
uint32_t id
Definition: graphics.cc:11587
#define MUL_EQ
Definition: oct-parse.cc:290
void stash_trailing_comment(octave_comment_list *tc)
Definition: ov-usr-fcn.h:231
#define NAME
Definition: oct-parse.cc:326
#define YYINITDEPTH
Definition: oct-parse.cc:1598
#define BREAK
Definition: oct-parse.cc:341
void accept(tree_walker &tw)
#define FCN_HANDLE
Definition: oct-parse.cc:350
#define ENUMERATION
Definition: oct-parse.cc:355
static std::string dir_sep_str(void)
Definition: file-ops.h:80
void warning_with_id(const char *id, const char *fmt,...)
Definition: error.cc:803
static const yytype_int16 yytable[]
Definition: oct-parse.cc:995
#define TRY
Definition: oct-parse.cc:346
int beginning_line(void) const
Definition: ov-usr-fcn.h:211
function name in a string
Definition: oct-parse.cc:8829
string_vector reverse_lookup_autoload(const std::string &nm)
Definition: oct-parse.cc:8247
tree_decl_init_list * tree_decl_init_list_type
Definition: oct-parse.h:255
#define EXPR_EQ
Definition: oct-parse.cc:307
tree_expression * remove_front(void)
Definition: pt-arg-list.h:66
#define YYSIZE_T
Definition: oct-parse.cc:494
bool has_magic_tilde(void) const
Definition: pt-arg-list.h:63
tree_classdef_enum_block * tree_classdef_enum_block_type
Definition: oct-parse.h:277
static const octave_value instance
Definition: ov-null-mat.h:70
static void install_subfunction(const std::string &name, const octave_value &fcn, scope_id scope)
Definition: symtab.h:1590
#define yyssa
Definition: oct-parse.cc:3009
For example cd octave end example noindent changes the current working directory to an error message is printed and the working directory is not changed sc
Definition: dirfns.cc:120
#define YYFINAL
Definition: oct-parse.cc:673
Octave interface to the compression and uncompression libraries.
Definition: aepbalance.cc:47
Definition: Cell.h:37
OCTAVE_EXPORT octave_value_list column
Definition: sparse.cc:123
For example cd octave end example noindent changes the current working directory to file
Definition: dirfns.cc:120
tree_expression * tree_expression_type
Definition: oct-parse.h:236
#define EXPR_NE
Definition: oct-parse.cc:308
void prep_for_file(void)
Definition: lex.cc:4888
#define UNTIL
Definition: oct-parse.cc:334
assign_op
Definition: ov.h:131
void stash_fcn_file_time(const octave::sys::time &t)
Definition: ov-usr-fcn.h:116
std::string text_rep(void)
Definition: token.cc:192
std::string canonicalize_file_name(const std::string &name)
Definition: file-ops.cc:719
tree_switch_case_list * tree_switch_case_list_type
Definition: oct-parse.h:253
octave_function * load_fcn_from_file(const std::string &file_name, const std::string &dir_name, const std::string &dispatch_type, const std::string &package_name, const std::string &fcn_name, bool autoload)
Definition: oct-parse.cc:8260
tree_classdef * make_classdef(token *tok_val, tree_classdef_attribute_list *a, tree_identifier *id, tree_classdef_superclass_list *sc, tree_classdef_body *body, token *end_tok, octave_comment_list *lc)
Definition: oct-parse.cc:7287
int paren_count(void) const
Definition: pt-exp.h:90
fname
Definition: load-save.cc:754
#define SWITCH
Definition: oct-parse.cc:338
tree_classdef_properties_block * make_classdef_properties_block(token *tok_val, tree_classdef_attribute_list *a, tree_classdef_property_list *plist, token *end_tok, octave_comment_list *lc)
Definition: oct-parse.cc:7345
void document(const std::string &ds)
Definition: ov-fcn.h:173
virtual octave_value_list do_multi_index_op(int nargout, const octave_value_list &idx)
Definition: ov-base.cc:259
tree_expression * finish_colon_expression(tree_colon_expression *e)
Definition: oct-parse.cc:6137
tree_classdef_superclass * tree_classdef_superclass_type
Definition: oct-parse.h:264
tree_if_command_list * tree_if_command_list_type
Definition: oct-parse.h:250
The value of lines which begin with a space character are not saved in the history list A value of all commands are saved on the history list
Definition: oct-hist.cc:728
octave_value_list slice(octave_idx_type offset, octave_idx_type len, bool tags=false) const
Definition: ovl.h:114
tree_command * tree_command_type
Definition: oct-parse.h:247
void mark_as_simple_assign_lhs(void)
Definition: pt-arg-list.h:76
virtual void stash_subfunction_names(const std::list< std::string > &)
Definition: ov-fcn.h:152
void assign(const std::string &k, const Cell &val)
Definition: oct-map.h:347
tree_classdef_methods_list * tree_classdef_methods_list_type
Definition: oct-parse.h:270
virtual bool is_constant(void) const
Definition: pt-exp.h:55
#define LEXICAL_ERROR
Definition: oct-parse.cc:362
tree_command * make_try_command(token *try_tok, tree_statement_list *body, char catch_sep, tree_statement_list *cleanup, token *end_tok, octave_comment_list *lc, octave_comment_list *mc)
Definition: oct-parse.cc:6538
static const yytype_int16 yypact[]
Definition: oct-parse.cc:845
bool validate(in_or_out type)
Definition: pt-misc.cc:62
tree_funcall * make_superclass_ref(const std::string &method_nm, const std::string &class_nm)
Definition: oct-parse.cc:7253
octave_value rvalue1(int nargout=1)
Definition: pt-colon.cc:76
#define EPOW
Definition: oct-parse.cc:322
int column(void) const
Definition: token.h:89
#define END
Definition: oct-parse.cc:327
unsigned short int yytype_uint16
Definition: oct-parse.cc:478
std::string curr_package_name
Definition: parse.h:437
void preserve_base(void)
Definition: pt-colon.h:75
void octave_pstate_delete(octave_pstate *ps)
Definition: oct-parse.cc:2995
#define OR_EQ
Definition: oct-parse.cc:299
short int yytype_int16
#define YY_INITIAL_VALUE(Value)
Definition: oct-parse.cc:557
tree_expression * finish_cell(tree_cell *c)
Definition: oct-parse.cc:7818
tree_classdef_property * tree_classdef_property_type
Definition: oct-parse.h:267
OCTINTERP_API void print_usage(void)
Definition: defun.cc:52
bool is_function(void) const
Definition: ov.h:711
tree_decl_command * tree_decl_command_type
Definition: oct-parse.h:256
static std::string dir_sep_chars(void)
Definition: file-ops.h:85
#define YYTERROR
Definition: oct-parse.cc:1460
#define YYSTACK_RELOCATE(Stack_alloc, Stack)
Definition: oct-parse.cc:639
F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_REAL const F77_REAL F77_REAL &F77_RET_T const F77_DBLE const F77_DBLE F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T F77_DBLE &F77_RET_T F77_REAL &F77_RET_T F77_REAL &F77_RET_T F77_DBLE &F77_RET_T const F77_DBLE F77_DBLE &F77_RET_T const F77_REAL F77_REAL &F77_RET_T F77_REAL F77_REAL &F77_RET_T F77_DBLE F77_DBLE &F77_RET_T const F77_DBLE const F77_DBLE * f
#define YYSTACK_ALLOC_MAXIMUM
Definition: oct-parse.cc:586
fclose(in)
static int continuing
Definition: pt-jump.h:78
static void set_input_stream(FILE *f)
Definition: cmd-edit.cc:1188
tree_colon_expression * tree_colon_expression_type
Definition: oct-parse.h:244
octave_idx_type length(void) const
Definition: ovl.h:96
#define SQ_STRING
Definition: oct-parse.cc:329
#define EXPR_LE
Definition: oct-parse.cc:306
void accept(tree_walker &tw)
Definition: pt-stmt.cc:324
OCTINTERP_API std::string undo_string_escapes(const std::string &s)
#define ADD_EQ
Definition: oct-parse.cc:288
OCTINTERP_API std::string fcn_file_in_path(const std::string &)
tree_fcn_handle * make_fcn_handle(token *tok_val)
Definition: oct-parse.cc:6263
base_lexer & lexer
Definition: parse.h:459
octave::sys::time now
Definition: data.cc:6299
bool is_defined(void) const
Definition: ov.h:536
int octave_pull_parse(octave_pstate *ps, octave::base_parser &parser)
Definition: oct-parse.cc:2955
#define yyvsa
Definition: oct-parse.cc:3012
static const yytype_uint8 yyr2[]
Definition: oct-parse.cc:1397
tree * tree_type
Definition: oct-parse.h:233
tree_argument_list * tree_argument_list_type
Definition: oct-parse.h:245
#define EMINUS
Definition: oct-parse.cc:316
tree_command * make_do_until_command(token *until_tok, tree_statement_list *body, tree_expression *expr, octave_comment_list *lc)
Definition: oct-parse.cc:6629
int octave_parse(octave::base_parser &parser)
Definition: oct-parse.cc:2949
std::string doc_string(void) const
Definition: ov-fcn.h:175
tree_index_expression * make_indirect_ref(tree_expression *expr, const std::string &)
Definition: oct-parse.cc:7581
static std::string find_file(const std::string &file)
Definition: load-path.h:200
std::string fcn_file_full_name
Definition: lex.h:433
static const yytype_uint16 yydefact[]
Definition: oct-parse.cc:904
bool empty(void) const
Definition: base-list.h:47
void mark_relative(void)
Definition: ov-fcn.h:159
binary_op
Definition: ov.h:89
std::string text(void) const
Definition: token.cc:137
#define yynerrs
Definition: oct-parse.cc:73
#define INPUT_FILE
Definition: oct-parse.cc:364
void protect_var(T &var)
virtual bool is_user_code(void) const
Definition: ov-base.h:463
tree_expression * set_print_flag(bool print)
Definition: pt-exp.h:125
symbol_table::scope_id curr_scope(void) const
Definition: lex.h:81
#define DEFUN(name, args_name, nargout_name, doc)
Definition: defun.h:46
void error(const char *fmt,...)
Definition: error.cc:570
symbol_table::scope_id scope(void)
Definition: ov-usr-fcn.h:249
string_vector autoloaded_functions(void)
Definition: oct-parse.cc:8234
std::string name(void) const
Definition: ov-fcn.h:163
void stash_fcn_end_location(int line, int col)
Definition: ov-usr-fcn.h:214
elt_type & back(void)
Definition: base-list.h:98
#define DO
Definition: oct-parse.cc:333
comment_buffer comment_buf
Definition: lex.h:643
#define DQ_STRING
Definition: oct-parse.cc:328
static octave_value find_built_in_function(const std::string &name)
Definition: symtab.h:1528
tree_classdef_enum_block * make_classdef_enum_block(token *tok_val, tree_classdef_attribute_list *a, tree_classdef_enum_list *elist, token *end_tok, octave_comment_list *lc)
Definition: oct-parse.cc:7441
static void ignore_entries(bool=true)
Definition: cmd-hist.cc:593
static scope_id alloc_scope(void)
Definition: symtab.h:1167
#define UNWIND
Definition: oct-parse.cc:344
int line(void) const
Definition: token.h:88
octave::base_lexer * LEXER
Definition: oct-parse.cc:139
double number(void) const
Definition: token.cc:151
tree_index_expression * tree_index_expression_type
Definition: oct-parse.h:243
#define EMUL
Definition: oct-parse.cc:312
tree_classdef_superclass_list * tree_classdef_superclass_list_type
Definition: oct-parse.h:265
tree_command * make_unwind_command(token *unwind_tok, tree_statement_list *body, tree_statement_list *cleanup, token *end_tok, octave_comment_list *lc, octave_comment_list *mc)
Definition: oct-parse.cc:6505
#define PARFOR
Definition: oct-parse.cc:331
tree_expression * finish_matrix(tree_matrix *m)
Definition: oct-parse.cc:7808
void message_with_id(const char *name, const char *id, const char *fmt,...)
Definition: error.cc:446
static void clear_dld_function(const std::string &name)
Definition: symtab.h:1803
tree_classdef_methods_block * tree_classdef_methods_block_type
Definition: oct-parse.h:271
yytype_int16 * yyssp
Definition: oct-parse.cc:2935
std::string get_help_from_file(const std::string &nm, bool &symbol_found, std::string &full_file)
Definition: oct-parse.cc:8169
#define YY_REDUCE_PRINT(Rule)
Definition: oct-parse.cc:1592
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function t
Definition: ov-usr-fcn.cc:935
tree_matrix * tree_matrix_type
Definition: oct-parse.h:234
void maybe_warn_missing_semi(tree_statement_list *)
Definition: oct-parse.cc:7826
static void stash_dir_name_for_subfunctions(scope_id scope, const std::string &dir_name)
Definition: symtab.cc:1438
bool is_newer(const octave::sys::time &time) const
Definition: file-stat.h:149
void stash_leading_comment(octave_comment_list *lc)
Definition: ov-usr-fcn.h:229
std::string xstring_value(const char *fmt,...) const
Definition: ov.cc:2122
OCTAVE_EXPORT octave_value_list return the value of the option it must match the dimension of the state and the relative tolerance must also be a vector of the same length tem it must match the dimension of the state and the absolute tolerance must also be a vector of the same length The local error test applied at each integration step is xample roup calculate Y_a and Y _d item Given calculate Y nd enumerate In either initial values for the given components are input
Definition: DASPK-opts.cc:739
s
Definition: file-io.cc:2682
bool fcn_file_from_relative_lookup
Definition: parse.h:410
bool reading_script_file
Definition: lex.h:377
tree_expression * make_prefix_op(int op, tree_expression *op1, token *tok_val)
Definition: oct-parse.cc:6429
int octave_push_parse(octave_pstate *ps, int pushed_char, OCTAVE_STYPE const *pushed_val, octave::base_parser &parser)
Definition: oct-parse.cc:3023
bool looking_at_parameter_list
Definition: lex.h:328
void stash_dir_name(const std::string &dir)
Definition: ov-fcn.h:127
i e
Definition: data.cc:2724
static void goto_caller_frame(void)
Definition: call-stack.h:264
static std::string tilde_expand(const std::string &)
Definition: file-ops.cc:301
#define END_OF_INPUT
Definition: oct-parse.cc:363
static octave_value find_function(const std::string &name, const octave_value_list &args=octave_value_list(), bool local_funcs=true)
Definition: symtab.cc:1276
void end_token_error(token *tok, token::end_tok_type expected)
Definition: oct-parse.cc:6076
size_t yystacksize
Definition: oct-parse.cc:2942
#define FCN
Definition: oct-parse.cc:361
short int yytype_int16
Definition: oct-parse.cc:484
bool is_function_handle(void) const
Definition: ov.h:702
void stash_fcn_location(int line, int col)
Definition: ov-usr-fcn.h:205
#define YYUSE(E)
Definition: oct-parse.cc:543
octave_value arg
Definition: pr-output.cc:3440
int dummy_type
Definition: oct-parse.h:223
octave_function * fcn
Definition: ov-class.cc:1743
#define YYMAXDEPTH
Definition: oct-parse.cc:1609
static void cache_name(scope_id scope, const std::string &name)
Definition: symtab.h:2231
bool looking_at_return_list
Definition: lex.h:325
string_vector argv
Definition: load-save.cc:635
virtual symbol_table::scope_id scope(void)
Definition: ov-fcn.h:77
static const yytype_int16 yydefgoto[]
Definition: oct-parse.cc:977
tree_statement_list * tree_statement_list_type
Definition: oct-parse.h:258
#define yyssp
Definition: oct-parse.cc:3011
tree_expression * increment(void)
Definition: pt-colon.h:91
This class gets nodes and searchs inside of 'info files'.
Definition: parser.h:52
calling an anonymous function involves an overhead quite comparable to the overhead of an m file function Passing a handle to a built in function is because the interpreter is not involved in the internal loop For a
Definition: cellfun.cc:398
OCTAVE_EXPORT octave_value_list search each directory of the loadpath for element of the cell array and return the first that matches If the second optional argument return a cell array containing the list of all files that have the same name in the path If no files are found
Definition: utils.cc:302
static const yytype_uint8 yyr1[]
Definition: oct-parse.cc:1364
void accept(tree_walker &tw)
Definition: pt-colon.cc:169
void maybe_warn_assign_as_truth_value(tree_expression *expr)
Definition: oct-parse.cc:6099
#define YYABORT
Definition: oct-parse.cc:1436
bool is_postfix_indexed(void) const
Definition: pt-exp.h:92
tree_expression * make_boolean_op(int op, tree_expression *op1, token *tok_val, tree_expression *op2)
Definition: oct-parse.cc:6400
JNIEnv void * args
Definition: ov-java.cc:67
#define SUB_EQ
Definition: oct-parse.cc:289
int run(const std::string &input, bool eof)
Definition: oct-parse.cc:8000
tree_evaluator * current_evaluator
#define yypush_parse
Definition: oct-parse.cc:65
octave_value_list do_multi_index_op(int nargout, const octave_value_list &idx)
Definition: ov.cc:1527
static int breaking
Definition: pt-jump.h:50
static std::string make_absolute(const std::string &s, const std::string &dot_path=get_current_directory())
Definition: oct-env.cc:129
int octave_lex(OCTAVE_STYPE *, void *)
The main scanner function which does all the work.
Definition: lex.cc:1274
bool verbose
Definition: load-save.cc:654
octave_user_function * start_classdef_external_method(tree_identifier *id, tree_parameter_list *pl)
Definition: oct-parse.cc:7473
#define yylex
Definition: oct-parse.cc:70
tree_if_command * tree_if_command_type
Definition: oct-parse.h:248
tree_switch_case * make_switch_case(token *case_tok, tree_expression *expr, tree_statement_list *list, octave_comment_list *lc)
Definition: oct-parse.cc:6857
static const yytype_int16 yycheck[]
Definition: oct-parse.cc:1150
static const octave_value instance
Definition: ov-null-mat.h:91
void * malloc(size_t)
unsigned short int yytype_uint16
tree_cell * tree_cell_type
Definition: oct-parse.h:235
int buffer_error_messages
Definition: error.cc:111
bool print_result(void) const
Definition: pt-exp.h:99
static octave_user_code * caller_user_code(size_t nskip=0)
Definition: call-stack.h:172
OCTAVE_EXPORT octave_value_list any number nd example oindent prints the prompt xample Pick a any number!nd example oindent and waits for the user to enter a value The string entered by the user is evaluated as an so it may be a literal a variable name
Definition: input.cc:871
iterator end(void)
Definition: base-list.h:86
OCTAVE_EXPORT octave_value_list isdir nd deftypefn *std::string nm
Definition: utils.cc:941
#define yytable_value_is_error(Yytable_value)
Definition: oct-parse.cc:840
#define yypstate_new
Definition: oct-parse.cc:67
tree_classdef_properties_block * tree_classdef_properties_block_type
Definition: oct-parse.h:269
OCTAVE_EXPORT octave_value_list return the number of command line arguments passed to Octave If called with the optional argument the function xample nargout(@histc)
Definition: ov-usr-fcn.cc:935
void octave_throw_execution_exception(void)
Definition: quit.cc:69
#define scanner
Definition: oct-parse.cc:153
void add_fcn(void(*fcn)(void))
tree_command * make_while_command(token *while_tok, tree_expression *expr, tree_statement_list *body, token *end_tok, octave_comment_list *lc)
Definition: oct-parse.cc:6594
#define YYDPRINTF(Args)
Definition: oct-parse.cc:1589
tree_function_def * finish_classdef_external_method(octave_user_function *fcn, tree_parameter_list *ret_list, octave_comment_list *cl)
Definition: oct-parse.cc:7522
static const octave_value instance
Definition: ov-null-mat.h:49
#define lexer
Definition: oct-parse.cc:152
bool valid_identifier(const char *s)
Definition: utils.cc:74
#define EXPR_OR
Definition: oct-parse.cc:303
bool all_elements_are_constant(void) const
yytype_int16 yyss_alloc
Definition: oct-parse.cc:619
#define EDIV
Definition: oct-parse.cc:313
std::list< std::string > subfunction_names
Definition: parse.h:450
static llvm::LLVMContext & context
Definition: jit-typeinfo.cc:76
#define PERSISTENT
Definition: oct-parse.cc:349
std::string string_value(bool force=false) const
Definition: ov.h:908
OCTAVE_STYPE * yyvs
Definition: oct-parse.cc:2939
#define EXPR_AND
Definition: oct-parse.cc:302
void stash_function_name(const std::string &s)
Definition: ov-usr-fcn.h:294
void mark_as_system_fcn_file(void)
Definition: ov-usr-fcn.cc:330
void error_with_id(const char *id, const char *fmt,...)
Definition: error.cc:615
nd deftypefn *octave_map m
Definition: ov-struct.cc:2058
#define yypstate
Definition: oct-parse.cc:69
bool parsing_class_method
Definition: lex.h:350
bool validate_array_list(tree_expression *e)
Definition: oct-parse.cc:7677
#define YYEMPTY
Definition: oct-parse.cc:1432
#define LEFTDIV
Definition: oct-parse.cc:311
tree_funcall * make_meta_class_query(const std::string &class_nm)
Definition: oct-parse.cc:7268
#define yyvs
Definition: oct-parse.cc:3013
int nargin
Definition: graphics.cc:10115
tree_funcall * tree_funcall_type
Definition: oct-parse.h:239
bool is_string(void) const
Definition: ov.h:578
std::string str
Definition: hash.cc:118
unsigned char yytype_uint8
#define METHODS
Definition: oct-parse.cc:353
static octave_function * load_oct(const std::string &fcn_name, const std::string &file_name="", bool relative=false)
Definition: dynamic-ld.cc:398
virtual bool is_index_expression(void) const
Definition: pt-exp.h:63
tree_classdef_property_list * tree_classdef_property_list_type
Definition: oct-parse.h:268
OCTINTERP_API std::string last_error_id(void)
end_tok_type
Definition: token.h:48
static char dir_sep_char(void)
Definition: file-ops.h:75
#define IF
Definition: oct-parse.cc:335
bool is_inline_function(void) const
Definition: ov.h:708
#define yypull_parse
Definition: oct-parse.cc:66
string_vector & append(const std::string &s)
Definition: str-vec.cc:107
OCTINTERP_API octave_value set_internal_variable(bool &var, const octave_value_list &args, int nargout, const char *nm)
static bool absolute_pathname(const std::string &s)
Definition: oct-env.cc:108
void stash_parent_fcn_scope(symbol_table::scope_id ps)
Definition: ov-usr-fcn.h:227
#define YYSTYPE
Definition: oct-parse.cc:62
tree_anon_fcn_handle * tree_anon_fcn_handle_type
Definition: oct-parse.h:241
void mark_as_class_method(void)
Definition: ov-usr-fcn.h:346
#define IMAG_NUM
Definition: oct-parse.cc:324
void stash_original_text(const std::string &s)
Definition: pt-const.h:85
tree_expression * limit(void)
Definition: pt-colon.h:89
double tmp
Definition: data.cc:6300
tree_classdef_attribute_list * tree_classdef_attribute_list_type
Definition: oct-parse.h:263
char punct_type
Definition: oct-parse.h:232
is false
Definition: cellfun.cc:398
void mark_as_formal_parameters(void)
Definition: pt-misc.cc:52
#define AND_EQ
Definition: oct-parse.cc:298
octave_value retval
Definition: data.cc:6294
bool append
Definition: load-save.cc:1582
#define CLEANUP
Definition: oct-parse.cc:345
tree_anon_fcn_handle * make_anon_fcn_handle(tree_parameter_list *param_list, tree_statement *stmt)
Definition: oct-parse.cc:6276
octave_value_list splice(octave_idx_type offset, octave_idx_type len, const octave_value_list &lst=octave_value_list()) const
Definition: ovl.cc:126
#define YYSTACK_FREE
Definition: oct-parse.cc:584
#define panic_impossible()
Definition: error.h:40
OCTAVE_STYPE yyvs_alloc
Definition: oct-parse.cc:620
bool looking_at_indirect_ref
Definition: lex.h:347
tree_switch_command * tree_switch_command_type
Definition: oct-parse.h:251
tree_constant * tree_constant_type
Definition: oct-parse.h:237
#define TRANSPOSE
Definition: oct-parse.cc:318
#define YYNTOKENS
Definition: oct-parse.cc:678
tree_index_expression * make_index_expression(tree_expression *expr, tree_argument_list *args, char type)
Definition: oct-parse.cc:7541
tree_classdef_body * tree_classdef_body_type
Definition: oct-parse.h:266
static void yydestruct(const char *yymsg, int yytype, OCTAVE_STYPE *yyvaluep, octave::base_parser &parser)
Definition: oct-parse.cc:1840
#define YY_NULLPTR
Definition: oct-parse.cc:170
#define yystacksize
Definition: oct-parse.cc:3015
#define ELEFTDIV
Definition: oct-parse.cc:314
static void assign(const std::string &name, const octave_value &value=octave_value(), scope_id scope=xcurrent_scope, context_id context=xdefault_context, bool force_add=false)
Definition: symtab.h:1330
tree_if_command * finish_if_command(token *if_tok, tree_if_command_list *list, token *end_tok, octave_comment_list *lc)
Definition: oct-parse.cc:6759
#define POW_EQ
Definition: oct-parse.cc:293
#define NUM
Definition: oct-parse.cc:323
void maybe_warn_variable_switch_label(tree_expression *expr)
Definition: oct-parse.cc:6119
#define YYPOPSTACK(N)
#define ELSEIF
Definition: oct-parse.cc:336
OCTINTERP_API void bind_ans(const octave_value &val, bool print)
idx type
Definition: ov.cc:3129
#define YYACCEPT
Definition: oct-parse.cc:1435
virtual bool is_user_function(void) const
Definition: ov-base.h:461
void make_script(tree_statement_list *cmds, tree_statement *end_script)
Definition: oct-parse.cc:7005
bool exists(void) const
Definition: file-stat.h:144
void stash_fcn_file_time(const octave::sys::time &t)
Definition: ov-usr-fcn.h:235
#define DIV_EQ
Definition: oct-parse.cc:291
tree_classdef_enum * tree_classdef_enum_type
Definition: oct-parse.h:275
static std::string base_pathname(const std::string &s)
Definition: oct-env.cc:122
std::string help_text
Definition: lex.h:420
static FILE * get_input_stream(void)
Definition: cmd-edit.cc:1195
static void goto_base_frame(void)
Definition: call-stack.h:270
bool is_keyword(const std::string &s)
Definition: lex.cc:4529
#define STRUCT_ELT
Definition: oct-parse.cc:325
the sparsity preserving column transformation such that that defines the pivoting threshold can be given in which case it defines the c
Definition: lu.cc:138
bool is_valid_lvalue_list(void) const
Definition: pt-arg-list.cc:103
tree_parameter_list * tree_parameter_list_type
Definition: oct-parse.h:246
unsigned char yytype_uint8
Definition: oct-parse.cc:466
#define EXPR_GE
Definition: oct-parse.cc:309
#define CLASSDEF
Definition: oct-parse.cc:351
std::string fcn_file_name(void) const
Definition: ov-usr-fcn.h:241
tree_function_def * tree_function_def_type
Definition: oct-parse.h:240
octave_tokentype
Definition: oct-parse.h:54
#define yyss
Definition: oct-parse.cc:3010
virtual void maybe_relocate_end(void)
Definition: ov-fcn.h:147
octave_pstate * octave_pstate_new(void)
Definition: oct-parse.cc:2984
virtual int line(void) const
Definition: pt.h:49
void parse_error(const char *fmt,...)
Definition: error.cc:818
#define YY_SYMBOL_PRINT(Title, Type, Value, Location)
Definition: oct-parse.cc:1590
tree_command * make_continue_command(token *continue_tok)
Definition: oct-parse.cc:6724
octave::base_list< tree_argument_list * >::iterator iterator
Definition: pt-array-list.h:41
void mark_as_variables(const std::list< std::string > &lst)
Definition: lex.cc:4764
feval(ar{f}, 1) esult
Definition: oct-parse.cc:8829
#define POW
Definition: oct-parse.cc:321
void bison_error(const std::string &s, int l=-1, int c=-1)
Definition: oct-parse.cc:7906
tree_classdef * classdef_object
Definition: parse.h:453
#define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Definition: oct-parse.cc:560
static const yytype_uint8 yytranslate[]
Definition: oct-parse.cc:696
end_tok_type ettype(void) const
Definition: token.cc:164
#define EPOW_EQ
Definition: oct-parse.cc:297
#define EMUL_EQ
Definition: oct-parse.cc:294
#define yypstate_delete
Definition: oct-parse.cc:68
#define CASE
Definition: oct-parse.cc:339
tree_classdef_events_list * tree_classdef_events_list_type
Definition: oct-parse.h:273
octave_function * function_value(bool silent=false) const
Definition: ov.cc:1705
tree_classdef_events_block * tree_classdef_events_block_type
Definition: oct-parse.h:274
#define YY_(Msgid)
Definition: oct-parse.cc:510
#define FUNC_RET
Definition: oct-parse.cc:343
#define MINUS_MINUS
Definition: oct-parse.cc:320
tree_expression * make_assign_op(int op, tree_argument_list *lhs, token *eq_tok, tree_expression *rhs)
Definition: oct-parse.cc:6873
int line(void) const
Definition: pt-stmt.cc:107
octave_comment_list * get_comment(void)
Definition: lex.h:600
std::string parse_error_msg
Definition: parse.h:400
#define EXPR_LT
Definition: oct-parse.cc:305
static std::string end_token_as_string(token::end_tok_type ettype)
Definition: oct-parse.cc:6003
#define EXPR_NOT
Definition: oct-parse.cc:304
tree_classdef_attribute * tree_classdef_attribute_type
Definition: oct-parse.h:262
#define yyparse
Definition: oct-parse.cc:64
void warning(const char *fmt,...)
Definition: error.cc:788
octave_user_function * frob_function(const std::string &fname, octave_user_function *fcn)
Definition: oct-parse.cc:7066
octave::unwind_protect frame
Definition: graphics.cc:11584
void recover_from_exception(void)
Definition: interpreter.cc:200
tree_switch_command * finish_switch_command(token *switch_tok, tree_expression *expr, tree_switch_case_list *list, token *end_tok, octave_comment_list *lc)
Definition: oct-parse.cc:6815
virtual std::string name(void) const
Definition: pt-exp.h:103
OCTINTERP_API std::string last_error_message(void)
tree_binary_expression * maybe_compound_binary_expression(tree_expression *a, tree_expression *b, int l, int c, octave_value::binary_op t)
Definition: pt-cbinop.cc:199
tree_argument_list * validate_matrix_for_assignment(tree_expression *e)
Definition: oct-parse.cc:7704
virtual octave_value rvalue1(int nargout=1)
Definition: pt-exp.cc:54
charNDArray max(char d, const charNDArray &m)
Definition: chNDArray.cc:228
virtual std::string fcn_file_name(void) const
Definition: ov-fcn.h:64
#define PLUS_PLUS
Definition: oct-parse.cc:319
bool at_end_of_buffer(void) const
Definition: lex.h:566
void mark_as_anon_function_body(void)
Definition: pt-stmt.h:155
bool is_empty(void) const
Definition: ov.h:542
octave_user_function * start_function(tree_parameter_list *param_list, tree_statement_list *body, tree_statement *end_function)
Definition: oct-parse.cc:7030
tree_command * make_for_command(int tok_id, token *for_tok, tree_argument_list *lhs, tree_expression *expr, tree_expression *maxproc, tree_statement_list *body, token *end_tok, octave_comment_list *lc)
Definition: oct-parse.cc:6649
#define CONTINUE
Definition: oct-parse.cc:342
void recover_from_parsing_function(void)
Definition: oct-parse.cc:7235
int run(void)
Definition: oct-parse.cc:7953
bool empty(void) const
Definition: ovl.h:98
symbol_table_context symtab_context
Definition: lex.h:448
void set_expression(tree_expression *e)
Definition: pt-stmt.h:102
#define octave_stdout
Definition: pager.h:146
bool input_from_tmp_history_file
Definition: oct-hist.cc:70
static int returning
Definition: pt-jump.h:106
tree_function_def * finish_function(tree_parameter_list *ret_list, octave_user_function *fcn, octave_comment_list *lc, int l, int c)
Definition: oct-parse.cc:7166
#define CATCH
Definition: oct-parse.cc:347
std::string curr_class_name
Definition: parse.h:433
#define PROPERTIES
Definition: oct-parse.cc:352
#define EPLUS
Definition: oct-parse.cc:315
virtual bool is_matrix(void) const
Definition: pt-exp.h:57
symbol_table::scope_id primary_fcn_scope
Definition: parse.h:429
#define OTHERWISE
Definition: oct-parse.cc:340
tree_statement_list * make_statement_list(tree_statement *stmt)
Definition: oct-parse.cc:7888
std::stack< bool > parsed_function_name
Definition: lex.h:442
bool parsing_subfunctions
Definition: parse.h:414
octave_comment_list * get_comment(void)
Definition: lex.h:524
tree_statement * make_end(const std::string &type, bool eof, int l, int c)
Definition: oct-parse.cc:7058
octave_comment_list * comment_type
Definition: oct-parse.h:229
octave_function * make_meta_class(bool is_at_folder=false)
Definition: pt-classdef.cc:236
#define yystate
Definition: oct-parse.cc:3007
tree_switch_case * tree_switch_case_type
Definition: oct-parse.h:252
tree_statement * tree_statement_type
Definition: oct-parse.h:257
=val(i)}if ode{val(i)}occurs in table i
Definition: lookup.cc:239
int Vmax_recursion_depth
Definition: pt-eval.cc:54
size_t size(void) const
Definition: base-list.h:49
bool endfunction_found
Definition: parse.h:403
#define yydebug
Definition: oct-parse.cc:72
tree_if_command_list * start_if_command(tree_expression *expr, tree_statement_list *list)
Definition: oct-parse.cc:6746
tree_command * make_break_command(token *break_tok)
Definition: oct-parse.cc:6713
p
Definition: lu.cc:138
#define EVENTS
Definition: oct-parse.cc:354
void mark_as_for_cmd_expr(void)
Definition: pt-exp.h:109
std::list< std::string > variable_names(void) const
std::string fcn_file_name
Definition: lex.h:430
tree_expression * expression(void)
Definition: pt-stmt.h:86
#define METAQUERY
Definition: oct-parse.cc:356
Definition: pt.h:39
tree_statement_list * append_statement_list(tree_statement_list *list, char sep, tree_statement *stmt, bool warn_missing_semi)
Definition: oct-parse.cc:7894
tree_classdef_events_block * make_classdef_events_block(token *tok_val, tree_classdef_attribute_list *a, tree_classdef_events_list *elist, token *end_tok, octave_comment_list *lc)
Definition: oct-parse.cc:7409
#define yylval
size_t length(void) const
Definition: base-list.h:50
bool reading_classdef_file
Definition: lex.h:380
tree_classdef_event * tree_classdef_event_type
Definition: oct-parse.h:272
#define ELEFTDIV_EQ
Definition: oct-parse.cc:296
std::string current_input_line
Definition: lex.h:414
yytype_int16 * yyss
Definition: oct-parse.cc:2934
bool is_anonymous_function(void) const
Definition: ov.h:705
void stash_dispatch_class(const std::string &nm)
Definition: ov-fcn.h:101
#define UNARY
Definition: oct-parse.cc:365
tree_fcn_handle * tree_fcn_handle_type
Definition: oct-parse.h:238
std::vector< symbol_table::scope_id > function_scopes
Definition: parse.h:442
#define yyerrstatus
Definition: oct-parse.cc:3008
virtual octave_value_list rvalue(int nargout)
Definition: pt-exp.cc:60
#define YYTRANSLATE(YYX)
Definition: oct-parse.cc:691
elt_type & front(void)
Definition: base-list.h:97
tree_identifier * tree_identifier_type
Definition: oct-parse.h:242
static std::map< std::string, std::string > autoload_map
Definition: oct-parse.cc:145
OCTINTERP_API octave_value_list Feval(const octave_value_list &=octave_value_list(), int=0)
static bool ignoring_entries(void)
Definition: cmd-hist.cc:600
octave_user_function * define_ret_list(tree_parameter_list *t)
Definition: ov-usr-fcn.cc:229
tree_expression * set_postfix_index(char type)
Definition: pt-exp.h:119
tree_decl_command * make_decl_command(int tok, token *tok_val, tree_decl_init_list *lst)
Definition: oct-parse.cc:7641
tree_if_clause * tree_if_clause_type
Definition: oct-parse.h:249
OCTAVE_STYPE * yyvsp
Definition: oct-parse.cc:2940
#define yypact_value_is_default(Yystate)
Definition: oct-parse.cc:835
octave::sys::file_stat fs(filename)
#define YYSTACK_BYTES(N)
Definition: oct-parse.cc:628
void pop_front(void)
Definition: base-list.h:106
void reset(void)
Definition: lex.h:732
token * tok_val
Definition: oct-parse.h:226
virtual bool is_assignment_expression(void) const
Definition: pt-exp.h:65
static octave_value builtin_find(const std::string &name)
Definition: symtab.cc:1268
base_parser(base_lexer &lxr)
Definition: oct-parse.cc:5948
#define LEFTDIV_EQ
Definition: oct-parse.cc:292
#define EXPR_GT
Definition: oct-parse.cc:310
void set_print_flag(bool print_flag)
Definition: pt-stmt.cc:63
void pop_back(void)
Definition: base-list.h:107
#define yyvsp
Definition: oct-parse.cc:3014
#define HERMITIAN
Definition: oct-parse.cc:317
int column(void) const
Definition: pt-stmt.cc:113
tree_statement * make_statement(T *arg)
Definition: oct-parse.cc:7880
void append(tree_argument_list *lst=0, char t= '(')
Definition: pt-idx.cc:77
tree_statement_list * stmt_list
Definition: parse.h:456
int octave_debug
bool is_expression(void) const
Definition: pt-stmt.h:68
#define EDIV_EQ
Definition: oct-parse.cc:295
tree_command * make_return_command(token *return_tok)
Definition: oct-parse.cc:6735
static void pop(void)
Definition: call-stack.h:313
void stash_fcn_file_name(const std::string &nm)
Definition: ov-usr-fcn.cc:237
void * parser_state
Definition: parse.h:462
tree_expression * base(void)
Definition: pt-colon.h:87
signed char yytype_int8
Definition: oct-parse.cc:472
void mark_as_subfunction(void)
Definition: ov-usr-fcn.h:296
OCTINTERP_API octave_value_list eval_string(const std::string &, bool silent, int &parse_status, int nargout)
void append(const elt_type &s)
Definition: base-list.h:110
#define FOR
Definition: oct-parse.cc:330
end example noindent will load the function or usages such as example autoload("foo", file_in_loadpath("bar.oct"))@end example @noindent are strongly discouraged
int beginning_column(void) const
Definition: ov-usr-fcn.h:212
std::complex< double > Complex
Definition: oct-cmplx.h:31
#define YYLAST
Definition: oct-parse.cc:675
std::string lookup_autoload(const std::string &nm)
Definition: oct-parse.cc:8219
#define GLOBAL
Definition: oct-parse.cc:348
octave_function * primary_fcn_ptr
Definition: parse.h:445
static void install_nestfunction(const std::string &name, const octave_value &fcn, scope_id parent_scope)
Definition: symtab.cc:1238
static const yytype_uint8 yystos[]
Definition: oct-parse.cc:1307
tree_constant * make_constant(int op, token *tok_val)
Definition: oct-parse.cc:6200
#define SET
Definition: oct-parse.cc:360
static void update_nest(scope_id scope)
Definition: symtab.h:1616
OCTINTERP_API void cleanup_statement_list(tree_statement_list **lst)
#define yyerror
Definition: oct-parse.cc:71
bool discard_warning_messages
Definition: error.cc:121
void stash_parent_fcn_name(const std::string &p)
Definition: ov-usr-fcn.h:225
tree_expression * finish_array_list(tree_array_list *a)
Definition: oct-parse.cc:7762
bool end_token_ok(token *tok, token::end_tok_type expected)
Definition: oct-parse.cc:6088
Vector representing the dimensions (size) of an Array.
Definition: dim-vector.h:87
OCTINTERP_API void source_file(const std::string &file_name, const std::string &context="", bool verbose=false, bool require_file=true, const std::string &warn_for="")
bool is_null_statement(void) const
Definition: pt-stmt.h:90
bool discard_error_messages
Definition: error.cc:118
#define YY_STACK_PRINT(Bottom, Top)
Definition: oct-parse.cc:1591
#define SUPERCLASSREF
Definition: oct-parse.cc:357
unary_op
Definition: ov.h:76
octave_user_function * octave_user_function_type
Definition: oct-parse.h:259
virtual int column(void) const
Definition: pt.h:51
#define GET
Definition: oct-parse.cc:359
#define EXPR_AND_AND
Definition: oct-parse.cc:300
#define WHILE
Definition: oct-parse.cc:332
#define YYEOF
Definition: oct-parse.cc:1433
static octave_function * load_mex(const std::string &fcn_name, const std::string &file_name="", bool relative=false)
Definition: dynamic-ld.cc:407
bool reading_startup_message_printed
Definition: oct-parse.cc:142
#define FQ_IDENT
Definition: oct-parse.cc:358
tree_decl_elt * tree_decl_elt_type
Definition: oct-parse.h:254
tree_classdef_enum_list * tree_classdef_enum_list_type
Definition: oct-parse.h:276
tree_classdef_methods_block * make_classdef_methods_block(token *tok_val, tree_classdef_attribute_list *a, tree_classdef_methods_list *mlist, token *end_tok, octave_comment_list *lc)
Definition: oct-parse.cc:7377
octave_value_list & prepend(const octave_value &val)
Definition: ovl.cc:67
virtual bool is_identifier(void) const
Definition: pt-exp.h:61
tree_statement_list * set_stmt_print_flag(tree_statement_list *, char, bool)
Definition: oct-parse.cc:7841
#define ELSE
Definition: oct-parse.cc:337
tree_if_clause * make_elseif_clause(token *elseif_tok, tree_expression *expr, tree_statement_list *list, octave_comment_list *lc)
Definition: oct-parse.cc:6799
tree_classdef * tree_classdef_type
Definition: oct-parse.h:261
Definition: token.h:32
bool is_simple_assign_lhs(void)
Definition: pt-arg-list.h:78
static const yytype_int16 yypgoto[]
Definition: oct-parse.cc:961
void mark_as_class_constructor(void)
Definition: ov-usr-fcn.h:330
where the brackets indicate optional arguments and and character or cell array For character arrays the conversion is repeated for every row
Definition: str2double.cc:342
void stash_package_name(const std::string &pack)
Definition: ov-fcn.h:105
static void safe_fclose(FILE *f)
Definition: oct-parse.cc:8064
iterator begin(void)
Definition: base-list.h:83
#define YYSTACK_ALLOC
Definition: oct-parse.cc:583
void free(void *)
tree_expression * make_binary_op(int op, tree_expression *op1, token *tok_val, tree_expression *op2)
Definition: oct-parse.cc:6307
tree_expression * make_postfix_op(int op, tree_expression *op1, token *tok_val)
Definition: oct-parse.cc:6469
#define YY_IGNORE_MAYBE_UNINITIALIZED_END
Definition: oct-parse.cc:561
#define EXPR_OR_OR
Definition: oct-parse.cc:301
static octave_value find(const std::string &name, const octave_value_list &args=octave_value_list(), bool skip_variables=false, bool local_funcs=true)
Definition: symtab.cc:1255
static octave_function * parse_fcn_file(const std::string &full_file, const std::string &file, const std::string &dispatch_type, const std::string &package_name, bool require_file, bool force_script, bool autoload, bool relative_lookup, const std::string &warn_for)
Definition: oct-parse.cc:8071