emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master c304ac9: Release ada-mode 6.1.0, wisi 2.1.0


From: Stephen Leake
Subject: [elpa] master c304ac9: Release ada-mode 6.1.0, wisi 2.1.0
Date: Fri, 22 Mar 2019 08:34:17 -0400 (EDT)

branch: master
commit c304ac9a80ab7e96f705771a3842a48bf5a32c8a
Author: Stephen Leake <address@hidden>
Commit: Stephen Leake <address@hidden>

    Release ada-mode 6.1.0, wisi 2.1.0
---
 packages/ada-mode/NEWS                             |   30 +
 packages/ada-mode/README                           |   16 +-
 packages/ada-mode/ada-gnat-compile.el              |   57 +-
 packages/ada-mode/ada-gps.el                       |  444 --
 packages/ada-mode/ada-indent-user-options.el       |   10 +-
 packages/ada-mode/ada-lalr-elisp.el                | 1141 ++---
 packages/ada-mode/ada-mode.el                      |   44 +-
 packages/ada-mode/ada-mode.info                    |  244 +-
 packages/ada-mode/ada-mode.texi                    |  145 +-
 packages/ada-mode/ada-process.el                   |    2 +-
 packages/ada-mode/ada-project.el                   |   81 -
 packages/ada-mode/ada-wisi-elisp-parse.el          |    4 +-
 packages/ada-mode/ada-wisi.el                      |  211 +-
 packages/ada-mode/ada_lr1_parse_table.txt.gz       |  Bin 2964016 -> 2831194 
bytes
 packages/ada-mode/ada_mode_gps_indent.adb          |  323 --
 packages/ada-mode/ada_mode_gps_indent.gpr.gp       |   81 -
 packages/ada-mode/ada_mode_wisi_lalr_parse.ads     |   15 +-
 packages/ada-mode/ada_mode_wisi_lr1_parse.ads      |   17 +-
 packages/ada-mode/ada_mode_wisi_parse.gpr.gp       |   16 +-
 packages/ada-mode/ada_process_actions.adb          |  439 +-
 packages/ada-mode/ada_process_actions.ads          |  280 +-
 packages/ada-mode/ada_process_lalr_main.adb        | 2733 ++++++-----
 packages/ada-mode/ada_process_lalr_main.ads        |    2 +-
 packages/ada-mode/ada_process_lr1_main.adb         |   14 +-
 packages/ada-mode/ada_process_lr1_main.ads         |    2 +-
 packages/ada-mode/ada_re2c.c                       | 3695 ++++++++-------
 packages/ada-mode/ada_re2c_c.ads                   |    2 +-
 packages/ada-mode/build.sh                         |    7 +-
 packages/ada-mode/config.pragmas                   |    6 +
 packages/ada-mode/emacs_wisi_common_parse.adb      |  598 ++-
 packages/ada-mode/emacs_wisi_common_parse.ads      |   64 +-
 packages/ada-mode/env-project.el                   |   70 -
 packages/ada-mode/gen_emacs_wisi_lr_parse.adb      |  193 +-
 packages/ada-mode/gen_emacs_wisi_lr_parse.ads      |   11 +-
 .../ada-mode/gen_emacs_wisi_lr_text_rep_parse.adb  |  264 +-
 .../ada-mode/gen_emacs_wisi_lr_text_rep_parse.ads  |   13 +-
 packages/ada-mode/gen_run_wisi_lr_parse.adb        |  200 +-
 .../ada-mode/gen_run_wisi_lr_text_rep_parse.adb    |  135 +-
 packages/ada-mode/gnat-core.el                     |    3 +-
 packages/ada-mode/gpr-lalr-elisp.el                |   83 +-
 packages/ada-mode/gpr-process.el                   |    2 +-
 packages/ada-mode/gpr-wisi.el                      |    8 +-
 packages/ada-mode/gpr_mode_wisi_parse.ads          |    3 +-
 packages/ada-mode/gpr_process_actions.adb          |   61 +-
 packages/ada-mode/gpr_process_actions.ads          |   46 +-
 packages/ada-mode/gpr_process_lr1_main.adb         |  584 ++-
 packages/ada-mode/gpr_process_lr1_main.ads         |    2 +-
 packages/ada-mode/gpr_re2c.c                       |  193 +-
 packages/ada-mode/gpr_re2c_c.ads                   |    2 +-
 packages/ada-mode/gps_source/ada_analyzer.adb      | 4834 --------------------
 packages/ada-mode/gps_source/ada_analyzer.ads      |   76 -
 packages/ada-mode/gps_source/basic_types.adb       |  147 -
 packages/ada-mode/gps_source/basic_types.ads       |  166 -
 packages/ada-mode/gps_source/case_handling.adb     |  314 --
 packages/ada-mode/gps_source/case_handling.ads     |  124 -
 packages/ada-mode/gps_source/config.ads            |   34 -
 packages/ada-mode/gps_source/generic_stack.adb     |  126 -
 packages/ada-mode/gps_source/generic_stack.ads     |   74 -
 packages/ada-mode/gps_source/indent_stack.ads      |   32 -
 packages/ada-mode/gps_source/language.adb          | 1051 -----
 packages/ada-mode/gps_source/language.ads          |  864 ----
 packages/ada-mode/gps_source/string_utils.adb      | 1364 ------
 packages/ada-mode/gps_source/string_utils.ads      |  353 --
 packages/ada-mode/gps_source/utf8_utils.adb        |  313 --
 packages/ada-mode/gps_source/utf8_utils.ads        |  101 -
 packages/ada-mode/run_wisi_common_parse.adb        |  155 +-
 packages/ada-mode/run_wisi_common_parse.ads        |   16 +-
 packages/ada-mode/wisi-ada.adb                     |   16 +-
 packages/ada-mode/wisi-ada.ads                     |    6 +-
 packages/ada-mode/wisi-gpr.adb                     |    9 +-
 packages/ada-mode/wisi-gpr.ads                     |    6 +-
 .../wisitoken-parse-lr-mckenzie_recover-ada.adb    |  142 +-
 .../wisitoken-parse-lr-mckenzie_recover-ada.ads    |   18 +-
 packages/ada-mode/xref-ada.el                      |    9 +-
 packages/wisi/NEWS                                 |   13 +
 packages/wisi/README                               |    4 +-
 packages/wisi/build-wisitoken-bnf-generate.sh      |    0
 packages/wisi/sal-gen_array_image.adb              |   34 +
 packages/wisi/sal-gen_array_image.ads              |   24 +
 packages/wisi/sal-gen_bounded_definite_vectors.ads |    6 +-
 .../wisi/sal-gen_definite_doubly_linked_lists.ads  |    6 +-
 ...sal-gen_definite_doubly_linked_lists_sorted.ads |    8 +-
 .../sal-gen_indefinite_doubly_linked_lists.ads     |    5 +-
 ...-gen_unbounded_definite_min_heaps_fibonacci.adb |   33 +-
 ...-gen_unbounded_definite_min_heaps_fibonacci.ads |   13 +-
 .../wisi/sal-gen_unbounded_definite_queues.ads     |    4 +-
 .../sal-gen_unbounded_definite_red_black_trees.ads |    5 +-
 .../wisi/sal-gen_unbounded_definite_stacks.ads     |    3 +-
 .../wisi/sal-gen_unbounded_definite_vectors.adb    |   27 +-
 .../wisi/sal-gen_unbounded_definite_vectors.ads    |   23 +-
 packages/wisi/sal.adb                              |    4 +-
 packages/wisi/standard_common.gpr                  |   29 +-
 packages/wisi/wisi-elisp-parse.el                  |   46 +-
 packages/wisi/wisi-fringe.el                       |   10 +-
 packages/wisi/wisi-parse-common.el                 |  694 +--
 packages/wisi/wisi-process-parse.el                |  228 +-
 packages/wisi/wisi.adb                             |  404 +-
 packages/wisi/wisi.ads                             |   56 +-
 packages/wisi/wisi.el                              |  581 ++-
 packages/wisi/wisitoken-bnf-generate.adb           |    4 +-
 packages/wisi/wisitoken-bnf-generate_utils.adb     |   14 +-
 packages/wisi/wisitoken-bnf-generate_utils.ads     |    2 +-
 packages/wisi/wisitoken-bnf-output_ada.adb         |   13 +-
 packages/wisi/wisitoken-bnf-output_ada_common.adb  |   62 +-
 packages/wisi/wisitoken-bnf-output_ada_emacs.adb   |  156 +-
 packages/wisi/wisitoken-bnf.ads                    |   15 +-
 packages/wisi/wisitoken-gen_token_enum.ads         |    6 +-
 .../wisi/wisitoken-generate-lr-lalr_generate.adb   |   21 +-
 .../wisi/wisitoken-generate-lr-lalr_generate.ads   |   19 +-
 .../wisi/wisitoken-generate-lr-lr1_generate.adb    |   28 +-
 .../wisi/wisitoken-generate-lr-lr1_generate.ads    |   11 +-
 packages/wisi/wisitoken-generate-lr.adb            | 2397 +++++-----
 packages/wisi/wisitoken-generate-lr.ads            |   59 +-
 packages/wisi/wisitoken-generate-lr1_items.adb     |   30 +-
 packages/wisi/wisitoken-generate-lr1_items.ads     |   17 +-
 packages/wisi/wisitoken-generate.adb               |   63 +-
 packages/wisi/wisitoken-generate.ads               |   17 +-
 packages/wisi/wisitoken-lexer-re2c.adb             |  146 +-
 packages/wisi/wisitoken-lexer-re2c.ads             |   35 +-
 packages/wisi/wisitoken-lexer-regexp.adb           |   48 +-
 packages/wisi/wisitoken-lexer-regexp.ads           |   34 +-
 packages/wisi/wisitoken-lexer.adb                  |    7 +-
 packages/wisi/wisitoken-lexer.ads                  |   52 +-
 .../wisitoken-parse-lr-mckenzie_recover-base.ads   |    5 +-
 ...wisitoken-parse-lr-mckenzie_recover-explore.adb |  457 +-
 .../wisitoken-parse-lr-mckenzie_recover-parse.adb  |   12 +-
 .../wisi/wisitoken-parse-lr-mckenzie_recover.adb   |  291 +-
 .../wisi/wisitoken-parse-lr-mckenzie_recover.ads   |   25 +-
 packages/wisi/wisitoken-parse-lr-parser.adb        |  387 +-
 packages/wisi/wisitoken-parse-lr-parser.ads        |   27 +-
 packages/wisi/wisitoken-parse-lr-parser_lists.adb  |   31 +-
 packages/wisi/wisitoken-parse-lr-parser_lists.ads  |   29 +-
 .../wisi/wisitoken-parse-lr-parser_no_recover.adb  | 1002 ++--
 .../wisi/wisitoken-parse-lr-parser_no_recover.ads  |    4 +-
 packages/wisi/wisitoken-parse-lr.adb               |  246 +-
 packages/wisi/wisitoken-parse-lr.ads               |   56 +-
 .../wisi/wisitoken-parse-packrat-generated.adb     |    9 +-
 .../wisi/wisitoken-parse-packrat-generated.ads     |    9 +-
 .../wisi/wisitoken-parse-packrat-procedural.adb    |    7 +-
 .../wisi/wisitoken-parse-packrat-procedural.ads    |    7 +-
 packages/wisi/wisitoken-parse.adb                  |    6 +-
 packages/wisi/wisitoken-parse.ads                  |    7 +-
 packages/wisi/wisitoken-parse_table-mode.el        |   96 +
 packages/wisi/wisitoken-productions.ads            |   16 +-
 packages/wisi/wisitoken-semantic_checks.adb        |   19 +-
 packages/wisi/wisitoken-semantic_checks.ads        |   18 +-
 packages/wisi/wisitoken-syntax_trees.adb           |   89 +-
 packages/wisi/wisitoken-syntax_trees.ads           |   36 +-
 packages/wisi/wisitoken-text_io_trace.adb          |   55 +-
 packages/wisi/wisitoken-text_io_trace.ads          |   13 +-
 packages/wisi/wisitoken-user_guide.info            |   16 +-
 packages/wisi/wisitoken.adb                        |    4 +-
 packages/wisi/wisitoken.ads                        |  881 ++--
 packages/wisi/wisitoken_grammar_actions.ads        |    2 +-
 packages/wisi/wisitoken_grammar_main.adb           |   64 +-
 packages/wisi/wisitoken_grammar_re2c.c             |  143 +-
 packages/wisi/wisitoken_grammar_runtime.adb        |   11 +-
 packages/wisi/wisitoken_grammar_runtime.ads        |    1 -
 158 files changed, 11704 insertions(+), 20839 deletions(-)

diff --git a/packages/ada-mode/NEWS b/packages/ada-mode/NEWS
index 4e6d013..641fae7 100644
--- a/packages/ada-mode/NEWS
+++ b/packages/ada-mode/NEWS
@@ -1,6 +1,36 @@
 GNU Emacs Ada mode NEWS -- history of user-visible changes.
 
+Copyright (C) 2018 Free Software Foundation, Inc.
+See the end of the file for license conditions.
+
+Please send wisi bug reports to address@hidden, with
+'ada-mode' in the subject. If possible, use M-x report-emacs-bug.
+
 
+* Ada mode 6.1.0
+21 Mar 2019
+
+** Add support for partial parsing; useful in very large files. Files
+   larger than wisi-partial-parse-threshold (default 100_001) will be
+   parsed partially. In general, partial parsing may yield incorrect
+   results for indentation; the Ada menu entry
+   "Edit | Indent lines in file" will parse the entire file and indent
+   correctly.
+
+** Better error correction in the Ada process parser; insert minimimal
+  tokens to complete a statement/declaration before or after the error
+  point.
+
+** New indent option: 'ada-indent-after-trailing-comment' If t (the
+ default), align comment lines imediately following a comment on the
+ same line as code with the preceding comment. Otherwise, ignore the
+ preceding comment.
+
+** Delete support for the GPS backend; no need, given partial parsing
+   and error correction.
+
+** Miscellaneous bug fixes.
+
 * Ada mode 6.0.1
 8 Dec 2018
 
diff --git a/packages/ada-mode/README b/packages/ada-mode/README
index edf6bfa..69e4e21 100644
--- a/packages/ada-mode/README
+++ b/packages/ada-mode/README
@@ -1,4 +1,4 @@
-Emacs Ada mode version 6.0.1
+Emacs Ada mode version 6.1.0
 
 Ada mode provides auto-casing, fontification, navigation, and
 indentation for Ada source code files.
@@ -24,15 +24,11 @@ indentation. There are two parsers provided:
   syntax errors.
 
 - process, which is implemented in Ada, is fast enough for reasonably
-  large files, and recovers from most syntax errors. The 'process'
-  parser must be compiled; see ada-mode.info section "process parser".
-
-In addition, there is support for running the AdaCore GPS indentation
-engine in a subprocess, either as a backup when the primary parser
-fails, or as the primary indentation engine. The GPS indentation
-engine must be compiled; see ada-mode.info section ada-gps for
-instructions.
-   
+  large files, supports partial parse for very large files (see
+  wisi-partial-parse-threshold), and recovers from almost all syntax
+  errors. The 'process' parser must be compiled; see ada-mode.info
+  section "process parser".
+
 See ada-mode.info for help on using and customizing Ada mode, and
 notes for Ada mode developers.
 
diff --git a/packages/ada-mode/ada-gnat-compile.el 
b/packages/ada-mode/ada-gnat-compile.el
index 59c901b..a0118ac 100644
--- a/packages/ada-mode/ada-gnat-compile.el
+++ b/packages/ada-mode/ada-gnat-compile.el
@@ -6,7 +6,7 @@
 ;;
 ;; GNAT is provided by AdaCore; see http://libre.adacore.com/
 ;;
-;;; Copyright (C) 2012 - 2018  Free Software Foundation, Inc.
+;;; Copyright (C) 2012 - 2019  Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;; Maintainer: Stephen Leake <address@hidden>
@@ -195,12 +195,23 @@ Prompt user if more than one."
          ;;
          ;; This list will get long, so let's impose some order.
          ;;
-         ;; First expressions that start with a named regexp, alphabetical by 
variable name.
+         ;; First expressions that start with a named regexp,
+         ;; alphabetical by variable name and following string.
          ;;
          ;; Then expressions that start with a string, alphabetical by string.
          ;;
          ;; Then style errors.
 
+         ((looking-at (concat ada-gnat-quoted-name-regexp " is not a component 
of "))
+                  (save-excursion
+            (let ((child-name (match-string 1))
+                  (correct-spelling (ada-gnat-misspelling)))
+              (setq correct-spelling (match-string 1))
+              (pop-to-buffer source-buffer)
+              (search-forward child-name)
+              (replace-match correct-spelling))
+            t))
+
          ((looking-at (concat ada-gnat-quoted-name-regexp " is not visible"))
           (let ((done nil)
                 (file-line-struct (progn (beginning-of-line) 
(ada-get-compilation-message)))
@@ -220,25 +231,26 @@ Prompt user if more than one."
             ;; the lines after that may contain alternate matches;
             ;; collect all, let user choose.
             (forward-line 1)
-            (unless (looking-at ".* multiple use clauses cause hiding")
-              (while (not done)
-                (let ((limit (1- (line-end-position))))
-                  ;; 1- because next compilation error is at next line 
beginning
-                  (setq done (not
-                              (and
-                               (equal file-line-struct 
(ada-get-compilation-message))
-                               (setq pos (next-single-property-change (point) 
'ada-secondary-error nil limit))
-                               (< pos limit))))
-                  (when (not done)
-                    (let* ((item (get-text-property pos 'ada-secondary-error))
-                           (unit-file (nth 0 item))
-                            (choice (ada-ada-name-from-file-name unit-file)))
-                       (unless (member choice choices) (push choice choices))
-                      (goto-char (1+ pos))
-                      (goto-char (1+ (next-single-property-change (point) 
'ada-secondary-error nil limit)))
-                      (when (eolp) (forward-line 1))
-                      ))
-                  )));; unless while let
+            (when (looking-at ".* multiple use clauses cause hiding")
+              (forward-line 1))
+            (while (not done)
+              (let ((limit (1- (line-end-position))))
+                ;; 1- because next compilation error is at next line beginning
+                (setq done (not
+                            (and
+                             (equal file-line-struct 
(ada-get-compilation-message))
+                             (setq pos (next-single-property-change (point) 
'ada-secondary-error nil limit))
+                             (< pos limit))))
+                (when (not done)
+                  (let* ((item (get-text-property pos 'ada-secondary-error))
+                         (unit-file (nth 0 item))
+                         (choice (ada-ada-name-from-file-name unit-file)))
+                    (unless (member choice choices) (push choice choices))
+                    (goto-char (1+ pos))
+                    (goto-char (1+ (next-single-property-change (point) 
'ada-secondary-error nil limit)))
+                    (when (eolp) (forward-line 1))
+                    ))
+                ))
 
             (setq unit-name
                   (cond
@@ -553,7 +565,8 @@ Prompt user if more than one."
           t)
 
 ;;;; style errors
-         ((looking-at "(style) \".*\" in wrong column")
+         ((or (looking-at "(style) \".*\" in wrong column")
+              (looking-at "(style) this token should be in column"))
           (set-buffer source-buffer)
           (funcall indent-line-function)
           t)
diff --git a/packages/ada-mode/ada-gps.el b/packages/ada-mode/ada-gps.el
deleted file mode 100644
index 6ea16ac..0000000
--- a/packages/ada-mode/ada-gps.el
+++ /dev/null
@@ -1,444 +0,0 @@
-;; Emacs ada-mode indentation engine, using GPS code in a subprocess.
-;;
-;; GNAT is provided by AdaCore; see http://libre.adacore.com/
-;;
-;;; Copyright (C) 2014, 2017  Free Software Foundation, Inc.
-;;
-;; Author: Stephen Leake <address@hidden>
-;; Maintainer: Stephen Leake <address@hidden>
-;;
-;; This file is part of GNU Emacs.
-;;
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-;;
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'ada-mode)
-(require 'ada-indent-user-options)
-
-(defcustom ada-gps-size-threshold 100000
-  "Max size (in characters) for using ada-wisi indentation engine.
-Buffers larger than this will use ada-gps indentation engine,
-which is faster on large buffers."
-  :type 'integer
-  :group 'ada-indentation
-  :safe 'integerp)
-
-(defvar ada-gps-debug 0)
-
-(defconst ada-gps-indent-exec-api-version "1"
-  "API version of ada_mode_gps_indent executable this code expects.")
-
-(defvar ada-gps-indent-exec-patch-level nil
-  "Patch level of ada_mode_gps_indent executable.")
-
-;;;;; sessions
-
-;; ada_mode_gps_indent runs a loop, waiting for indentation requests.
-;;
-;; We only need one process; there is no persistent state.
-
-(cl-defstruct (ada-gps--session)
-  (process nil) ;; running gpr_query
-  (buffer nil))  ;; receives output of gpr_query
-
-(defvar ada-gps-session
-  (make-ada-gps--session)
-  "The single instance of ada-gps--session")
-
-(defconst ada-gps-buffer-name " *ada_gps*")
-
-;; ada-gps-indent-exec declared in ada-mode for auto-detection of indent engine
-
-(defun ada-gps--start-process ()
-  "Start the session process running ada_gps."
-  (unless (buffer-live-p (ada-gps--session-buffer ada-gps-session))
-    ;; user may have killed buffer
-    (setf (ada-gps--session-buffer ada-gps-session) (get-buffer-create 
ada-gps-buffer-name)))
-
-  (let ((process-connection-type nil) ;; use a pipe; no need for \n or flush 
on Linux or Windows
-       (exec-file (locate-file ada-gps-indent-exec exec-path '("" ".exe"))))
-    (unless exec-file
-      (error "%s not found on `exec-path'" ada-gps-indent-exec))
-
-    (with-current-buffer (ada-gps--session-buffer ada-gps-session)
-      (erase-buffer); delete any previous messages, prompt
-      (setf (ada-gps--session-process ada-gps-session)
-           (start-process ada-gps-buffer-name (current-buffer) exec-file))
-      (set-process-query-on-exit-flag (ada-gps--session-process 
ada-gps-session) nil)
-      (ada-gps-session-wait)
-
-      (ada-gps-check-version)
-      )))
-
-(defun ada-gps-show-proc-id ()
-  "Display ada-gps process id, for attaching with debugger."
-  (interactive)
-  (if (process-live-p (ada-gps--session-process ada-gps-session))
-      (message "ada-gps process id: %d" (process-id (ada-gps--session-process 
ada-gps-session)))
-    (message "ada-gps process not live")
-    ))
-
-(defun ada-gps-require-session ()
-  "Create ada-gps session if not active."
-  (unless (and (ada-gps--session-process ada-gps-session)
-              (process-live-p (ada-gps--session-process ada-gps-session)))
-   (ada-gps--start-process)))
-
-(defconst ada-gps-prompt "^GPS_Indent> $"
-  "Regexp matching ada_mode_gps_indent prompt; indicates previous command is 
complete.")
-
-(defun ada-gps-session-wait ()
-  "Wait for the current command to complete."
-  (unless (process-live-p (ada-gps--session-process ada-gps-session))
-    (ada-gps-show-buffer)
-    (error "ada-gps process died"))
-
-  (with-current-buffer (ada-gps--session-buffer ada-gps-session)
-    (let ((process (ada-gps--session-process ada-gps-session))
-         (search-start (point-min))
-         (found nil))
-      (while (and (process-live-p process)
-                 (progn
-                   ;; process output is inserted before point, so move back 
over it to search it
-                   (goto-char search-start)
-                   (not (setq found (re-search-forward ada-gps-prompt 
(point-max) t)))))
-       (setq search-start (point));; don't search same text again
-       (accept-process-output process 0.1))
-      (if found
-         (when (> ada-gps-debug 0)
-           (message "'%s'" (buffer-substring-no-properties (point-min) 
(point-max))))
-
-       (ada-gps-show-buffer)
-       (error "ada_gps process hung or died"))
-      )))
-
-(defun ada-gps-session-send (cmd wait prefix)
-  "Send CMD to ada_gps session.
-If WAIT is non-nil, wait for command to complete.
-If PREFIX is non-nil, prefix with count of bytes in cmd."
-  (ada-gps-require-session)
-  ;; we don't wait for previous command to complete, because the
-  ;; previous call to ada-gps-session-cmd might have been a partial
-  ;; command string (in particular, for 'compute_indent').
-  (let* ((byte-count-img (when prefix (format "%02d" (string-bytes cmd))))
-        (msg (concat byte-count-img cmd)))
-    (when (and (> ada-gps-debug 0)
-              (< (length msg) 100))
-      (message msg))
-    (with-current-buffer (ada-gps--session-buffer ada-gps-session)
-      (erase-buffer)
-      (process-send-string (ada-gps--session-process ada-gps-session) msg)
-      (when wait
-       (ada-gps-session-wait))
-      )))
-
-(defun ada-gps-kill-session ()
-  (interactive)
-  (when (process-live-p (ada-gps--session-process ada-gps-session))
-    (process-send-string (ada-gps--session-process ada-gps-session) "04exit")
-    ))
-
-(defun ada-gps-check-version ()
-  "Throw an error if gps executable version does not match expected."
-  (ada-gps-session-send "version" t t)
-  (with-current-buffer (ada-gps--session-buffer ada-gps-session)
-    (goto-char (point-min))
-    ;; We accept any patch level
-    (when (not (looking-at (concat ada-gps-indent-exec-api-version "\\....$")))
-      (error "Incorrect API version for '%s'; found '%s', expecting '%s'."
-            ada-gps-indent-exec
-            (buffer-substring (point-min) (line-end-position))
-            ada-gps-indent-exec-api-version))
-
-    (setq ada-gps-indent-exec-patch-level
-         (buffer-substring (- (line-end-position) 3) (line-end-position)))))
-
-(defun ada-gps-show-buffer ()
-  "Show ada-gps buffer."
-  (interactive)
-  (if (ada-gps--session-buffer ada-gps-session)
-      (pop-to-buffer (ada-gps--session-buffer ada-gps-session))
-    (error "ada-gps session not active")))
-
-;;;;; indenting
-
-(defun ada-gps-send-params ()
-  "Send indentation params to current gps session."
-  (ada-gps-session-send
-   (format "set_params %d %d %d %d"
-          ada-indent
-          ada-indent-broken
-          ada-indent-when
-          ada-indent-record-rel-type)
-   t t))
-
-(defconst ada-gps-output-regexp " *\\([0-9]+\\) +\\([0-9]+\\)$"
-  "Matches gps process output for one line.")
-
-(defvar-local ada-gps-indent-functions nil
-  "Functions to compute indentation special cases.
-Called with point at current indentation of a line; return
-indentation column, or nil if function does not know how to
-indent that line. Run after parser indentation, so other lines
-are indented correctly.")
-
-(defun ada-gps-indent-line ()
-  "For `indent-line-function'; indent current line using the ada-gps 
indentation engine."
-  (let ((savep (copy-marker (point)))
-       (to-indent nil))
-    (back-to-indentation)
-    (when (>= (point) savep)
-      (setq to-indent t))
-
-    (ada-gps-indent-region (line-beginning-position) (line-end-position))
-
-    (goto-char savep)
-    (when to-indent (back-to-indentation))
-    ))
-
-(defun ada-gps-indent-region (begin end)
-  "For `indent-region-function'; indent lines in region BEGIN END using GPS."
-
-  (save-excursion
-    ;; always send indent parameters - we don't track what buffer we are in
-    (ada-gps-send-params)
-
-    ;; send complete lines
-    (goto-char end)
-    (setq end (line-end-position))
-
-    (let ((source-buffer (current-buffer))
-         (begin-line (line-number-at-pos begin))
-         (end-line (line-number-at-pos end))
-         (delete-bogus nil)
-         (failed nil))
-
-      (goto-char begin)
-      (when (and (= begin-line end-line)
-                (eolp))
-       ;; Indenting a single blank line. Insert some text so the GPS
-       ;; engine won't return 0.
-       ;;
-       ;; test/ada-gps/ada_gps_bug_005.adb
-       (insert "bogus")
-       (setq end (point))
-       (setq delete-bogus t))
-
-      (ada-gps-session-send
-       (format "compute_region_indent %d %d %d" begin-line end-line (1- 
(position-bytes end))) nil t)
-      (ada-gps-session-send (buffer-substring-no-properties (point-min) end) t 
nil)
-
-      (when delete-bogus
-       (backward-delete-char 5))
-
-      (with-current-buffer (ada-gps--session-buffer ada-gps-session)
-       ;; buffer contains two numbers per line; Emacs line number,
-       ;; indent. Or an error message.
-       (goto-char (point-min))
-       (while (and (not failed)
-                   (not (looking-at ada-gps-prompt)))
-         (if (looking-at ada-gps-output-regexp)
-             (let ((line (string-to-number (match-string 1)))
-                   (indent (string-to-number (match-string 2))))
-               (with-current-buffer source-buffer
-                 (goto-char (point-min))
-                 (forward-line (1- line))
-                 (indent-line-to indent)
-                 )
-
-               (forward-line 1))
-
-           ;; else some error message
-           (setq failed t)
-           (cond
-            ((> ada-gps-debug 0)
-             (message "ada-gps returned '%s'" (buffer-substring-no-properties 
(point-min) (point-max)))
-             (goto-char (point-max)))
-            (t
-             (message "ada-gps indent failed")
-             )))
-         ))
-
-      (unless failed
-       ;; run ada-gps-indent-functions on region
-       (goto-char begin)
-       (let ((line begin-line)
-             indent)
-         (while (<= line end-line)
-           (back-to-indentation)
-           (setq indent
-                 (run-hook-with-args-until-success 'ada-gps-indent-functions))
-           (when indent
-             (indent-line-to indent))
-           (forward-line 1)
-           (setq line (1+ line))
-           )))
-      )))
-
-(defun ada-gps--comment-goto-start()
-  ;; If comment is after a terminal semicolon, indent to
-  ;; beginning of statement, not prev line.
-  ;;
-  ;; test/ada-gps/ada_gps_bug_007.adb
-  (let (cache)
-    (end-of-line)
-    (wisi-validate-cache (point) nil 'navigate)
-    (setq cache (wisi-backward-cache))
-    (when (and cache ;; parse might have failed
-              (eq 'statement-end (wisi-cache-class cache)))
-      (wisi-goto-start cache))))
-
-(defun ada-gps-comment ()
-  "Modify indentation of a comment:
-For `ada-gps-indent-functions'.
-- align to previous comment after code.
-- align to previous code
-- respect `ada-indent-comment-gnat'."
-  ;; We know we are at the first token on a line. We check for comment
-  ;; syntax, not comment-start, to accomodate gnatprep, skeleton
-  ;; placeholders, etc.
-  ;;
-  ;; The ada-gps indentation algorithm has already indented the
-  ;; comment; however, it gets this wrong in many cases, so we don't
-  ;; trust it. We compare the ada-gps indent to previous and following
-  ;; code indent, then choose the best fit.
-  (when (and (not (eobp))
-            (= 11 (syntax-class (syntax-after (point)))))
-
-    ;; We are looking at a comment; check for preceding comments, code
-    (let ((indent (current-column))
-         after prev-indent next-indent)
-
-      (if (save-excursion (forward-line -1) (looking-at "\\s *$"))
-         ;; after blank line - find a code line
-         (save-excursion
-           (setq after 'code)
-           (forward-line -1)
-           (while (or (bobp)
-                      (looking-at "\\s *$"))
-             (forward-line -1))
-           (if (bobp)
-               (setq prev-indent 0)
-
-             (ada-gps--comment-goto-start)
-             (back-to-indentation)
-             (setq prev-indent (current-column)))
-           )
-
-       ;; after a code line
-       (save-excursion
-         (forward-comment -1)
-         (if (eolp)
-             ;; no comment on previous line
-             (progn
-               (setq after 'code)
-               (ada-gps--comment-goto-start)
-               (back-to-indentation)
-               (setq prev-indent (current-column)))
-
-           (setq prev-indent (current-column))
-           (if (not (= prev-indent (progn (back-to-indentation) 
(current-column))))
-               ;; previous line has comment following code
-               (setq after 'code-comment)
-             ;; previous line has plain comment
-             (setq after 'comment)
-             )))
-       )
-
-      (cl-ecase after
-       (code
-        (if ada-indent-comment-gnat
-            (ada-wisi-comment-gnat indent 'code)
-
-          ;; Find indent of following code
-          (save-excursion
-            (forward-line 1)
-            (while (or (eobp)
-                       (looking-at "\\s *$"))
-              (forward-line 1))
-            (if (eobp)
-                (setq next-indent 0)
-              (back-to-indentation)
-              (setq next-indent (current-column))))
-
-          (cond
-           ((or (= indent prev-indent)
-                (= indent next-indent))
-            indent)
-           (t
-            prev-indent))))
-
-       (comment
-        prev-indent)
-
-       (code-comment
-        (if ada-indent-comment-gnat
-            (ada-wisi-comment-gnat indent 'code-comment)
-
-          ;; After comment that follows code on the same line
-          ;; test/ada_mode-nominal.adb
-          ;;
-          ;; begin -- 2
-          ;;       --EMACSCMD:(progn 
(ada-goto-declarative-region-start)(looking-at "Bad_Thing"))
-          prev-indent)
-        ))
-      )))
-
-(defun ada-gps-noop-send ()
-  "Just send buffer text to gps process.
-For use with ’wisi-time’."
-  (ada-gps-session-send (format "noop %d" (1- (position-bytes (point-max)))) 
nil t)
-  (ada-gps-session-send (buffer-substring-no-properties (point-min) 
(point-max)) t nil))
-
-;;;;; setup
-
-(defun ada-gps-setup ()
-  "Set up a buffer for indenting with ada-gps."
-  (set (make-local-variable 'indent-line-function) 'ada-gps-indent-line)
-  (set (make-local-variable 'indent-region-function) 'ada-gps-indent-region)
-  (ada-gps-require-session)
-
-  ;; file local variables may have added opentoken, gnatprep
-  (setq ada-gps-indent-functions (append ada-gps-indent-functions (list 
#'ada-gps-comment)))
-  )
-
-(require 'ada-wisi)
-
-(defun ada-gps-or-wisi-setup ()
-  "If buffer size > `ada-gps-size-threshold', use ada-gps;
-otherwise use ada-wisi indentation engine with ada-gps fallback,"
-  ;; ada-gps-size-threshold can be set in file-local variables, which
-  ;; are parsed after ada-mode-hook runs.
-  (ada-wisi-setup)
-  (add-hook 'hack-local-variables-hook 'ada-gps-post-local-vars nil t))
-
-(defun ada-gps-post-local-vars ()
-  "See `ada-gsp-or-wisi-setup'"
-  (setq hack-local-variables-hook (delq 'ada-gps-post-local-vars 
hack-local-variables-hook))
-
-  (if (> (point-max) ada-gps-size-threshold)
-      ;; use ada-gps for indent, ada-wisi for face, navigation
-      (ada-gps-setup)
-    ;; else use ada-wisi for primary indent, gps for fallback
-    (setq wisi-indent-region-fallback 'ada-gps-indent-region)
-    ))
-
-(provide 'ada-gps)
-
-(unless (locate-file ada-gps-indent-exec exec-path '("" ".exe"))
-  (error "%s not found on `exec-path'" ada-gps-indent-exec))
-
-(add-hook 'ada-mode-hook 'ada-gps-or-wisi-setup)
-(setq ada-mode-hook (delq 'ada-wisi-setup ada-mode-hook))
-
-;; end of file
diff --git a/packages/ada-mode/ada-indent-user-options.el 
b/packages/ada-mode/ada-indent-user-options.el
index 36c8cff..b4d309c 100644
--- a/packages/ada-mode/ada-indent-user-options.el
+++ b/packages/ada-mode/ada-indent-user-options.el
@@ -1,6 +1,6 @@
 ;; user options shared by Ada mode indentation engines  -*- lexical-binding:t 
-*-
 ;;
-;; Copyright (C) 2012, 2013, 2015, 2017, 2018  Free Software Foundation, Inc.
+;; Copyright (C) 2012, 2013, 2015, 2017 - 2019  Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;; Contributors: Simon Wright <address@hidden>
@@ -234,6 +234,14 @@ Otherwise, indent by `ada-indent-broken' relative to the 
start of the expression
   :safe #'booleanp)
 (make-variable-buffer-local 'ada-indent-hanging-rel-exp)
 
+(defcustom ada-indent-after-trailing-comment t
+ "If t, align comment lines imediately following a comment on the
+ same line as code with the preceding comment. Otherwise, ignore
+ the preceding comment."
+  :type 'boolean
+  :safe #'booleanp)
+(make-variable-buffer-local 'ada-indent-after-trailing-comment)
+
 (defcustom ada-end-name-optional nil
   "If t, names at ends of blocks/subprograms are optional (as in
 standard Ada). If nil, they are required; this helps in error
diff --git a/packages/ada-mode/ada-lalr-elisp.el 
b/packages/ada-mode/ada-lalr-elisp.el
index 30bd149..811b0d4 100644
--- a/packages/ada-mode/ada-lalr-elisp.el
+++ b/packages/ada-mode/ada-lalr-elisp.el
@@ -1,7 +1,7 @@
 ;;; ada-lalr-elisp.el --- Generated parser support file  -*- lexical-binding:t 
-*-
 ;;  command line: wisitoken-bnf-generate.exe  --generate LALR elisp elisp 
ada.wy
 
-;;  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+;;  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 ;;  This program is free software; you can redistribute it and/or
 ;;  modify it under the terms of the GNU General Public License as
@@ -168,23 +168,23 @@
        (()))
       (abstract_subprogram_declaration
        ((overriding_indicator_opt subprogram_specification IS ABSTRACT 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 statement-override 6 
statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 2 statement-override 6 
statement-end])
       (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 0 0]))))
       (accept_statement
        ((ACCEPT IDENTIFIER actual_parameter_part_opt parameter_profile_opt DO 
handled_sequence_of_statements END identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 motion 9 statement-end])
-      (wisi-containing-action 1 4) ;; for goto-declaration-start
-      (wisi-containing-action 1 6) ;; ""
-      (wisi-motion-action [1 5 [6 EXCEPTION WHEN] 9])
-      (wisi-face-apply-action [2 nil font-lock-function-name-face 8 nil 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 5 motion 9 statement-end])
+      (wisi-containing-action 1 4) ;; for goto-declaration-start
+      (wisi-containing-action 1 6) ;; ""
+      (wisi-motion-action [1 5 [6 EXCEPTION WHEN] 9])
+      (wisi-face-apply-action [2 nil font-lock-function-name-face 8 nil 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken [0 ada-indent] [ada-indent ada-indent] 0 0 0])))
        ((ACCEPT IDENTIFIER actual_parameter_part_opt parameter_profile_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
-      (wisi-containing-action 1 4) ;; for goto-declaration-start
-      (wisi-face-apply-action [2 nil font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
+      (wisi-containing-action 1 4) ;; for goto-declaration-start
+      (wisi-face-apply-action [2 nil font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0]))))
       (access_definition
        ((null_exclusion_opt ACCESS protected_opt PROCEDURE 
parameter_profile_opt )
@@ -205,7 +205,7 @@
        ((LEFT_PAREN expression_opt WITH NULL RECORD RIGHT_PAREN )
         (wisi-indent-action [0 (wisi-anchored 1 1) (wisi-anchored 1 1) 0 0 
(wisi-anchored 1 0)]))
        ((LEFT_PAREN expression_opt WITH association_list RIGHT_PAREN )
-        (wisi-indent-action [0 (wisi-anchored 1 1) (wisi-anchored 1 1) 
[(wisi-anchored 1 1) (wisi-anchored 1 1)]
+        (wisi-indent-action [0 (wisi-anchored 1 1) (wisi-anchored 1 1) 
[(wisi-anchored 1 1) (wisi-anchored 1 1)]
                          (wisi-anchored 1 0)]))
        ((LEFT_PAREN NULL RECORD RIGHT_PAREN ))
        ((LEFT_PAREN conditional_quantified_expression RIGHT_PAREN )
@@ -235,26 +235,26 @@
        (()))
       (assignment_statement
        ((name COLON_EQUAL expression_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 statement-end])
-      (wisi-containing-action 1 3)
-      (wisi-indent-action [0
-                           ada-indent-broken
-                           (wisi-hanging
-                            (wisi-anchored% 2 ada-indent-broken)
-                            (wisi-anchored% 3 ada-indent-broken))
+        (progn
+      (wisi-statement-action [1 statement-start 4 statement-end])
+      (wisi-containing-action 1 3)
+      (wisi-indent-action [0
+                           ada-indent-broken
+                           (wisi-hanging
+                            (wisi-anchored% 2 ada-indent-broken)
+                            (wisi-anchored% 3 ada-indent-broken))
                            0]))))
       (association_opt
        ((CHARACTER_LITERAL EQUAL_GREATER expression_opt )
-        (wisi-indent-action [0 ada-indent-broken
+        (wisi-indent-action [0 ada-indent-broken
                          [(wisi-anchored% 2 ada-indent-broken) (wisi-anchored% 
2 ada-indent-broken)]]))
        ((CHARACTER_LITERAL EQUAL_GREATER BOX ))
        ((discrete_choice_list EQUAL_GREATER expression_opt )
-        (wisi-indent-action [(wisi-hanging 0 ada-indent-broken)
-                         ada-indent-broken
-                         [(wisi-hanging%- (wisi-anchored% 2 ada-indent-broken)
-                            (wisi-anchored% 2 (* 2 ada-indent-broken)))
-                          (wisi-hanging%- (wisi-anchored% 2 ada-indent-broken)
+        (wisi-indent-action [(wisi-hanging 0 ada-indent-broken)
+                         ada-indent-broken
+                         [(wisi-hanging%- (wisi-anchored% 2 ada-indent-broken)
+                            (wisi-anchored% 2 (* 2 ada-indent-broken)))
+                          (wisi-hanging%- (wisi-anchored% 2 ada-indent-broken)
                             (wisi-anchored% 2 (* 2 ada-indent-broken)))]]))
        ((discrete_choice_list EQUAL_GREATER BOX )
         (wisi-indent-action [(wisi-hanging 0 ada-indent-broken) 
ada-indent-broken 0]))
@@ -266,11 +266,11 @@
        ((association_opt )))
       (asynchronous_select
        ((SELECT triggering_alternative THEN ABORT sequence_of_statements_opt 
END SELECT SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 8 statement-end])
-      (wisi-containing-action 1 2)
-      (wisi-containing-action 1 5)
-      (wisi-indent-action [[0 ada-indent] [ada-indent ada-indent] [0 
ada-indent-broken] ada-indent-broken
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 8 statement-end])
+      (wisi-containing-action 1 2)
+      (wisi-containing-action 1 5)
+      (wisi-indent-action [[0 ada-indent] [ada-indent ada-indent] [0 
ada-indent-broken] ada-indent-broken
                            [ada-indent ada-indent] 0 0 0]))))
       (at_clause
        ((FOR direct_name USE AT expression_opt SEMICOLON )
@@ -295,17 +295,17 @@
        (()))
       (block_statement
        ((block_label_opt DECLARE declarative_part_opt BEGIN 
handled_sequence_of_statements END identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 misc 4 motion 8 
statement-end])
-      (wisi-containing-action 2 3)
-      (wisi-containing-action 2 5)
-      (wisi-motion-action [2 4 [5 EXCEPTION WHEN] 8])
+        (progn
+      (wisi-statement-action [1 statement-start 2 misc 4 motion 8 
statement-end])
+      (wisi-containing-action 2 3)
+      (wisi-containing-action 2 5)
+      (wisi-motion-action [2 4 [5 EXCEPTION WHEN] 8])
       (wisi-indent-action [0 [0 ada-indent] [ada-indent ada-indent] [0 
ada-indent] [ada-indent ada-indent] 0 0 0])))
        ((block_label_opt BEGIN handled_sequence_of_statements END 
identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 misc 6 statement-end])
-      (wisi-containing-action 2 3)
-      (wisi-motion-action [2 [3 EXCEPTION WHEN] 6])
+        (progn
+      (wisi-statement-action [1 statement-start 2 misc 6 statement-end])
+      (wisi-containing-action 2 3)
+      (wisi-motion-action [2 [3 EXCEPTION WHEN] 6])
       (wisi-indent-action [0 [0 ada-indent] [ada-indent ada-indent] 0 0 0]))))
       (body_g
        ((proper_body ))
@@ -320,8 +320,8 @@
         (wisi-indent-action [0 ada-indent-broken 0 ada-indent-when])))
       (case_expression_alternative
        ((WHEN discrete_choice_list EQUAL_GREATER expression_opt )
-        (wisi-indent-action [0 ada-indent-broken ada-indent-broken
-                           (wisi-hanging (wisi-anchored% 1 ada-indent)
+        (wisi-indent-action [0 ada-indent-broken ada-indent-broken
+                           (wisi-hanging (wisi-anchored% 1 ada-indent)
                                          (wisi-anchored% 1 (+ ada-indent 
ada-indent-broken)))])))
       (case_expression_alternative_list
        ((case_expression_alternative_list COMMA case_expression_alternative )
@@ -329,16 +329,16 @@
        ((case_expression_alternative )))
       (case_statement
        ((CASE expression_opt IS case_statement_alternative_list END CASE 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 7 statement-end])
-      (wisi-containing-action 1 4)
-      (wisi-motion-action [1 [4 WHEN] 7])
-      (wisi-indent-action [0 ada-indent-broken [0 ada-indent-when] 
ada-indent-when 0 0 0]))))
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 7 statement-end])
+      (wisi-containing-action 1 4)
+      (wisi-motion-action [1 [4 WHEN] 7])
+      (wisi-indent-action [0 ada-indent-broken [0 ada-indent-when] 
[ada-indent-when ada-indent-when] 0 0 0]))))
       (case_statement_alternative
        ((WHEN discrete_choice_list EQUAL_GREATER sequence_of_statements_opt )
-        (progn
-      (wisi-statement-action [1 motion])
-      ;; ada-indent-when added in case_statement
+        (progn
+      (wisi-statement-action [1 motion])
+      ;; ada-indent-when added in case_statement
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken [ada-indent 
ada-indent]]))))
       (case_statement_alternative_list
        ((case_statement_alternative_list case_statement_alternative ))
@@ -346,31 +346,34 @@
       (compilation_unit
        ((with_clause ))
        ((subunit ))
-       ((PRIVATE declaration ))
+       ((PRIVATE declaration )
+        (wisi-indent-action [0 0]))
        ((declaration ))
        ((statement )))
       (compilation_unit_list
-       ((compilation_unit_list compilation_unit ))
-       ((compilation_unit )))
+       ((compilation_unit_list compilation_unit )
+        (wisi-indent-action [0 [0 0]]))
+       ((compilation_unit )
+        (wisi-indent-action [[0 0]])))
       (component_clause
        ((IDENTIFIER AT simple_expression RANGE simple_expression DOT_DOT 
simple_expression SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 8 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 8 statement-end])
       (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken 0]))))
       (component_clause_list
        ((component_clause_list component_clause ))
        ((component_clause )))
       (component_declaration
        ((identifier_list COLON component_definition COLON_EQUAL expression_opt 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-containing-action 1 3) ;; for goto-declaration-start
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken (wisi-anchored% 4 ada-indent-broken)
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-containing-action 1 3) ;; for goto-declaration-start
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken (wisi-anchored% 4 ada-indent-broken)
                              ada-indent-broken 0])))
        ((identifier_list COLON component_definition aspect_specification_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
-      (wisi-containing-action 1 3) ;; for goto-declaration-start
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
+      (wisi-containing-action 1 3) ;; for goto-declaration-start
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0]))))
       (component_definition
        ((ALIASED subtype_indication ))
@@ -400,10 +403,10 @@
        ((select_statement )))
       (conditional_entry_call
        ((SELECT entry_call_alternative ELSE sequence_of_statements_opt END 
SELECT SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 7 statement-end])
-      (wisi-containing-action 1 2)
-      (wisi-containing-action 1 4)
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 7 statement-end])
+      (wisi-containing-action 1 2)
+      (wisi-containing-action 1 4)
       (wisi-indent-action [[0 ada-indent] [ada-indent ada-indent] [0 
ada-indent] [ada-indent ada-indent] 0 0 0]))))
       (conditional_quantified_expression
        ((if_expression ))
@@ -429,10 +432,10 @@
        ((generic_instantiation ))
        ((null_procedure_declaration ))
        ((identifier_list COLON CONSTANT COLON_EQUAL expression_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 6 statement-end])
-      (wisi-containing-action 1 5)
-      (wisi-indent-action [(wisi-hanging 0 ada-indent-broken) 
ada-indent-broken ada-indent-broken ada-indent-broken
+        (progn
+      (wisi-statement-action [1 statement-start 6 statement-end])
+      (wisi-containing-action 1 5)
+      (wisi-indent-action [(wisi-hanging 0 ada-indent-broken) 
ada-indent-broken ada-indent-broken ada-indent-broken
                            (wisi-anchored% 4 ada-indent-broken) 0])))
        ((object_declaration ))
        ((package_declaration ))
@@ -453,12 +456,12 @@
        ((delay_statement sequence_of_statements_opt )))
       (delay_statement
        ((DELAY UNTIL expression_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 4 statement-end])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 0])))
        ((DELAY expression_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 3 statement-end])
       (wisi-indent-action [0 ada-indent-broken 0]))))
       (derived_type_definition
        ((abstract_limited_opt NEW name and_interface_list_opt WITH 
record_definition )
@@ -502,44 +505,44 @@
        ((discriminant_specification_opt )))
       (elsif_expression_item
        ((ELSIF expression_opt THEN expression_opt )
-        (progn
-      (wisi-statement-action [1 motion 3 motion])
-      (wisi-indent-action [0 ada-indent-broken 0 ada-indent]))))
+        (progn
+      (wisi-statement-action [1 motion 3 motion])
+      (wisi-indent-action [0 [ada-indent-broken ada-indent-broken] 0 
ada-indent]))))
       (elsif_expression_list
        ((elsif_expression_list elsif_expression_item ))
        ((elsif_expression_item )))
       (elsif_statement_item
        ((ELSIF expression_opt THEN sequence_of_statements_opt )
-        (progn
-      (wisi-statement-action [1 motion 3 motion])
-      (wisi-indent-action [0 ada-indent-broken 0 [ada-indent ada-indent]]))))
+        (progn
+      (wisi-statement-action [1 motion 3 motion])
+      (wisi-indent-action [0 [ada-indent-broken ada-indent-broken] 0 
[ada-indent ada-indent]]))))
       (elsif_statement_list
        ((elsif_statement_list elsif_statement_item ))
        ((elsif_statement_item )))
       (entry_body
        ((ENTRY IDENTIFIER entry_body_formal_part WHEN expression_opt IS 
declarative_part_opt BEGIN handled_sequence_of_statements END identifier_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name 4 motion 6 motion 8 
motion 12 statement-end])
-      (wisi-containing-action 1 3) ;; for goto-declaration-start
-      (wisi-containing-action 1 7)
-      (wisi-containing-action 1 9)
-      (wisi-motion-action [1 4 6 8 12])
-      (wisi-face-apply-action [2 nil font-lock-function-name-face 11 nil 
font-lock-function-name-face])
-
-      ;; test/ada_mode-nominal.adb
-      ;; entry E2
-      ;;   (X : Integer)
-      ;;   when Local_1 = 0 and not
-      ;;     (Local_2 = 1)
-      ;;
-      ;; entry E3
-      ;;   (X : Integer) when Local_1 = 0 and not
-      ;;     (Local_2 = 1)
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken (wisi-anchored% 4 ada-indent-broken)
+        (progn
+      (wisi-statement-action [1 statement-start 2 name 4 motion 6 motion 8 
motion 12 statement-end])
+      (wisi-containing-action 1 3) ;; for goto-declaration-start
+      (wisi-containing-action 1 7)
+      (wisi-containing-action 1 9)
+      (wisi-motion-action [1 4 6 8 12])
+      (wisi-face-apply-action [2 nil font-lock-function-name-face 11 nil 
font-lock-function-name-face])
+
+      ;; test/ada_mode-nominal.adb
+      ;; entry E2
+      ;;   (X : Integer)
+      ;;   when Local_1 = 0 and not
+      ;;     (Local_2 = 1)
+      ;;
+      ;; entry E3
+      ;;   (X : Integer) when Local_1 = 0 and not
+      ;;     (Local_2 = 1)
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken (wisi-anchored% 4 ada-indent-broken)
                              0 [ada-indent ada-indent] 0 [ada-indent 
ada-indent] 0 0 0]))))
       (entry_body_formal_part
        ((LEFT_PAREN FOR IDENTIFIER IN discrete_subtype_definition RIGHT_PAREN 
parameter_profile_opt )
-        (wisi-indent-action [0 (wisi-anchored 1 1) (wisi-anchored 1 1) 
(wisi-anchored 1 1) (wisi-anchored 1 1)
+        (wisi-indent-action [0 (wisi-anchored 1 1) (wisi-anchored 1 1) 
(wisi-anchored 1 1) (wisi-anchored 1 1)
                            (wisi-anchored 1 0) ada-indent-broken]))
        ((parameter_profile_opt )))
       (entry_call_alternative
@@ -547,17 +550,17 @@
        ((name sequence_of_statements_opt )))
       (entry_declaration
        ((overriding_indicator_opt ENTRY IDENTIFIER LEFT_PAREN 
discrete_subtype_definition RIGHT_PAREN parameter_profile_opt 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 motion 3 name 8 
statement-end])
-      (wisi-containing-action 2 7) ;; for goto-declaration-start
-      (wisi-face-apply-action [3 nil font-lock-function-name-face])
-      (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
(wisi-anchored 4 1) (wisi-anchored 4 0)
+        (progn
+      (wisi-statement-action [1 statement-start 2 motion 3 name 8 
statement-end])
+      (wisi-containing-action 2 7) ;; for goto-declaration-start
+      (wisi-face-apply-action [3 nil font-lock-function-name-face])
+      (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
(wisi-anchored 4 1) (wisi-anchored 4 0)
                              ada-indent-broken 0 0])))
        ((overriding_indicator_opt ENTRY IDENTIFIER parameter_profile_opt 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 motion 3 name 6 
statement-end])
-      (wisi-containing-action 2 4) ;; for goto-declaration-start
-      (wisi-face-apply-action [3 nil font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 motion 3 name 6 
statement-end])
+      (wisi-containing-action 2 4) ;; for goto-declaration-start
+      (wisi-face-apply-action [3 nil font-lock-function-name-face])
       (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0]))))
       (enumeration_literal
        ((IDENTIFIER ))
@@ -567,9 +570,9 @@
        ((enumeration_literal )))
       (enumeration_representation_clause
        ((FOR name USE aggregate SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
-      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
+      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0]))))
       (enumeration_type_definition
        ((LEFT_PAREN enumeration_literal_list RIGHT_PAREN )
@@ -585,13 +588,13 @@
         (wisi-statement-action [1 statement-start 4 statement-end])))
       (exception_handler
        ((WHEN IDENTIFIER COLON exception_choice_list EQUAL_GREATER 
sequence_of_statements_opt )
-        (progn
-      (wisi-statement-action [1 motion])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
+        (progn
+      (wisi-statement-action [1 motion])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
                              [ada-indent ada-indent]])))
        ((WHEN exception_choice_list EQUAL_GREATER sequence_of_statements_opt )
-        (progn
-      (wisi-statement-action [1 motion])
+        (progn
+      (wisi-statement-action [1 motion])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken [ada-indent 
ada-indent]]))))
       (exception_handler_list
        ((exception_handler_list exception_handler ))
@@ -602,8 +605,8 @@
        (()))
       (exit_statement
        ((EXIT identifier_opt WHEN expression_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
       (wisi-indent-action [0 0 0 ada-indent-broken 0])))
        ((EXIT identifier_opt SEMICOLON )
         (wisi-statement-action [1 statement-start 3 statement-end])))
@@ -619,12 +622,12 @@
        (()))
       (expression_function_declaration
        ((overriding_indicator_opt function_specification IS paren_expression 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 statement-override 6 
statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 2 statement-override 6 
statement-end])
       (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 0 0]))))
       (extended_return_object_declaration
        ((IDENTIFIER COLON aliased_opt constant_opt return_subtype_indication 
COLON_EQUAL expression_opt )
-        (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
+        (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
                            (wisi-anchored% 6 ada-indent-broken)]))
        ((IDENTIFIER COLON aliased_opt constant_opt return_subtype_indication )
         (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
ada-indent-broken])))
@@ -633,13 +636,13 @@
        (()))
       (extended_return_statement
        ((RETURN extended_return_object_declaration_opt DO 
handled_sequence_of_statements END RETURN SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 7 statement-end])
-      (wisi-containing-action 1 4)
-      (wisi-motion-action [1 3 7])
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 7 statement-end])
+      (wisi-containing-action 1 4)
+      (wisi-motion-action [1 3 7])
       (wisi-indent-action [[0 ada-indent] ada-indent-broken [0 ada-indent] 
[ada-indent ada-indent] 0 0 0])))
        ((RETURN extended_return_object_declaration SEMICOLON )
-        (progn
+        (progn
       (wisi-statement-action [1 statement-start 3 statement-end]))))
       (factor
        ((primary STAR_STAR primary ))
@@ -648,64 +651,64 @@
        ((NOT primary )))
       (formal_object_declaration
        ((identifier_list COLON mode_opt null_exclusion_opt name COLON_EQUAL 
expression_opt aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 9 statement-end])
-      (wisi-face-apply-action [5 font-lock-function-name-face 
font-lock-type-face])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken
+        (progn
+      (wisi-statement-action [1 statement-start 9 statement-end])
+      (wisi-face-apply-action [5 font-lock-function-name-face 
font-lock-type-face])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken
                              (wisi-anchored% 6 ada-indent-broken) 
ada-indent-broken 0])))
        ((identifier_list COLON mode_opt access_definition COLON_EQUAL 
expression_opt aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 8 statement-end])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
+        (progn
+      (wisi-statement-action [1 statement-start 8 statement-end])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
                              (wisi-anchored% 5 ada-indent-broken) 
ada-indent-broken 0])))
        ((identifier_list COLON mode_opt null_exclusion_opt name 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-face-apply-action [5 font-lock-function-name-face 
font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-face-apply-action [5 font-lock-function-name-face 
font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken 0])))
        ((identifier_list COLON mode_opt access_definition 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 6 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 6 statement-end])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken 0]))))
       (formal_part
        ((LEFT_PAREN parameter_specification_list RIGHT_PAREN )
-        (progn
-      (wisi-statement-action [1 misc]) ;; for ada-wisi-in-paramlist-p
+        (progn
+      (wisi-statement-action [1 misc]) ;; for ada-wisi-in-paramlist-p
       (wisi-indent-action [0 (wisi-anchored 1 1) (wisi-anchored 1 0)]))))
       (formal_subprogram_declaration
        ((WITH subprogram_specification IS ABSTRACT subprogram_default 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
       (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken 0])))
        ((WITH subprogram_specification IS subprogram_default 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 6 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 6 statement-end])
       (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0])))
        ((WITH subprogram_specification IS ABSTRACT aspect_specification_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 6 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 6 statement-end])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken 0])))
        ((WITH subprogram_specification aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 4 statement-end])
       (wisi-indent-action [0 0 ada-indent-broken 0]))))
       (formal_type_declaration
        ((TYPE IDENTIFIER discriminant_part_opt IS formal_type_definition 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-containing-action 1 5) ;; for goto-declaration-start
-      (wisi-face-apply-action [2 nil font-lock-type-face])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-containing-action 1 5) ;; for goto-declaration-start
+      (wisi-face-apply-action [2 nil font-lock-type-face])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken
                              ada-indent-broken ada-indent-broken 0])))
        ((TYPE IDENTIFIER discriminant_part_opt IS TAGGED 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken 0])))
        ((TYPE IDENTIFIER discriminant_part_opt aspect_specification_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0]))))
       (formal_type_definition
        ((abstract_tagged_limited_opt PRIVATE ))
@@ -726,34 +729,34 @@
         (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-type-face])))
       (formal_package_declaration
        ((WITH PACKAGE name IS NEW name formal_package_actual_part 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 9 statement-end])
-      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
-                                 6 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 9 statement-end])
+      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
+                                 6 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken ada-indent-broken 
ada-indent-broken 0]))))
       (formal_package_actual_part
        ((LEFT_PAREN BOX RIGHT_PAREN ))
        (()))
       (full_type_declaration
        ((TYPE IDENTIFIER discriminant_part_opt IS type_definition 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name 7 statement-end])
-      (wisi-containing-action 1 5) ;; for goto-declaration-start
-      (wisi-face-apply-action [2 nil font-lock-type-face])
-
-      ;; FIXME: indentation of comment after 'is' (and 'with' in
-      ;; derived_type_definition) should be ada-indent-record-rel-type
-      ;; if type_definition is a record. Worse if
-      ;; ada-indent-comment-gnat is t. Need 'anchor to next line'.
+        (progn
+      (wisi-statement-action [1 statement-start 2 name 7 statement-end])
+      (wisi-containing-action 1 5) ;; for goto-declaration-start
+      (wisi-face-apply-action [2 nil font-lock-type-face])
+
+      ;; FIXME: indentation of comment after 'is' (and 'with' in
+      ;; derived_type_definition) should be ada-indent-record-rel-type
+      ;; if type_definition is a record. Worse if
+      ;; ada-indent-comment-gnat is t. Need 'anchor to next line'.
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
[ada-indent-broken ada-indent-broken] ada-indent-broken 0 0])))
        ((task_type_declaration ))
        ((protected_type_declaration )))
       (function_specification
        ((FUNCTION name parameter_and_result_profile )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name])
-      (wisi-containing-action 1 3) ;; for goto-declaration-start
-      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 name])
+      (wisi-containing-action 1 3) ;; for goto-declaration-start
+      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken]))))
       (general_access_modifier_opt
        ((ALL ))
@@ -764,8 +767,8 @@
        ((generic_package_declaration )))
       (generic_formal_part
        ((GENERIC generic_formal_parameter_declarations )
-        (progn
-      (wisi-statement-action [1 statement-start])
+        (progn
+      (wisi-statement-action [1 statement-start])
       (wisi-indent-action [0 ada-indent])))
        ((GENERIC )
         (wisi-statement-action [1 statement-start])))
@@ -781,63 +784,65 @@
        ((use_clause )))
       (generic_instantiation
        ((PACKAGE name IS NEW name aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name 7 statement-end])
-      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face
-                                 5 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 name 7 statement-end])
+      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face
+                                 5 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken 0 ada-indent-broken 
ada-indent-broken ada-indent-broken 0])))
        ((overriding_indicator_opt PROCEDURE name IS NEW name 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 motion 3 name 8 
statement-end])
-      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
-                                 6 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 motion 3 name 8 
statement-end])
+      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
+                                 6 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken 0])))
        ((overriding_indicator_opt FUNCTION name IS NEW name 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 motion 3 name 8 
statement-end])
-      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
-                                 6 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 motion 3 name 8 
statement-end])
+      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
+                                 6 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 0 ada-indent-broken 0 ada-indent-broken 
ada-indent-broken ada-indent-broken 0]))))
       (generic_package_declaration
        ((generic_formal_part package_specification SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 motion 3 statement-end])
-      (wisi-motion-action [1 2 3])
+        (progn
+      (wisi-statement-action [1 statement-start 2 motion 3 statement-end])
+      (wisi-motion-action [1 2 3])
       (wisi-indent-action [[0 ada-indent] 0 0]))))
       (generic_renaming_declaration
        ((GENERIC PACKAGE name RENAMES name aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
-                                 5 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
+                                 5 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken 0])))
        ((GENERIC PROCEDURE name RENAMES name aspect_specification_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
-                                 5 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
+                                 5 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 0 ada-indent-broken (ada-indent-renames 3) 
ada-indent-broken ada-indent-broken 0])))
        ((GENERIC FUNCTION name RENAMES name aspect_specification_opt SEMICOLON 
)
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
-                                 5 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
+                                 5 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 0 ada-indent-broken (ada-indent-renames 3) 
ada-indent-broken ada-indent-broken 0]))))
       (generic_subprogram_declaration
        ((generic_formal_part subprogram_specification aspect_specification_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 motion 4 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 2 motion 4 statement-end])
       (wisi-motion-action [1 2 4]))))
       (goto_label
        ((LESS_LESS IDENTIFIER GREATER_GREATER )
-        (progn
-      (wisi-face-apply-action [2 nil font-lock-constant-face])
+        (progn
+      (wisi-face-apply-action [2 nil font-lock-constant-face])
       (wisi-indent-action [[ada-indent-label 0] 0 0]))))
       (handled_sequence_of_statements
        ((sequence_of_statements_opt EXCEPTION exception_handler_list_opt )
-        (progn
-      (wisi-statement-action [2 motion])
-      (wisi-indent-action [[0 0] (- ada-indent) (- ada-indent-when 
ada-indent)])))
+        (progn
+      (wisi-statement-action [2 motion])
+      (wisi-indent-action [[0 0]
+                           (- ada-indent)
+                           [(- ada-indent-when ada-indent) (- ada-indent-when 
ada-indent)]])))
        ((sequence_of_statements_opt )))
       (identifier_list
        ((identifier_list COMMA IDENTIFIER )
@@ -848,78 +853,86 @@
        (()))
       (if_expression
        ((IF expression_opt THEN expression_opt elsif_expression_list ELSE 
expression_opt )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 6 motion])
-      (wisi-containing-action 1 2)
-      (wisi-motion-action [1 3 [5 ELSIF THEN] 6])
-      (wisi-indent-action [0 ada-indent-broken 0 ada-indent 0 0 ada-indent])))
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 6 motion])
+      (wisi-containing-action 1 2)
+      (wisi-motion-action [1 3 [5 ELSIF THEN] 6])
+      (wisi-indent-action [0 [ada-indent-broken ada-indent-broken] 0 
ada-indent 0 0 ada-indent])))
        ((IF expression_opt THEN expression_opt ELSE expression_opt )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 5 motion])
-      (wisi-containing-action 1 2)
-      (wisi-motion-action [1 3 5])
-      (wisi-indent-action [0 ada-indent-broken 0 ada-indent 0 ada-indent])))
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 5 motion])
+      (wisi-containing-action 1 2)
+      (wisi-motion-action [1 3 5])
+      (wisi-indent-action [0 [ada-indent-broken ada-indent-broken] 0 
ada-indent 0 ada-indent])))
        ((IF expression_opt THEN expression_opt elsif_expression_list )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion])
-      (wisi-containing-action 1 2)
-      (wisi-motion-action [1 3 [5 ELSIF THEN]])
-      (wisi-indent-action [0 ada-indent-broken 0 ada-indent 0])))
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion])
+      (wisi-containing-action 1 2)
+      (wisi-motion-action [1 3 [5 ELSIF THEN]])
+      (wisi-indent-action [0 [ada-indent-broken ada-indent-broken] 0 
ada-indent 0])))
        ((IF expression_opt THEN expression_opt )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion])
-      (wisi-containing-action 1 2)
-      (wisi-motion-action [1 3])
-      (wisi-indent-action [0 ada-indent-broken 0 ada-indent]))))
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion])
+      (wisi-containing-action 1 2)
+      (wisi-motion-action [1 3])
+      (wisi-indent-action [0 [ada-indent-broken ada-indent-broken] 0 
ada-indent]))))
       (if_statement
        ((IF expression_opt THEN sequence_of_statements_opt 
elsif_statement_list ELSE sequence_of_statements_opt END IF SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 6 motion 10 
statement-end])
-      (wisi-containing-action 1 2)
-      (wisi-containing-action 1 4)
-      (wisi-containing-action 1 5)
-      (wisi-containing-action 1 7)
-      (wisi-motion-action [1 3 [5 ELSIF THEN] 6 10])
-      (wisi-indent-action [0 (wisi-hanging% ada-indent-broken (* 2 
ada-indent-broken)) [0 ada-indent]
-                             [ada-indent ada-indent] 0 [0 ada-indent]
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 6 motion 10 
statement-end])
+      (wisi-containing-action 1 2)
+      (wisi-containing-action 1 4)
+      (wisi-containing-action 1 5)
+      (wisi-containing-action 1 7)
+      (wisi-motion-action [1 3 [5 ELSIF THEN] 6 10])
+      (wisi-indent-action [0 [(wisi-hanging% ada-indent-broken (* 2 
ada-indent-broken))
+                              ada-indent-broken]
+                             [0 ada-indent]
+                             [ada-indent ada-indent] 0 [0 ada-indent]
                              [ada-indent ada-indent] 0 0 0])))
        ((IF expression_opt THEN sequence_of_statements_opt ELSE 
sequence_of_statements_opt END IF SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 5 motion 9 
statement-end])
-      (wisi-containing-action 1 2)
-      (wisi-containing-action 1 4)
-      (wisi-containing-action 1 6)
-      (wisi-motion-action [1 3 5 9])
-      (wisi-indent-action [0 (wisi-hanging% ada-indent-broken (* 2 
ada-indent-broken)) [0 ada-indent]
-                             [ada-indent ada-indent] [0 ada-indent]
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 5 motion 9 
statement-end])
+      (wisi-containing-action 1 2)
+      (wisi-containing-action 1 4)
+      (wisi-containing-action 1 6)
+      (wisi-motion-action [1 3 5 9])
+      (wisi-indent-action [0 [(wisi-hanging% ada-indent-broken (* 2 
ada-indent-broken))
+                              ada-indent-broken]
+                             [0 ada-indent]
+                             [ada-indent ada-indent] [0 ada-indent]
                              [ada-indent ada-indent] 0 0 0])))
        ((IF expression_opt THEN sequence_of_statements_opt 
elsif_statement_list END IF SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 8 statement-end])
-      (wisi-containing-action 1 2)
-      (wisi-containing-action 1 4)
-      (wisi-containing-action 1 5)
-      (wisi-motion-action [1 3 [5 ELSIF THEN] 8])
-      (wisi-indent-action [0 (wisi-hanging% ada-indent-broken (* 2 
ada-indent-broken)) [0 ada-indent]
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 8 statement-end])
+      (wisi-containing-action 1 2)
+      (wisi-containing-action 1 4)
+      (wisi-containing-action 1 5)
+      (wisi-motion-action [1 3 [5 ELSIF THEN] 8])
+      (wisi-indent-action [0 [(wisi-hanging% ada-indent-broken (* 2 
ada-indent-broken))
+                              ada-indent-broken]
+                             [0 ada-indent]
                              [ada-indent ada-indent] 0 0 0 0])))
        ((IF expression_opt THEN sequence_of_statements_opt END IF SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 7 statement-end])
-      (wisi-containing-action 1 2)
-      (wisi-containing-action 1 4)
-      (wisi-motion-action [1 3 7])
-      (wisi-indent-action [0 (wisi-hanging% ada-indent-broken (* 2 
ada-indent-broken)) [0 ada-indent]
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 7 statement-end])
+      (wisi-containing-action 1 2)
+      (wisi-containing-action 1 4)
+      (wisi-motion-action [1 3 7])
+      (wisi-indent-action [0 [(wisi-hanging% ada-indent-broken (* 2 
ada-indent-broken))
+                              ada-indent-broken]
+                             [0 ada-indent]
                              [ada-indent ada-indent] 0 0 0]))))
       (incomplete_type_declaration
        ((TYPE IDENTIFIER discriminant_part_opt IS TAGGED SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 6 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 6 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken 0])))
        ((TYPE IDENTIFIER discriminant_part_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 3 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 0]))))
       (index_constraint
        ((LEFT_PAREN discrete_subtype_definition_list RIGHT_PAREN )
@@ -963,15 +976,15 @@
        (()))
       (loop_statement
        ((block_label_opt iteration_scheme LOOP sequence_of_statements_opt END 
LOOP identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 misc 3 motion 8 
statement-end])
-      (wisi-containing-action 2 4)
-      (wisi-motion-action [2 3 8])
+        (progn
+      (wisi-statement-action [1 statement-start 2 misc 3 motion 8 
statement-end])
+      (wisi-containing-action 2 4)
+      (wisi-motion-action [2 3 8])
       (wisi-indent-action [0 0 [0 ada-indent] [ada-indent ada-indent] 0 0 0 
0])))
        ((block_label_opt LOOP sequence_of_statements_opt END LOOP 
identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 misc 7 statement-end])
-      (wisi-containing-action 2 3)
+        (progn
+      (wisi-statement-action [1 statement-start 2 misc 7 statement-end])
+      (wisi-containing-action 2 3)
       (wisi-indent-action [0 [0 ada-indent] [ada-indent ada-indent] 0 0 0 
0]))))
       (membership_choice_list
        ((membership_choice_list BAR membership_choice ))
@@ -997,17 +1010,17 @@
        ((name )))
       (name
        ((name LEFT_PAREN range_list RIGHT_PAREN )
-        (wisi-indent-action [0
-                         (wisi-anchored% 1 ada-indent-broken)
-                         (wisi-hanging (wisi-anchored 2 1)
-                                       (wisi-anchored 2 (+ 1 
ada-indent-broken)))
+        (wisi-indent-action [0
+                         (wisi-anchored% 1 ada-indent-broken)
+                         (wisi-hanging (wisi-anchored 2 1)
+                                       (wisi-anchored 2 (+ 1 
ada-indent-broken)))
                          (wisi-anchored 2 0)]))
        ((name actual_parameter_part )
-        (progn
-      (wisi-statement-action [1 misc])
-      (wisi-containing-action 1 2)
-      (wisi-indent-action [0 (if ada-indent-hanging-rel-exp
-                                 (wisi-anchored 1 ada-indent-broken)
+        (progn
+      (wisi-statement-action [1 misc])
+      (wisi-containing-action 1 2)
+      (wisi-indent-action [0 (if ada-indent-hanging-rel-exp
+                                 (wisi-anchored 1 ada-indent-broken)
                                (wisi-anchored% 1 ada-indent-broken))])))
        ((selected_component ))
        ((attribute_reference ))
@@ -1033,59 +1046,59 @@
         (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-type-face])))
       (null_procedure_declaration
        ((overriding_indicator_opt procedure_specification IS NULL 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 statement-override 6 
statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 2 statement-override 6 
statement-end])
       (wisi-indent-action [0 0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0]))))
       (object_declaration
        ((identifier_list COLON aliased_opt constant_opt subtype_indication 
COLON_EQUAL expression_opt aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 9 statement-end])
-      (wisi-containing-action 1 7)
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken
+        (progn
+      (wisi-statement-action [1 statement-start 9 statement-end])
+      (wisi-containing-action 1 7)
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken
                              (wisi-anchored%- 6 ada-indent-broken) 
ada-indent-broken 0])))
        ((identifier_list COLON aliased_opt constant_opt access_definition 
COLON_EQUAL expression_opt aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 9 statement-end])
-      (wisi-containing-action 1 5) ;; for goto-declaration-start
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken
+        (progn
+      (wisi-statement-action [1 statement-start 9 statement-end])
+      (wisi-containing-action 1 5) ;; for goto-declaration-start
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken
                              (wisi-anchored% 6 ada-indent-broken) 
ada-indent-broken 0])))
        ((identifier_list COLON aliased_opt constant_opt array_type_definition 
COLON_EQUAL expression_opt aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 9 statement-end])
-      (wisi-containing-action 1 5) ;; for goto-declaration-start
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken
+        (progn
+      (wisi-statement-action [1 statement-start 9 statement-end])
+      (wisi-containing-action 1 5) ;; for goto-declaration-start
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken
                              (wisi-anchored% 6 ada-indent-broken) 
ada-indent-broken 0])))
        ((identifier_list COLON aliased_opt constant_opt subtype_indication 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken 0])))
        ((identifier_list COLON aliased_opt constant_opt access_definition 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-containing-action 1 5) ;; for goto-declaration-start
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-containing-action 1 5) ;; for goto-declaration-start
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken 0])))
        ((identifier_list COLON aliased_opt constant_opt array_type_definition 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-containing-action 1 5) ;; for goto-declaration-start
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-containing-action 1 5) ;; for goto-declaration-start
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken 0])))
        ((single_task_declaration ))
        ((single_protected_declaration )))
       (object_renaming_declaration
        ((IDENTIFIER COLON null_exclusion_opt name RENAMES name 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 8 statement-end])
-      (wisi-face-apply-action [4 font-lock-function-name-face 
font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 8 statement-end])
+      (wisi-face-apply-action [4 font-lock-function-name-face 
font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken ada-indent-broken 0])))
        ((IDENTIFIER COLON access_definition RENAMES name 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-containing-action 1 3) ;; for goto-declaration-start
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-containing-action 1 3) ;; for goto-declaration-start
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken 0])))
        ((IDENTIFIER COLON EXCEPTION RENAMES name aspect_specification_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-face-apply-action [5 font-lock-function-name-face nil])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-face-apply-action [5 font-lock-function-name-face nil])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken 0]))))
       (overriding_indicator_opt
        ((NOT OVERRIDING )
@@ -1095,60 +1108,60 @@
        (()))
       (package_body
        ((PACKAGE BODY name aspect_specification_opt IS declarative_part_opt 
BEGIN handled_sequence_of_statements END name_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 name 5 motion 7 motion 11 
statement-end])
-      (wisi-containing-action 1 6)
-      (wisi-containing-action 1 8)
-      (wisi-motion-action [1 5 7 [8 EXCEPTION WHEN] 11])
-      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
-                                 10 font-lock-function-name-face 
font-lock-function-name-face])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 0 0 
[ada-indent ada-indent]
+        (progn
+      (wisi-statement-action [1 statement-start 3 name 5 motion 7 motion 11 
statement-end])
+      (wisi-containing-action 1 6)
+      (wisi-containing-action 1 8)
+      (wisi-motion-action [1 5 7 [8 EXCEPTION WHEN] 11])
+      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
+                                 10 font-lock-function-name-face 
font-lock-function-name-face])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 0 0 
[ada-indent ada-indent]
                              0 [ada-indent ada-indent] 0 ada-indent-broken 
0])))
        ((PACKAGE BODY name aspect_specification_opt IS declarative_part_opt 
END name_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 name 5 motion 9 
statement-end])
-      (wisi-containing-action 1 6)
-      (wisi-motion-action [1 5 9])
-      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
-                                 8 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 3 name 5 motion 9 
statement-end])
+      (wisi-containing-action 1 6)
+      (wisi-motion-action [1 5 9])
+      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face
+                                 8 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0 [ada-indent ada-indent] 0 0 0]))))
       (package_body_stub
        ((PACKAGE BODY name IS SEPARATE aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 0 
ada-indent-broken ada-indent-broken 0]))))
       (package_declaration
        ((package_specification SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 2 statement-end])
       (wisi-motion-action [[1 PRIVATE] 2]))))
       (package_renaming_declaration
        ((PACKAGE name RENAMES name aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 6 statement-end])
-      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face
-                                 4 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 6 statement-end])
+      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face
+                                 4 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken 0]))))
       (package_specification
        ((PACKAGE name aspect_specification_opt IS declarative_part_opt PRIVATE 
declarative_part_opt END name_opt )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name 4 motion 6 motion])
-      (wisi-containing-action 1 4)
-      (wisi-containing-action 4 5) ;; for goto-declarative-region-start
-      (wisi-containing-action 1 7)
-      (wisi-motion-action [1 4 6])
-      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face
-                                 9 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 name 4 motion 6 motion])
+      (wisi-containing-action 1 4)
+      (wisi-containing-action 4 5) ;; for goto-declarative-region-start
+      (wisi-containing-action 1 7)
+      (wisi-motion-action [1 4 6])
+      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face
+                                 9 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken 0 0 [ada-indent ada-indent] 0 
[ada-indent ada-indent] 0 0])))
        ((PACKAGE name aspect_specification_opt IS declarative_part_opt END 
name_opt )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name 4 motion])
-      (wisi-containing-action 1 4)
-      (wisi-containing-action 4 5) ;; for goto-declarative-region-start
-      (wisi-motion-action [1 4])
-      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face
-                                 7 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 name 4 motion])
+      (wisi-containing-action 1 4)
+      (wisi-containing-action 4 5) ;; for goto-declarative-region-start
+      (wisi-motion-action [1 4])
+      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face
+                                 7 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 0 [ada-indent 
ada-indent] 0 0]))))
       (parameter_and_result_profile
        ((formal_part result_profile )
@@ -1159,17 +1172,17 @@
        (()))
       (parameter_specification
        ((identifier_list COLON aliased_opt mode_opt null_exclusion_opt name 
COLON_EQUAL expression_opt )
-        (progn
-      (wisi-face-apply-action [6 font-lock-function-name-face 
font-lock-type-face])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
+        (progn
+      (wisi-face-apply-action [6 font-lock-function-name-face 
font-lock-type-face])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
                              ada-indent-broken ada-indent-broken 
(wisi-anchored% 7 ada-indent-broken)])))
        ((identifier_list COLON aliased_opt mode_opt null_exclusion_opt name )
-        (progn
-      (wisi-face-apply-action [6 font-lock-function-name-face 
font-lock-type-face])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
+        (progn
+      (wisi-face-apply-action [6 font-lock-function-name-face 
font-lock-type-face])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
                              ada-indent-broken])))
        ((identifier_list COLON aliased_opt access_definition COLON_EQUAL 
expression_opt )
-        (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
+        (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken
                            (wisi-anchored% 5 ada-indent-broken)]))
        ((identifier_list COLON aliased_opt access_definition )
         (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken]))
@@ -1180,9 +1193,9 @@
        ((parameter_specification )))
       (paren_expression
        ((LEFT_PAREN expression_opt RIGHT_PAREN )
-        (wisi-indent-action [0
-                         (wisi-hanging (wisi-anchored 1 1)
-                                       (wisi-anchored 1 (+ 1 
ada-indent-broken)))
+        (wisi-indent-action [0
+                         (wisi-hanging (wisi-anchored 1 1)
+                                       (wisi-anchored 1 (+ 1 
ada-indent-broken)))
                          (wisi-anchored 1 0)]))
        ((LEFT_PAREN association_list RIGHT_PAREN )
         (wisi-indent-action [0 (wisi-anchored 1 1) (wisi-anchored 1 0)]))
@@ -1190,19 +1203,19 @@
         (wisi-indent-action [0 (wisi-anchored 1 1) (wisi-anchored 1 0)])))
       (pragma_g
        ((PRAGMA IDENTIFIER LEFT_PAREN association_list RIGHT_PAREN SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 6 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 6 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
(wisi-anchored 3 1) (wisi-anchored 3 0) 0])))
        ((PRAGMA IDENTIFIER LEFT_PAREN conditional_quantified_expression 
RIGHT_PAREN SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 6 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 6 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
(wisi-anchored 3 1) (wisi-anchored 3 0) 0])))
        ((PRAGMA IDENTIFIER SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 3 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken 0]))))
       (primary
        ((NUMERIC_LITERAL )
@@ -1215,28 +1228,28 @@
         (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-type-face])))
       (private_extension_declaration
        ((TYPE IDENTIFIER discriminant_part_opt IS 
abstract_limited_synchronized_opt NEW subtype_indication and_interface_list_opt 
WITH PRIVATE aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name 12 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-type-face])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken
+        (progn
+      (wisi-statement-action [1 statement-start 2 name 12 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-type-face])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken
                              ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken 0 0]))))
       (private_type_declaration
        ((TYPE IDENTIFIER discriminant_part_opt IS abstract_tagged_limited_opt 
PRIVATE aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name 8 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 name 8 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 0 
ada-indent-broken ada-indent-broken 0 0]))))
       (procedure_call_statement
        ((name SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 2 statement-end])
       (wisi-indent-action [(wisi-hanging 0 ada-indent-broken) 0]))))
       (procedure_specification
        ((PROCEDURE name parameter_profile_opt )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name])
-      (wisi-containing-action 1 3) ;; for goto-declaration-start
-      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 name])
+      (wisi-containing-action 1 3) ;; for goto-declaration-start
+      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken]))))
       (proper_body
        ((subprogram_body ))
@@ -1245,27 +1258,27 @@
        ((protected_body )))
       (protected_body
        ((PROTECTED BODY IDENTIFIER aspect_specification_opt IS 
protected_operation_item_list_opt END identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 name 5 motion 9 
statement-end])
-      (wisi-containing-action 1 6)
-      (wisi-motion-action [1 5 9])
-      (wisi-face-apply-action [3 nil font-lock-type-face 8 nil 
font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 3 name 5 motion 9 
statement-end])
+      (wisi-containing-action 1 6)
+      (wisi-motion-action [1 5 9])
+      (wisi-face-apply-action [3 nil font-lock-type-face 8 nil 
font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 0 0 
ada-indent 0 0 0]))))
       (protected_body_stub
        ((PROTECTED BODY IDENTIFIER IS SEPARATE aspect_specification_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-face-apply-action [3 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-face-apply-action [3 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken ada-indent-broken ada-indent-broken 0]))))
       (protected_definition
        ((declarative_part_opt PRIVATE declarative_part_opt END identifier_opt )
-        (progn
-      (wisi-statement-action [2 motion])
-      (wisi-face-apply-action [5 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [2 motion])
+      (wisi-face-apply-action [5 nil font-lock-type-face])
       (wisi-indent-action [[ada-indent ada-indent] 0 [ada-indent ada-indent] 0 
0])))
        ((declarative_part_opt END identifier_opt )
-        (progn
-      (wisi-face-apply-action [3 nil font-lock-type-face])
+        (progn
+      (wisi-face-apply-action [3 nil font-lock-type-face])
       (wisi-indent-action [[ada-indent ada-indent] 0 0]))))
       (protected_operation_item
        ((subprogram_declaration ))
@@ -1285,26 +1298,26 @@
        (()))
       (protected_type_declaration
        ((PROTECTED TYPE IDENTIFIER discriminant_part_opt 
aspect_specification_opt IS NEW interface_list WITH protected_definition 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 name 6 motion 9 motion 11 
statement-end])
-      (wisi-containing-action 1 10)
-      (wisi-motion-action [1 6 [10 PRIVATE] 11])
-      (wisi-face-apply-action [3 nil font-lock-type-face])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0 0
+        (progn
+      (wisi-statement-action [1 statement-start 3 name 6 motion 9 motion 11 
statement-end])
+      (wisi-containing-action 1 10)
+      (wisi-motion-action [1 6 [10 PRIVATE] 11])
+      (wisi-face-apply-action [3 nil font-lock-type-face])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0 0
                            ada-indent-broken ada-indent-broken 
ada-indent-broken 0 0])))
        ((PROTECTED TYPE IDENTIFIER discriminant_part_opt 
aspect_specification_opt IS protected_definition SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 name 6 motion 8 
statement-end])
-      (wisi-containing-action 1 7)
-      (wisi-motion-action [1 6 [7 PRIVATE] 8])
-      (wisi-face-apply-action [3 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 3 name 6 motion 8 
statement-end])
+      (wisi-containing-action 1 7)
+      (wisi-motion-action [1 6 [7 PRIVATE] 8])
+      (wisi-face-apply-action [3 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0 [0 ada-indent] 0 0]))))
       (qualified_expression
        ((name tick aggregate )
-        (progn
-      (wisi-face-apply-action [1 font-lock-function-name-face 
font-lock-type-face])
-      (wisi-indent-action [0 0 (if ada-indent-hanging-rel-exp
-                                   (wisi-anchored 1 ada-indent-broken)
+        (progn
+      (wisi-face-apply-action [1 font-lock-function-name-face 
font-lock-type-face])
+      (wisi-indent-action [0 0 (if ada-indent-hanging-rel-exp
+                                   (wisi-anchored 1 ada-indent-broken)
                                  (wisi-anchored% 1 ada-indent-broken))]))))
       (quantified_expression
        ((FOR quantifier iterator_specification EQUAL_GREATER expression_opt )
@@ -1318,21 +1331,21 @@
        ((RAISE name )))
       (raise_statement
        ((RAISE name WITH expression_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 motion 5 statement-end])
-      (wisi-containing-action 1 4)
-      ;; test/ada_mode-nominal.adb
-      ;; raise Constraint_Error with
-      ;;   "help " &
-      ;;   "me!";
-      ;;
-      ;; raise Constraint_Error
-      ;;   with Integer'Image (1) &
-      ;;   "help!";
+        (progn
+      (wisi-statement-action [1 statement-start 4 motion 5 statement-end])
+      (wisi-containing-action 1 4)
+      ;; test/ada_mode-nominal.adb
+      ;; raise Constraint_Error with
+      ;;   "help " &
+      ;;   "me!";
+      ;;
+      ;; raise Constraint_Error
+      ;;   with Integer'Image (1) &
+      ;;   "help!";
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
(wisi-anchored% 3 ada-indent-broken) 0])))
        ((RAISE name SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 3 statement-end])
       (wisi-indent-action [0 ada-indent-broken 0])))
        ((RAISE SEMICOLON )
         (wisi-statement-action [1 statement-start 2 statement-end])))
@@ -1349,21 +1362,21 @@
        (()))
       (record_definition
        ((RECORD component_list_opt END RECORD )
-        (wisi-indent-action [[(ada-indent-record* 'TYPE 1 0) 
(ada-indent-record* 'TYPE 1 ada-indent)]
-                         [(ada-indent-record* 'TYPE 1 ada-indent) 
(ada-indent-record* 'TYPE 1 ada-indent)]
-                         (ada-indent-record* 'TYPE 1 0)
+        (wisi-indent-action [[(ada-indent-record* 'TYPE 1 0) 
(ada-indent-record* 'TYPE 1 ada-indent)]
+                         [(ada-indent-record* 'TYPE 1 ada-indent) 
(ada-indent-record* 'TYPE 1 ada-indent)]
+                         (ada-indent-record* 'TYPE 1 0)
                          0]))
        ((NULL RECORD )))
       (record_representation_clause
        ((FOR name USE RECORD mod_clause_opt component_clause_list END RECORD 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
-      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-type-face])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken
-                             (ada-indent-record 1 4 0)
-                             (ada-indent-record 1 4 ada-indent)
-                             (ada-indent-record 1 4 ada-indent)
-                             (ada-indent-record 1 4 0)
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
+      (wisi-face-apply-action [2 font-lock-function-name-face 
font-lock-type-face])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken
+                             (ada-indent-record 1 4 0)
+                             (ada-indent-record 1 4 ada-indent)
+                             (ada-indent-record 1 4 ada-indent)
+                             (ada-indent-record 1 4 0)
                              0 0]))))
       (relation_and_list
        ((relation_and_list AND relation ))
@@ -1405,11 +1418,11 @@
         (wisi-statement-action [1 statement-start 3 statement-end])))
       (result_profile
        ((RETURN null_exclusion_opt name_opt )
-        (progn
-      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-type-face])
-      (wisi-indent-action* 1
-                           [0
-                            (wisi-anchored* 1 ada-indent-broken)
+        (progn
+      (wisi-face-apply-action [3 font-lock-function-name-face 
font-lock-type-face])
+      (wisi-indent-action* 1
+                           [0
+                            (wisi-anchored* 1 ada-indent-broken)
                             (wisi-anchored* 1 ada-indent-broken)])))
        ((RETURN access_definition )
         (wisi-indent-action* 1 [0 (wisi-anchored*- 1 ada-indent-broken)])))
@@ -1427,29 +1440,29 @@
         (wisi-face-mark-action [1 prefix])))
       (selective_accept
        ((SELECT select_alternative_list_opt ELSE sequence_of_statements_opt 
END SELECT SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 7 statement-end])
-      (wisi-containing-action 1 2)
-      (wisi-containing-action 1 4)
-      (wisi-motion-action [1 [2 OR WHEN] 3 7])
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 7 statement-end])
+      (wisi-containing-action 1 2)
+      (wisi-containing-action 1 4)
+      (wisi-motion-action [1 [2 OR WHEN] 3 7])
       (wisi-indent-action [[0 ada-indent] [0 ada-indent] [0 ada-indent] 
[ada-indent ada-indent] 0 0 0])))
        ((SELECT select_alternative_list_opt END SELECT SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
-      (wisi-motion-action [1 [2 OR WHEN] 5])
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
+      (wisi-motion-action [1 [2 OR WHEN] 5])
       (wisi-indent-action [[0 ada-indent] [0 ada-indent] 0 0 0]))))
       (select_alternative
        ((WHEN expression_opt EQUAL_GREATER accept_statement 
sequence_of_statements_opt )
-        (progn
-      (wisi-statement-action [1 motion])
+        (progn
+      (wisi-statement-action [1 motion])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken ada-indent 
ada-indent])))
        ((WHEN expression_opt EQUAL_GREATER TERMINATE SEMICOLON )
-        (progn
-      (wisi-statement-action [1 motion 4 statement-start 5 statement-end])
+        (progn
+      (wisi-statement-action [1 motion 4 statement-start 5 statement-end])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken ada-indent 
0])))
        ((WHEN expression_opt EQUAL_GREATER delay_alternative )
-        (progn
-      (wisi-statement-action [1 motion])
+        (progn
+      (wisi-statement-action [1 motion])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken ada-indent])))
        ((accept_statement sequence_of_statements_opt ))
        ((TERMINATE SEMICOLON )
@@ -1457,8 +1470,8 @@
        ((delay_alternative )))
       (select_alternative_list
        ((select_alternative_list OR select_alternative )
-        (progn
-      (wisi-statement-action [2 motion])
+        (progn
+      (wisi-statement-action [2 motion])
       (wisi-indent-action [0 0 ada-indent])))
        ((select_alternative )
         (wisi-indent-action [ada-indent])))
@@ -1481,9 +1494,9 @@
        ((term_list )))
       (simple_return_statement
        ((RETURN expression_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 statement-end])
-      (wisi-containing-action 1 2)
+        (progn
+      (wisi-statement-action [1 statement-start 3 statement-end])
+      (wisi-containing-action 1 2)
       (wisi-indent-action [0 ada-indent-broken 0]))))
       (simple_statement
        ((NULL SEMICOLON )
@@ -1491,8 +1504,8 @@
        ((assignment_statement ))
        ((exit_statement ))
        ((GOTO IDENTIFIER SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 3 statement-end])
       (wisi-face-apply-action [2 nil font-lock-constant-face])))
        ((procedure_call_statement ))
        ((simple_return_statement ))
@@ -1504,38 +1517,38 @@
        ((pragma_g )))
       (single_protected_declaration
        ((PROTECTED IDENTIFIER aspect_specification_opt IS NEW interface_list 
WITH protected_definition SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name 4 motion 7 motion 9 
statement-end])
-      (wisi-containing-action 1 8)
-      (wisi-motion-action [1 4 7 [8 PRIVATE] 9])
-      (wisi-face-apply-action [2 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 name 4 motion 7 motion 9 
statement-end])
+      (wisi-containing-action 1 8)
+      (wisi-motion-action [1 4 7 [8 PRIVATE] 9])
+      (wisi-face-apply-action [2 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken 0 0 ada-indent-broken 
ada-indent-broken ada-indent-broken 0 0])))
        ((PROTECTED IDENTIFIER aspect_specification_opt IS protected_definition 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 name 4 motion 6 
statement-end])
-      (wisi-containing-action 1 5)
-      (wisi-motion-action [1 4 [5 PRIVATE] 6])
-      (wisi-face-apply-action [2 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 name 4 motion 6 
statement-end])
+      (wisi-containing-action 1 5)
+      (wisi-motion-action [1 4 [5 PRIVATE] 6])
+      (wisi-face-apply-action [2 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken 0 [0 ada-indent] 0 0]))))
       (single_task_declaration
        ((TASK IDENTIFIER aspect_specification_opt IS NEW interface_list WITH 
task_definition END identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 motion 7 motion 11 
statement-end])
-      (wisi-containing-action 1 8)
-      (wisi-motion-action [1 4 [8 PRIVATE] 11])
-      (wisi-face-apply-action [2 nil font-lock-type-face 9 nil 
font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 4 motion 7 motion 11 
statement-end])
+      (wisi-containing-action 1 8)
+      (wisi-motion-action [1 4 [8 PRIVATE] 11])
+      (wisi-face-apply-action [2 nil font-lock-type-face 9 nil 
font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken 0 0 ada-indent-broken 
ada-indent-broken ada-indent-broken 0 0 0 0])))
        ((TASK IDENTIFIER aspect_specification_opt IS task_definition END 
identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 motion 8 statement-end])
-      (wisi-containing-action 1 5)
-      (wisi-motion-action [1 4 [5 PRIVATE] 8])
-      (wisi-face-apply-action [2 nil font-lock-type-face 6 nil 
font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 4 motion 8 statement-end])
+      (wisi-containing-action 1 5)
+      (wisi-motion-action [1 4 [5 PRIVATE] 8])
+      (wisi-face-apply-action [2 nil font-lock-type-face 6 nil 
font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken 0 [0 ada-indent] 0 0 0 0])))
        ((TASK IDENTIFIER aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 4 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken 0 0]))))
       (statement
        ((goto_label ))
@@ -1543,19 +1556,19 @@
        ((compound_statement )))
       (subprogram_body
        ((overriding_indicator_opt subprogram_specification 
aspect_specification_opt IS declarative_part_opt BEGIN 
handled_sequence_of_statements END name_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 statement-override 4 motion 
6 motion 10 statement-end])
-      (wisi-containing-action 2 4)
-      (wisi-containing-action 4 5) ;; for goto_declarative_region_start
-      (wisi-containing-action 2 7)
-      (wisi-motion-action [1 [2 FUNCTION PROCEDURE] 4 6 10])
-      (wisi-face-apply-action [9 font-lock-function-name-face 
font-lock-function-name-face])
-      (wisi-indent-action [0 [0 ada-indent] 0 0 [ada-indent ada-indent]
+        (progn
+      (wisi-statement-action [1 statement-start 2 statement-override 4 motion 
6 motion 10 statement-end])
+      (wisi-containing-action 2 4)
+      (wisi-containing-action 4 5) ;; for goto_declarative_region_start
+      (wisi-containing-action 2 7)
+      (wisi-motion-action [1 [2 FUNCTION PROCEDURE] 4 6 10])
+      (wisi-face-apply-action [9 font-lock-function-name-face 
font-lock-function-name-face])
+      (wisi-indent-action [0 [0 ada-indent] 0 0 [ada-indent ada-indent]
                              0 [ada-indent ada-indent] 0 ada-indent-broken 
0]))))
       (subprogram_body_stub
        ((overriding_indicator_opt subprogram_specification IS SEPARATE 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 statement-override 6 
statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 2 statement-override 6 
statement-end])
       (wisi-indent-action [0 0 0 ada-indent-broken ada-indent-broken 0]))))
       (subprogram_declaration
        ((overriding_indicator_opt subprogram_specification 
aspect_specification_opt SEMICOLON )
@@ -1567,18 +1580,18 @@
        ((NULL )))
       (subprogram_renaming_declaration
        ((overriding_indicator_opt subprogram_specification RENAMES name 
aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 2 statement-override 6 
statement-end])
-      (wisi-face-apply-action [4 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 2 statement-override 6 
statement-end])
+      (wisi-face-apply-action [4 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 0 (ada-indent-renames 2) ada-indent-broken 
ada-indent-broken 0]))))
       (subprogram_specification
        ((procedure_specification ))
        ((function_specification )))
       (subtype_declaration
        ((SUBTYPE IDENTIFIER IS subtype_indication aspect_specification_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 6 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 6 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0 0]))))
       (subtype_indication
        ((NOT NULL name constraint )
@@ -1591,53 +1604,53 @@
         (wisi-face-apply-action [1 font-lock-function-name-face 
font-lock-type-face])))
       (subunit
        ((SEPARATE LEFT_PAREN name RIGHT_PAREN proper_body )
-        (progn
-      (wisi-statement-action [1 statement-start 5 motion])
+        (progn
+      (wisi-statement-action [1 statement-start 5 motion])
       (wisi-indent-action [0 ada-indent-broken (wisi-anchored 2 1) 
(wisi-anchored 2 0) 0]))))
       (task_body
        ((TASK BODY IDENTIFIER aspect_specification_opt IS declarative_part_opt 
BEGIN handled_sequence_of_statements END identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 name 5 motion 7 motion 11 
statement-end])
-      (wisi-containing-action 1 6)
-      (wisi-containing-action 1 8)
-      (wisi-motion-action [1 5 7 11])
-      (wisi-face-apply-action [3 nil font-lock-type-face 10 nil 
font-lock-type-face])
-      (wisi-indent-action [0 0 ada-indent-broken 0 0 [ada-indent ada-indent]
+        (progn
+      (wisi-statement-action [1 statement-start 3 name 5 motion 7 motion 11 
statement-end])
+      (wisi-containing-action 1 6)
+      (wisi-containing-action 1 8)
+      (wisi-motion-action [1 5 7 11])
+      (wisi-face-apply-action [3 nil font-lock-type-face 10 nil 
font-lock-type-face])
+      (wisi-indent-action [0 0 ada-indent-broken 0 0 [ada-indent ada-indent]
                              0 [ada-indent ada-indent] 0 0 0]))))
       (task_body_stub
        ((TASK BODY IDENTIFIER IS SEPARATE aspect_specification_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-face-apply-action [3 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-face-apply-action [3 nil font-lock-type-face])
       (wisi-indent-action [0 0 ada-indent-broken 0 ada-indent-broken 
ada-indent-broken 0]))))
       (task_definition
        ((declarative_part_opt PRIVATE declarative_part_opt )
-        (progn
-      (wisi-statement-action [2 motion])
-      (wisi-containing-action 2 3)
+        (progn
+      (wisi-statement-action [2 motion])
+      (wisi-containing-action 2 3)
       (wisi-indent-action [[ada-indent ada-indent] 0 [ada-indent 
ada-indent]])))
        ((declarative_part_opt )
         (wisi-indent-action [[ada-indent ada-indent]])))
       (task_type_declaration
        ((TASK TYPE IDENTIFIER discriminant_part_opt aspect_specification_opt 
IS NEW interface_list WITH task_definition END identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 name 6 motion 9 motion 13 
statement-end])
-      (wisi-containing-action 1 10)
-      (wisi-motion-action [1 6 9 [10 PRIVATE] 13])
-      (wisi-face-apply-action [3 nil font-lock-type-face 12 nil 
font-lock-type-face])
-      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0 0
+        (progn
+      (wisi-statement-action [1 statement-start 3 name 6 motion 9 motion 13 
statement-end])
+      (wisi-containing-action 1 10)
+      (wisi-motion-action [1 6 9 [10 PRIVATE] 13])
+      (wisi-face-apply-action [3 nil font-lock-type-face 12 nil 
font-lock-type-face])
+      (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0 0
                              ada-indent-broken ada-indent-broken 
ada-indent-broken 0 0 0 0])))
        ((TASK TYPE IDENTIFIER discriminant_part_opt aspect_specification_opt 
IS task_definition END identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 name 6 motion 10 
statement-end])
-      (wisi-containing-action 1 7)
-      (wisi-face-apply-action [3 nil font-lock-type-face 9 nil 
font-lock-type-face])
-      (wisi-motion-action [1 6 [7 PRIVATE] 10])
+        (progn
+      (wisi-statement-action [1 statement-start 3 name 6 motion 10 
statement-end])
+      (wisi-containing-action 1 7)
+      (wisi-face-apply-action [3 nil font-lock-type-face 9 nil 
font-lock-type-face])
+      (wisi-motion-action [1 6 [7 PRIVATE] 10])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0 [0 ada-indent] 0 0 0 0])))
        ((TASK TYPE IDENTIFIER discriminant_part_opt aspect_specification_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 name 6 statement-end])
-      (wisi-face-apply-action [3 nil font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 3 name 6 statement-end])
+      (wisi-face-apply-action [3 nil font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-broken 0 0]))))
       (term
        ((term multiplying_operator factor ))
@@ -1649,10 +1662,10 @@
        ((TICK_1 )))
       (timed_entry_call
        ((SELECT entry_call_alternative OR delay_alternative END SELECT 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 motion 6 statement-end])
-      (wisi-containing-action 1 2)
-      (wisi-containing-action 1 4)
+        (progn
+      (wisi-statement-action [1 statement-start 3 motion 6 statement-end])
+      (wisi-containing-action 1 2)
+      (wisi-containing-action 1 4)
       (wisi-indent-action [[0 ada-indent] [ada-indent ada-indent] [0 
ada-indent] [ada-indent ada-indent] 0 0 0]))))
       (triggering_alternative
        ((procedure_call_statement sequence_of_statements_opt ))
@@ -1677,58 +1690,58 @@
        ((interface_type_definition )))
       (variant_part
        ((CASE direct_name_opt IS variant_list END CASE SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-containing-action 1 4) ;; for goto-declaration-start
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-containing-action 1 4) ;; for goto-declaration-start
       (wisi-indent-action [0 ada-indent-broken 0 ada-indent-when 0 0 0]))))
       (variant_list
        ((variant_list variant ))
        ((variant )))
       (variant
        ((WHEN discrete_choice_list EQUAL_GREATER component_list_opt )
-        (progn
-      (wisi-statement-action [1 motion])
-      ;; ada-indent-when applied in variant_part
+        (progn
+      (wisi-statement-action [1 motion])
+      ;; ada-indent-when applied in variant_part
       (wisi-indent-action [0 (wisi-hanging 0 ada-indent-broken) ada-indent 
[ada-indent ada-indent]]))))
       (unary_adding_operator
        ((PLUS ))
        ((MINUS )))
       (use_clause
        ((USE ALL TYPE name_list SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
-      (wisi-face-apply-list-action [4 font-lock-function-name-face 
font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
+      (wisi-face-apply-list-action [4 font-lock-function-name-face 
font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-use 0])))
        ((USE TYPE name_list SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 statement-end])
-      (wisi-face-apply-list-action [3 font-lock-function-name-face 
font-lock-type-face])
+        (progn
+      (wisi-statement-action [1 statement-start 4 statement-end])
+      (wisi-face-apply-list-action [3 font-lock-function-name-face 
font-lock-type-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-use 0])))
        ((USE name_list SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 statement-end])
-      (wisi-face-apply-list-action [2 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 3 statement-end])
+      (wisi-face-apply-list-action [2 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-use 0]))))
       (with_clause
        ((LIMITED PRIVATE WITH name_list SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
-      (wisi-face-apply-list-action [4 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
+      (wisi-face-apply-list-action [4 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-broken 
ada-indent-with 0])))
        ((LIMITED WITH name_list SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 statement-end])
-      (wisi-face-apply-list-action [3 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 4 statement-end])
+      (wisi-face-apply-list-action [3 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-with 0])))
        ((PRIVATE WITH name_list SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 statement-end])
-      (wisi-face-apply-list-action [3 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 4 statement-end])
+      (wisi-face-apply-list-action [3 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-broken ada-indent-with 0])))
        ((WITH name_list SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 3 statement-end])
-      (wisi-face-apply-list-action [2 font-lock-function-name-face 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 3 statement-end])
+      (wisi-face-apply-list-action [2 font-lock-function-name-face 
font-lock-function-name-face])
       (wisi-indent-action [0 ada-indent-with 0])))))
      [((default . error) (ACCEPT .  1) (ABORT .  2) (BEGIN . (block_label_opt 
. 1)) (CASE .  3) (DECLARE . (block_label_opt . 1)) (DELAY .  4) (ENTRY . 
(overriding_indicator_opt . 2)) (EXIT .  5) (FOR . ( 6 (block_label_opt . 1))) 
(FUNCTION . (overriding_indicator_opt . 2)) (GENERIC .  8) (GOTO .  9) (IF .  
10) (LIMITED .  11) (LOOP . (block_label_opt . 1)) (NOT .  12) (NULL .  13) 
(OVERRIDING .  14) (PACKAGE .  15) (PRAGMA .  16) (PRIVATE .  17) (PROCEDURE . 
(overriding_indicator_opt .  [...]
       ((default . error) (IDENTIFIER .  118))
diff --git a/packages/ada-mode/ada-mode.el b/packages/ada-mode/ada-mode.el
index df01243..046af9d 100644
--- a/packages/ada-mode/ada-mode.el
+++ b/packages/ada-mode/ada-mode.el
@@ -1,13 +1,13 @@
 ;;; ada-mode.el --- major-mode for editing Ada sources  -*- lexical-binding:t 
-*-
 ;;
-;; Copyright (C) 1994, 1995, 1997 - 2018  Free Software Foundation, Inc.
+;; Copyright (C) 1994, 1995, 1997 - 2019  Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;; Maintainer: Stephen Leake <address@hidden>
 ;; Keywords: languages
 ;;  ada
-;; Version: 6.0.1
-;; package-requires: ((wisi "2.0.1") (cl-lib "1.0") (emacs "25.0"))
+;; Version: 6.1.0
+;; package-requires: ((wisi "2.1.0") (cl-lib "1.0") (emacs "25.0"))
 ;; url: http://www.nongnu.org/ada-mode/
 ;;
 ;; (Gnu ELPA requires single digits between dots in versions)
@@ -164,11 +164,12 @@
 (require 'cl-lib)
 (require 'compile)
 (require 'find-file)
+(require 'wisi) ;; FIXME: rewrite to assume wisi
 
 (defun ada-mode-version ()
   "Return Ada mode version."
   (interactive)
-  (let ((version-string "6.0.1"))
+  (let ((version-string "6.1.0"))
     ;; must match:
     ;; ada-mode.texi
     ;; README-ada-mode
@@ -312,12 +313,6 @@ nil, only the file name."
   :type 'boolean
   :safe #'booleanp)
 
-(defcustom ada-gps-indent-exec "ada_mode_gps_indent.exe"
-  ;; declared here, not in ada-gps.el, for auto-detection of indent engine 
below
-  "Name of executable to use for ada_mode_gps_indent,"
-  :type 'string
-  :group 'ada-indentation)
-
 (defcustom ada-process-parse-exec "ada_mode_wisi_lr1_parse.exe"
   ;; We use .exe even on Linux to simplify the Makefile
   "Name of executable to use for external process Ada parser.
@@ -562,8 +557,14 @@ button was clicked."
   ;; point may be in the middle of a word, so insert newline first,
   ;; then go back and indent.
   (insert "\n")
-  (forward-char -1)
-  (funcall indent-line-function)
+  (unless (and (wisi-partial-parse-p (line-beginning-position) 
(line-end-position))
+              (save-excursion (progn (forward-char -1)(looking-back 
"begin\\|else" (line-beginning-position)))))
+    ;; Partial parse may think 'begin' is just the start of a
+    ;; statement, when it's actually part of a larger declaration. So
+    ;; don't indent 'begin'. Similarly for 'else'; error recovery will
+    ;; probaly insert 'if then' immediately before it
+    (forward-char -1)
+    (funcall indent-line-function))
   (forward-char 1)
   (funcall indent-line-function))
 
@@ -1753,6 +1754,9 @@ Useful when project has been edited."
       (setq ada-prj-alist (delq parsed ada-prj-alist)))
     (ada-select-prj-file prj-file nil)))
 
+;; This is autoloaded because it is often used in Makefiles, and thus
+;; will be the first ada-mode function executed.
+;;;###autoload
 (defun ada-select-prj-file (prj-file &optional no-force)
   "Select PRJ-FILE as the current project file, parsing it if necessary.
 Deselects the current project first."
@@ -2982,10 +2986,8 @@ The paragraph is indented on the first line."
 
 (defun ada-mode-post-local-vars ()
   ;; These are run after ada-mode-hook and file local variables
-  ;; because users or other ada-* files might set the relevant
-  ;; variable inside the hook or file local variables (file local
-  ;; variables are processed after the mode is set, and thus after
-  ;; ada-mode is run).
+  ;; because users or *.ad? files might set the relevant
+  ;; variable inside the hook or file local variables.
 
   ;; This means to fully set ada-mode interactively, user must
   ;; do M-x ada-mode M-; (hack-local-variables)
@@ -3042,12 +3044,10 @@ process : wisi elisp lexer, external process parser 
specified
   by ‘ada-process-parse-exec ’.
 ")
 
-(defvar ada-fallback nil
+(defvar ada-fallback 'simple
   "Indicate fallback indentation engine for Ada buffers.
 
-simple: indent to previous line.
-
-gps: gps external parser.")
+simple: indent to previous line.")
 
 (provide 'ada-mode)
 
@@ -3060,10 +3060,6 @@ gps: gps external parser.")
 (cl-case ada-fallback
   (simple
    (require 'ada-wisi))
-  (t
-   (if (locate-file ada-gps-indent-exec exec-path '("" ".exe"))
-       (require 'ada-gps)
-     (require 'ada-wisi)))
   )
 
 (cl-case ada-parser
diff --git a/packages/ada-mode/ada-mode.info b/packages/ada-mode/ada-mode.info
index 462afa0..26b2b70 100644
--- a/packages/ada-mode/ada-mode.info
+++ b/packages/ada-mode/ada-mode.info
@@ -1,7 +1,7 @@
 This is ada-mode.info, produced by makeinfo version 6.3 from
 ada-mode.texi.
 
-Copyright (C) 1999 - 2018 Free Software Foundation, Inc.
+Copyright (C) 1999 - 2019 Free Software Foundation, Inc.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License,
@@ -22,9 +22,9 @@ END-INFO-DIR-ENTRY
 
 File: ada-mode.info,  Node: Top,  Next: Overview,  Prev: (dir),  Up: (dir)
 
-Ada Mode Version 6.0.1
+Ada Mode Version 6.1.0
 
-   Copyright (C) 1999 - 2018 Free Software Foundation, Inc.
+   Copyright (C) 1999 - 2019 Free Software Foundation, Inc.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License,
@@ -68,7 +68,6 @@ Installation
 * Ada Reference Manual::
 * gpr_query::
 * process parser::
-* ada_mode_gps_indent::
 
 gpr_query
 
@@ -76,13 +75,9 @@ gpr_query
 * Building GNATCOLL 2018::
 * Building gpr_query::
 
-ada_mode_gps_indent
-
-* ada_mode_gps_indent install::
-* ada_mode_gps_indent configure::
-
 Customizing Ada mode
 
+* Slow response::
 * Non-standard file names::
 * Other compiler::
 * Other cross-reference::
@@ -207,7 +202,6 @@ ada-mode-version'.
 * Ada Reference Manual::
 * gpr_query::
 * process parser::
-* ada_mode_gps_indent::
 
 
 File: ada-mode.info,  Node: Ada Reference Manual,  Next: gpr_query,  Prev: 
Installation,  Up: Installation
@@ -384,8 +378,6 @@ ELPA package is installed:
      cd ~/.emacs.d/elpa/ada-mode-6.0.xx
      ./build.sh
 
-   This also builds *note ada_mode_gps_indent::.
-
    'ada-mode' will use 'gpr_query' for cross reference functions if
 'gpr_query' is found in 'PATH'.
 
@@ -403,93 +395,77 @@ available.
 ''elisp' or ''parser'.
 
 
-File: ada-mode.info,  Node: ada_mode_gps_indent,  Prev: gpr_query,  Up: 
Installation
-
-2.4 ada_mode_gps_indent
-=======================
-
-'ada_mode_gps_indent' is an alternate indentation engine, using the
-indentation engine from AdaCore's GPS. It is fast for indenting in very
-large files; the default ada-wisi is slow in that case.  It also
-tolerates most syntax errors, producing reasonable indentation.
-
-   It can be used either as the primary indentation engine, or as a
-fallback when ada-wisi fails due to syntax errors or in large files.
+File: ada-mode.info,  Node: Customization,  Next: Compiling Executing,  Prev: 
Installation,  Up: Top
 
-   In either case, the ada-wisi parser is still used for syntax
-highlighting (font-lock) and navigation.
+3 Customizing Ada mode
+**********************
 
-   The ada-mode Gnu ELPA package includes a copy of the source code for
-the GPS indentation engine from GPS GPS 2016, patched to be more
-consistent with the ada-wisi indentation engine.
+Here we assume you are familiar with setting variables in Emacs, either
+thru 'customize' or in elisp (in your '.emacs' file).  For a basic
+introduction to customize, elisp, and Emacs in general, see the tutorial
+('C-h t').
 
 * Menu:
 
-* ada_mode_gps_indent install::
-* ada_mode_gps_indent configure::
+* Slow response::
+* Non-standard file names::
+* Other compiler::
+* Other cross-reference::
+* Other customization::
 
 
-File: ada-mode.info,  Node: ada_mode_gps_indent install,  Next: 
ada_mode_gps_indent configure,  Up: ada_mode_gps_indent
-
-2.4.1 Install
--------------
+File: ada-mode.info,  Node: Slow response,  Next: Non-standard file names,  
Up: Customization
 
-To install 'ada_mode_gps_indent', assuming the 'ada-mode-6.0.xx' GNU
-ELPA package is installed:
-   * Install 'gnatcoll' (*note Building GNATCOLL 2018::).
+3.1 Slow response
+=================
 
-   * Compile and install 'ada_mode_gps_indent':
-          cd ~/.emacs.d/elpa/ada-mode-6.0.xx/
-          ./build.sh
+In large files, parsing is slow, so it gets in the way of interactive
+typing due to immediate fontification triggering a parse.
 
-     This also builds *note gpr_query::.
+   There are three ways to deal with this:
 
-
-File: ada-mode.info,  Node: ada_mode_gps_indent configure,  Prev: 
ada_mode_gps_indent install,  Up: ada_mode_gps_indent
+  1. Install the process parser (*Note process parser::), and set
+     'wisi-partial-parse-threshold' appropriately in your '~./emacs':
 
-2.4.2 Configure
----------------
+          (setq wisi-partial-parse-threshold 100001)
 
-By default, 'ada-mode' will use 'ada_mode_gps_indent' as a fallback
-indentation engine if 'ada_mode_gps_indent' is found on 'PATH'.
+     The default value (100001) may already be appropriate; it depends
+     on how fast your machine is, and what your tolerance for slow
+     response is.
 
-   Large files (determined by 'ada-gps-size-threshold') will use
-'ada_mode_gps_indent' as the primary indentation engine.
+     Files larger than 'wisi-partial-parse-threshold' will be parsed
+     partially; only the part of the buffer needed for the current task
+     will be parsed.  For fontification, that is the visible part.  For
+     indent, it is approximately the current subprogram or package.  For
+     navigation, it is always the entire file, which will still be slow;
+     that is the only way to ensure useful results.
 
-   To force the use of 'ada_mode_gps_indent', set
-'ada-gps-size-threshold' to 0, either globally, or in a file-local
-variable:
+     With this setting, indentation may not be correct; the Ada menu
+     entry "Edit | Indent lines in file" (or "Edit | Indent current
+     statement", if point is on a keyword of a large enough enclosing
+     statement) will parse the entire file and indent correctly.
 
-     --  Local Variables:
-     --  ada-gps-size-threshold : 0
-     --  End:
+  2. Delay fontification by setting 'jit-lock-defer-time' in your
+     '~./emacs':
 
-   In addition, files larger than 'wisi-size-threshold' will not run the
-wisi parser for font-lock; some syntax highlighting will be lost.  This
-provides better response in files where the parser is slow.
+          (setq jit-lock-defer-time 1.5)
 
-
-File: ada-mode.info,  Node: Customization,  Next: Compiling Executing,  Prev: 
Installation,  Up: Top
+     This is a global setting; it affects all buffers.  Fontification
+     will only be performed after you have stopped typing for the
+     indicated number of seconds.
 
-3 Customizing Ada mode
-**********************
+  3. Turn off parsing for fontification by setting 'wisi-disable-face'
+     in your '~./emacs'
 
-Here we assume you are familiar with setting variables in Emacs, either
-thru 'customize' or in elisp (in your '.emacs' file).  For a basic
-introduction to customize, elisp, and Emacs in general, see the tutorial
-('C-h t').
+          (setq wisi-disable-face t)
 
-* Menu:
-
-* Non-standard file names::
-* Other compiler::
-* Other cross-reference::
-* Other customization::
+     This turns of fontification for type, package, and function names;
+     only Ada reserved words are fontified.
 
 
 File: ada-mode.info,  Node: Non-standard file names,  Next: Other compiler,  
Prev: Customization,  Up: Customization
 
-3.1 Non-standard file names
+3.2 Non-standard file names
 ===========================
 
 By default, Ada mode is configured to use the GNAT file naming
@@ -536,7 +512,7 @@ scope of this manual; see the current definitions in 
'ada-mode.el' and
 
 File: ada-mode.info,  Node: Other compiler,  Next: Other cross-reference,  
Prev: Non-standard file names,  Up: Customization
 
-3.2 Other compiler
+3.3 Other compiler
 ==================
 
 The project variable 'ada_compiler' (default elisp variable
@@ -552,7 +528,7 @@ the indirection variables.
 
 File: ada-mode.info,  Node: Other cross-reference,  Next: Other customization, 
 Prev: Other compiler,  Up: Customization
 
-3.3 Other cross-reference
+3.4 Other cross-reference
 =========================
 
 The project variable 'ada_xref' (default elisp variable 'ada-xref-tool')
@@ -572,7 +548,7 @@ Emacs lisp code that provides the interface to the tool, 
and set
 
 File: ada-mode.info,  Node: Other customization,  Prev: Other cross-reference, 
 Up: Customization
 
-3.4 Other customization
+3.5 Other customization
 =======================
 
 All user-settable Ada mode variables can be set via the menu 'Ada |
@@ -623,15 +599,6 @@ the syntax to set a variable is the following:
      dedicated window.
 'which-func'
      Display the current subprogram name in the mode bar.
-'jit-lock-defer-time'
-     In large files, parsing is slow, so it gets in the way of
-     interactive typing due to immediate font-lock triggering a parse.
-     Delay the font-lock by setting an Emacs file-local variable in an
-     Ada comment:
-
-          --  Local Variables:
-          --  jit-lock-defer-time: 1.5
-          --  End:
 
    The above can all be set by the following code in your '~/.emacs'.
 Note that some are functions are added to 'before-save-hook'; they run
@@ -1585,6 +1552,11 @@ can also configure the indentation, via the following 
variables:
 'ada-indent' (default value: 3)
      Number of columns for default indentation.
 
+'ada-indent-after-trailing-comment' (default value t)
+     If t, align comment lines imediately following a comment on the
+     same line as code with the preceding comment.  Otherwise, ignore
+     the preceding comment.
+
 'ada-indent-broken' (default value: 2)
      Number of columns to indent the continuation of a broken line.
 
@@ -2811,56 +2783,54 @@ Index
 
 Tag Table:
 Node: Top945
-Node: Overview3678
-Node: Why not LSP?4915
-Node: Installation5257
-Node: Ada Reference Manual6338
-Node: gpr_query6614
-Node: Building GNATCOLL 20178450
-Node: Building GNATCOLL 201810082
-Node: Building gpr_query12531
-Node: process parser12988
-Node: ada_mode_gps_indent13320
-Node: ada_mode_gps_indent install14234
-Node: ada_mode_gps_indent configure14699
-Node: Customization15522
-Node: Non-standard file names16004
-Node: Other compiler17845
-Node: Other cross-reference18424
-Node: Other customization19166
-Node: Compiling Executing22721
-Node: Compile commands23456
-Node: Compiling Examples26107
-Node: No project files26939
-Node: Set compiler options32305
-Node: Set source search path34267
-Node: Use GNAT project file36720
-Node: Use multiple GNAT project files39494
-Node: Use a Makefile42214
-Node: Compiler errors43529
-Node: Project files44346
-Node: Project file overview45373
-Node: Project file variables46917
-Node: Moving Through Ada Code51792
-Node: Identifier completion54491
-Node: Indentation55453
-Node: Statement skeletons59801
-Node: Aligning code61586
-Node: Automatic casing62531
-Node: Comment Handling65235
-Node: Key summary65754
-Node: Developer overview68381
-Node: Directory structure68749
-Node: Package organization72720
-Node: Ada mode72955
-Node: gpr mode75151
-Node: GNAT core75434
-Node: Wisi76268
-Node: OpenToken77168
-Node: ELPA77770
-Node: Savannah78380
-Node: ada-france78718
-Node: GNU Free Documentation License78958
-Node: Index104119
+Node: Overview3584
+Node: Why not LSP?4821
+Node: Installation5163
+Node: Ada Reference Manual6220
+Node: gpr_query6496
+Node: Building GNATCOLL 20178332
+Node: Building GNATCOLL 20189964
+Node: Building gpr_query12413
+Node: process parser12820
+Node: Customization13152
+Node: Slow response13652
+Node: Non-standard file names15540
+Node: Other compiler17381
+Node: Other cross-reference17960
+Node: Other customization18702
+Node: Compiling Executing21922
+Node: Compile commands22657
+Node: Compiling Examples25308
+Node: No project files26140
+Node: Set compiler options31506
+Node: Set source search path33468
+Node: Use GNAT project file35921
+Node: Use multiple GNAT project files38695
+Node: Use a Makefile41415
+Node: Compiler errors42730
+Node: Project files43547
+Node: Project file overview44574
+Node: Project file variables46118
+Node: Moving Through Ada Code50993
+Node: Identifier completion53692
+Node: Indentation54654
+Node: Statement skeletons59224
+Node: Aligning code61009
+Node: Automatic casing61954
+Node: Comment Handling64658
+Node: Key summary65177
+Node: Developer overview67804
+Node: Directory structure68172
+Node: Package organization72143
+Node: Ada mode72378
+Node: gpr mode74574
+Node: GNAT core74857
+Node: Wisi75691
+Node: OpenToken76591
+Node: ELPA77193
+Node: Savannah77803
+Node: ada-france78141
+Node: GNU Free Documentation License78381
+Node: Index103542
 
 End Tag Table
diff --git a/packages/ada-mode/ada-mode.texi b/packages/ada-mode/ada-mode.texi
index 4c0b0fb..3850d17 100644
--- a/packages/ada-mode/ada-mode.texi
+++ b/packages/ada-mode/ada-mode.texi
@@ -3,7 +3,7 @@
 @settitle Ada Mode
 
 @copying
-Copyright @copyright{} 1999 - 2018  Free Software Foundation, Inc.
+Copyright @copyright{} 1999 - 2019  Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -26,7 +26,7 @@ developing GNU and promoting software freedom.''
 
 @titlepage
 @sp 10
address@hidden Ada Mode Version 6.0.1
address@hidden Ada Mode Version 6.1.0
 @page
 @vskip 0pt plus 1filll
 @insertcopying
@@ -36,7 +36,7 @@ developing GNU and promoting software freedom.''
 
 @node Top, Overview, (dir), (dir)
 
-Ada Mode Version 6.0.1
+Ada Mode Version 6.1.0
 
 @ifnottex
 @insertcopying
@@ -72,7 +72,6 @@ Installation
 * Ada Reference Manual::
 * gpr_query::
 * process parser::
-* ada_mode_gps_indent::
 
 gpr_query
 
@@ -80,13 +79,9 @@ gpr_query
 * Building GNATCOLL 2018::
 * Building @file{gpr_query}::
 
-ada_mode_gps_indent
-
-* ada_mode_gps_indent install::
-* ada_mode_gps_indent configure::
-
 Customizing Ada mode
 
+* Slow response::
 * Non-standard file names::
 * Other compiler::
 * Other cross-reference::
@@ -207,7 +202,6 @@ You may also want to install additional utilities:
 * Ada Reference Manual::
 * gpr_query::
 * process parser::
-* ada_mode_gps_indent::
 @end menu
 
 @node Ada Reference Manual, gpr_query, Installation, Installation
@@ -392,8 +386,6 @@ cd ~/.emacs.d/elpa/ada-mode-6.0.xx
 ./build.sh
 @end example
 
-This also builds @ref{ada_mode_gps_indent}.
-
 @code{ada-mode} will use @file{gpr_query} for cross reference
 functions if @file{gpr_query} is found in @code{PATH}.
 
@@ -406,84 +398,76 @@ is available.
 To override the automatic choice of parser, set @var{ada-parser} to
 either @code{'elisp} or @code{'parser}.
 
address@hidden ada_mode_gps_indent, , gpr_query, Installation
address@hidden ada_mode_gps_indent
address@hidden is an alternate indentation engine, using the
-indentation engine from AdaCore's GPS. It is fast for indenting in
-very large files; the default ada-wisi is slow in that case. It also
-tolerates most syntax errors, producing reasonable indentation.
-
-It can be used either as the primary indentation engine, or as a
-fallback when ada-wisi fails due to syntax errors or in large files.
-
-In either case, the ada-wisi parser is still used for syntax
-highlighting (font-lock) and navigation.
address@hidden Customization, Compiling Executing, Installation, Top
address@hidden Customizing Ada mode
 
-The ada-mode Gnu ELPA package includes a copy of the source code for
-the GPS indentation engine from GPS GPS 2016, patched to be more
-consistent with the ada-wisi indentation engine.
+Here we assume you are familiar with setting variables in Emacs,
+either thru 'customize' or in elisp (in your @file{.emacs} file). For
+a basic introduction to customize, elisp, and Emacs in general, see
+the tutorial (@kbd{C-h t}).
 
 @menu
-* ada_mode_gps_indent install::
-* ada_mode_gps_indent configure::
+* Slow response::
+* Non-standard file names::
+* Other compiler::
+* Other cross-reference::
+* Other customization::
 @end menu
 
address@hidden ada_mode_gps_indent install
address@hidden Install
-To install @code{ada_mode_gps_indent}, assuming the
address@hidden GNU ELPA package is installed:
address@hidden
address@hidden
-Install @file{gnatcoll} (@ref{Building GNATCOLL 2018}).
address@hidden Slow response
address@hidden Slow response
+
+In large files, parsing is slow, so it gets in the way of interactive
+typing due to immediate fontification triggering a parse.
+
+There are three ways to deal with this:
+
address@hidden
address@hidden Install the process parser (@xref{process parser}), and set
address@hidden appropriately in your
address@hidden/emacs}:
 
address@hidden
-Compile and install @file{ada_mode_gps_indent}:
 @example
-cd ~/.emacs.d/elpa/ada-mode-6.0.xx/
-./build.sh
+(setq wisi-partial-parse-threshold 100001)
 @end example
 
-This also builds @ref{gpr_query}.
+The default value (100001) may already be appropriate; it depends on
+how fast your machine is, and what your tolerance for slow response
+is.
 
address@hidden itemize
-
address@hidden ada_mode_gps_indent configure
address@hidden Configure
-By default, @code{ada-mode} will use @code{ada_mode_gps_indent} as a
-fallback indentation engine if @code{ada_mode_gps_indent} is found on
address@hidden
+Files larger than @code{wisi-partial-parse-threshold} will be parsed
+partially; only the part of the buffer needed for the current task
+will be parsed. For fontification, that is the visible part. For indent,
+it is approximately the current subprogram or package. For navigation,
+it is always the entire file, which will still be slow; that is the
+only way to ensure useful results.
 
-Large files (determined by @code{ada-gps-size-threshold}) will use
address@hidden as the primary indentation engine.
+With this setting, indentation may not be correct; the Ada menu entry
+``Edit | Indent lines in file'' (or ``Edit | Indent current
+statement'', if point is on a keyword of a large enough enclosing
+statement) will parse the entire file and indent correctly.
 
-To force the use of @code{ada_mode_gps_indent}, set
address@hidden to 0, either globally, or in a
-file-local variable:
address@hidden Delay fontification by setting @code{jit-lock-defer-time} in your
address@hidden/emacs}:
 
 @example
---  Local Variables:
---  ada-gps-size-threshold : 0
---  End:
+(setq jit-lock-defer-time 1.5)
 @end example
 
-In addition, files larger than @code{wisi-size-threshold} will not run
-the wisi parser for font-lock; some syntax highlighting will be
-lost. This provides better response in files where the parser is slow.
+This is a global setting; it affects all buffers. Fontification will
+only be performed after you have stopped typing for the indicated
+number of seconds.
 
address@hidden Customization, Compiling Executing, Installation, Top
address@hidden Customizing Ada mode
address@hidden Turn off parsing for fontification by setting
address@hidden in your @file{~./emacs}
 
-Here we assume you are familiar with setting variables in Emacs,
-either thru 'customize' or in elisp (in your @file{.emacs} file). For
-a basic introduction to customize, elisp, and Emacs in general, see
-the tutorial (@kbd{C-h t}).
address@hidden
+(setq wisi-disable-face t)
address@hidden example
 
address@hidden
-* Non-standard file names::
-* Other compiler::
-* Other cross-reference::
-* Other customization::
address@hidden menu
+This turns of fontification for type, package, and function names;
+only Ada reserved words are fontified.
address@hidden enumerate
 
 @node Non-standard file names, Other compiler, Customization, Customization
 @section Non-standard file names
@@ -616,18 +600,6 @@ Navigate to subprograms and types by name, from a 
minibuffer menu.
 Navigate to subprograms and types by name, from a list in a dedicated window.
 @item which-func
 Display the current subprogram name in the mode bar.
address@hidden jit-lock-defer-time
-In large files, parsing is slow, so it gets in the way of
-interactive typing due to immediate font-lock triggering a
-parse. Delay the font-lock by setting an Emacs file-local variable
-in an Ada comment:
-
address@hidden
---  Local Variables:
---  jit-lock-defer-time: 1.5
---  End:
address@hidden example
-
 @end table
 
 The above can all be set by the following code in your
@@ -1654,6 +1626,11 @@ can also configure the indentation, via the following 
variables:
 @item @code{ada-indent}                  (default value: 3)
 Number of columns for default indentation.
 
address@hidden @code{ada-indent-after-trailing-comment} (default value t)
+If t, align comment lines imediately following a comment on the
+same line as code with the preceding comment. Otherwise, ignore
+the preceding comment.
+
 @item @code{ada-indent-broken}           (default value: 2)
 Number of columns to indent the continuation of a broken line.
 
@@ -1675,6 +1652,8 @@ of:
 
 Otherwise, they are indented with previous comments or code.
 
address@hidden @item @code{ada-indent-hanging-rel-exp} still experimental
+
 @item @code{ada-indent-label}            (default value: -3)
 Number of columns to indent a label.
 
diff --git a/packages/ada-mode/ada-process.el b/packages/ada-mode/ada-process.el
index 26077a4..c75e867 100644
--- a/packages/ada-mode/ada-process.el
+++ b/packages/ada-mode/ada-process.el
@@ -1,7 +1,7 @@
 ;;; ada-process.el --- Generated parser support file  -*- lexical-binding:t -*-
 ;;  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS text_rep ada.wy
 
-;;  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+;;  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 ;;  This program is free software; you can redistribute it and/or
 ;;  modify it under the terms of the GNU General Public License as
diff --git a/packages/ada-mode/ada-project.el b/packages/ada-mode/ada-project.el
deleted file mode 100644
index e917ec3..0000000
--- a/packages/ada-mode/ada-project.el
+++ /dev/null
@@ -1,81 +0,0 @@
-;; ada-project.el - project.el backend for ada-mode projects -*- 
lexical-binding: t =*-
-;;
-;; Copyright (C) 2017, 2018, 2019  Free Software Foundation, Inc.
-;;
-;; Author: Stephen Leake <address@hidden>
-;; Maintainer: Stephen Leake <address@hidden>
-;; Keywords: projects
-;; Version: 1.0.0
-;; package-requires: ((emacs "25.0"))
-;;
-;; This file is part of GNU Emacs.
-;;
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-;;
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'ada-mode)
-(require 'project-patches)
-(require 'env-project)
-(require 'uniquify-files)
-
-(cl-defstruct (ada-project
-              (:include env-project)
-              (:constructor nil) ;; no default
-              (:constructor make-ada-project
-                            (&key
-                             env-vars
-                             ada-prj-file
-                             &aux
-                             (ada-prj (expand-file-name ada-prj-file))))
-              )
-  ada-prj
-  ;; The ada-mode project file name (absolute).
-  )
-
-(cl-defmethod project-id ((prj ada-project))
-  ;; project-id is experimental
-  (ada-project-ada-prj prj))
-
-(cl-defmethod project-library-roots ((prj ada-project))
-  ;; Called from project-find-file; result is passed to
-  ;; project--file-completion-table, where it is ignored.
-  nil)
-
-(cl-defmethod project-roots ((prj ada-project))
-  ;; Called from project-find-file; result is passed to
-  ;; project--file-completion-table, where it is ignored.
-  nil)
-
-(cl-defmethod project-file-completion-table ((prj ada-project) _dirs)
-  ;; (ada-prj-get 'src_dir) is more accurate than project-*roots
-  (let ((iter (make-path-iterator
-              :user-path-non-recursive (ada-prj-get 'src_dir)
-              :user-path-recursive nil
-              :ignore-function nil)))
-    (apply-partially #'uniq-file-completion-table iter)
-    ))
-
-(cl-defmethod project-select :after ((prj ada-project))
-  ;; :after ensures env-project project-select is run first, setting env vars.
-  (ada-select-prj-file (ada-project-ada-prj prj)))
-
-(cl-defmethod project-deselect :before ((prj ada-project))
-  ;; :before ensures env vars are not erased before we are done with them.
-  (ada-deselect-prj (ada-project-ada-prj prj)))
-
-(cl-defmethod project-refresh ((_prj ada-project))
-  ;; assume prj is current
-  (ada-refresh-prj-file))
-(provide 'ada-project)
-
-;; end of file
diff --git a/packages/ada-mode/ada-wisi-elisp-parse.el 
b/packages/ada-mode/ada-wisi-elisp-parse.el
index 0e3e275..1a1e2c3 100644
--- a/packages/ada-mode/ada-wisi-elisp-parse.el
+++ b/packages/ada-mode/ada-wisi-elisp-parse.el
@@ -1,6 +1,6 @@
 ;;; ada-wisi-elisp-parse.el --- Ada functions for grammar actions called from 
the elisp parser  -*- lexical-binding:t -*-
 ;;
-;; Copyright (C) 2012 - 2018  Free Software Foundation, Inc.
+;; Copyright (C) 2012 - 2019  Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;;
@@ -130,7 +130,7 @@
            (and prev-1
                 (eq 'WITH (wisi-tok-token prev-1))
                 (or (null prev-3)
-                    ;; FIXME: doc test case
+                    ;; IMPROVEME: doc test case
                     (not (eq 'LEFT_PAREN (wisi-tok-token prev-3))))) ;; not in 
extension aggregate
 
            ;; test/aspects.ads
diff --git a/packages/ada-mode/ada-wisi.el b/packages/ada-mode/ada-wisi.el
index 22c42b5..09b4c73 100644
--- a/packages/ada-mode/ada-wisi.el
+++ b/packages/ada-mode/ada-wisi.el
@@ -2,7 +2,7 @@
 ;;
 ;; [1] ISO/IEC 8652:2012(E); Ada 2012 reference manual
 ;;
-;; Copyright (C) 2012 - 2018  Free Software Foundation, Inc.
+;; Copyright (C) 2012 - 2019  Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;;
@@ -120,8 +120,8 @@ For `wisi-indent-calculate-functions'.
 
        (save-excursion
          (forward-comment -1)
-         (if (looking-at "\\s *$")
-             ;; no comment on previous line
+         (if (or (not ada-indent-after-trailing-comment) ;; ignore comment on 
previous line
+                 (looking-at "\\s *$"))                  ;; no comment on 
previous line
              (setq after 'code)
 
            (setq indent (current-column))
@@ -158,8 +158,9 @@ For `wisi-indent-calculate-functions'.
 
 (defun ada-wisi-post-parse-fail ()
   "For `wisi-post-parse-fail-hook'."
+  ;; Parse indent succeeded, so we assume parse navigate will as well
+  (wisi-validate-cache (point-min) (line-end-position) nil 'navigate)
   (save-excursion
-    (wisi-validate-cache (point) nil 'navigate)
     (let ((start-cache (wisi-goto-start (or (wisi-get-cache (point)) 
(wisi-backward-cache)))))
       (when start-cache
        ;; nil when in a comment at point-min
@@ -177,7 +178,7 @@ For `wisi-indent-calculate-functions'.
 
 (defun ada-wisi-context-clause ()
   "For `ada-fix-context-clause'."
-  (wisi-validate-cache (point-max) t 'navigate)
+  (wisi-validate-cache (point-min) (point-max) t 'navigate)
   (save-excursion
     (goto-char (point-min))
     (let ((begin nil)
@@ -229,7 +230,7 @@ For `wisi-indent-calculate-functions'.
 
 (defun ada-wisi-goto-subunit-name ()
   "For `ada-goto-subunit-name'."
-  (wisi-validate-cache (point-max) t 'navigate)
+  (wisi-validate-cache (point-min) (point-max) t 'navigate)
 
   (let (cache
        (name-pos nil))
@@ -252,7 +253,7 @@ For `wisi-indent-calculate-functions'.
 (defun ada-wisi-goto-declaration-start (&optional include-type)
   "For `ada-goto-declaration-start', which see.
 Also return cache at start."
-  (wisi-validate-cache (point) t 'navigate)
+  (wisi-validate-cache (point-min) (point-max) t 'navigate)
 
   (let ((cache (wisi-get-cache (point)))
        (done nil))
@@ -305,7 +306,7 @@ Also return cache at start."
 
 (defun ada-wisi-goto-declarative-region-start ()
   "For `ada-goto-declarative-region-start', which see."
-  (wisi-validate-cache (point-max) t 'navigate)
+  (wisi-validate-cache (point-min) (point-max) t 'navigate)
 
   (let ((done nil)
        (first t)
@@ -384,7 +385,7 @@ Also return cache at start."
 
 (defun ada-wisi-in-paramlist-p (&optional parse-result)
   "For `ada-in-paramlist-p'."
-  (wisi-validate-cache (point) nil 'navigate)
+  (wisi-validate-cache (point-min) (point-max) nil 'navigate)
   ;; (info "(elisp)Parser State" "*syntax-ppss*")
   (let ((parse-result (or parse-result (syntax-ppss)))
         cache)
@@ -396,9 +397,9 @@ Also return cache at start."
 
 (defun ada-wisi-make-subprogram-body ()
   "For `ada-make-subprogram-body'."
-  ;; point is at start of subprogram specification; we need to find
-  ;; the end, so ensure parse to end of buffer.
-  (wisi-validate-cache (point-max) t 'navigate)
+  ;; point is at start of subprogram specification;
+  ;; ada-wisi-expand-region will find the terminal semicolon.
+  (wisi-validate-cache (point-min) (point-max) t 'navigate)
 
   (let* ((begin (point))
         (end (wisi-cache-end (wisi-get-cache (point))))
@@ -422,9 +423,16 @@ Also return cache at start."
 (defun ada-wisi-scan-paramlist (begin end)
   "For `ada-scan-paramlist'."
   ;; IMPROVEME: define mini grammar that does this
-  (wisi-validate-cache end t 'navigate)
+  ;;
+  ;; BEGIN is at (, end at ). We need to parse the entire
+  ;; subprogram_specification, so start back two tokens.
+  (goto-char begin)
+  (wisi-backward-token)
+  (wisi-backward-token)
+  (wisi-validate-cache (point) end t 'navigate)
 
   (goto-char begin)
+
   (let (tok
        token
        text
@@ -542,9 +550,10 @@ Also return cache at start."
 
 (defun ada-wisi-which-function (include-type)
   "For `ada-which-function'."
-  (wisi-validate-cache (point) nil 'navigate)
-  ;; no message on parse fail, since this could be called from which-func-mode
-  (when (> (wisi-cache-max 'navigate) (point))
+  ;; No message on parse fail, since this could be called from
+  ;; which-function-mode.
+  (wisi-validate-cache (point-min) (point) nil 'navigate)
+  (when (wisi-cache-covers-pos 'navigate (point))
     (save-excursion
       (let ((result nil)
            (cache (condition-case nil (ada-wisi-goto-declaration-start 
include-type) (error nil))))
@@ -710,6 +719,176 @@ TOKEN-TEXT; move point to just past token."
          (if ada-end-name-optional 1 0)
          ))
 
+(defconst ada-wisi-named-begin-regexp
+  "\\bfunction\\b\\|\\bpackage\\b\\|\\bprocedure\\b\\|\\btask\\b"
+  )
+
+(defconst ada-wisi-partial-begin-regexp
+  (concat "\\bbegin\\b\\|\\bdeclare\\b\\|"
+         ada-wisi-named-begin-regexp
+         "\\|\\bend;\\|\\bend " ada-name-regexp ";"))
+
+(defconst ada-wisi-partial-end-regexp
+  (concat ada-wisi-partial-begin-regexp
+         "\\|;"))
+
+(defun ada-wisi-search-backward-no-string-comment (regexp)
+  (let ((maybe-found-p (search-backward-regexp regexp nil t)))
+    (while (and maybe-found-p
+               (ada-in-string-or-comment-p)
+               (setq maybe-found-p (search-backward-regexp regexp nil t))))
+    maybe-found-p))
+
+(defun ada-wisi-find-begin ()
+  "Starting at current point, search backward for a parse start point."
+
+  ;; There is a trade-off in deciding where to start parsing for indent. If we 
have:
+  ;;
+  ;; procedure ...
+  ;; is
+  ;;
+  ;; and are inserting a new line after 'is', we need to include
+  ;; 'is' in the parse to see the indent. On the other hand, if we
+  ;; have:
+  ;;
+  ;;    ...
+  ;;    end;
+  ;; begin
+  ;;    Foo;
+  ;;
+  ;; Inserting new line after 'Foo;'; if we include 'begin', there
+  ;; is no error (begin starts a statement), and the indent is
+  ;; computed incorrectly.
+  ;;
+  ;; This is handled by the set of keywords in
+  ;; ada-wisi-partial-begin-regexp.
+  (cond
+   ((ada-wisi-search-backward-no-string-comment ada-wisi-partial-begin-regexp)
+    (let ((found (match-string 0))
+         cache)
+      (cond
+       ((and (>= (length found) 3)
+            (string-equal "end" (substring found 0 3)))
+       (match-end 0))
+
+       (t
+       (setq cache (wisi-get-cache (point)))
+       (when cache
+         ;; This distinguishes 'begin' as a statement start from
+         ;; 'begin' following 'declare', 'procedure' etc.  We don't
+         ;; force a parse to get this; the user may choose to do so.
+         (wisi-goto-start cache))
+       (point))
+       )))
+
+   (t
+    (point-min))
+   ))
+
+(defun ada-wisi-find-end ()
+  "Starting at current point, search forward for a reasonable parse end point."
+  (unless (bolp) (forward-line 1)) ;; get out of any current comment
+
+  (let ((start (point))
+       match
+       (end-cand nil))
+
+    (while (not end-cand)
+      (if (search-forward-regexp ada-wisi-partial-end-regexp nil 1) ;; moves 
to eob if not found
+         (unless (or (ada-in-string-or-comment-p)
+                     (ada-in-paren-p))
+           (setq match t)
+           (setq end-cand (point)))
+
+       ;; No reasonable end point found (maybe a missing right
+       ;; paren); return line after start for minimal parse, compute
+       ;; indent for line containing start.
+       (setq match nil)
+       (goto-char start)
+       (setq end-cand (line-end-position 2)))
+      )
+
+    (when (and match
+              (not (string-equal ";" (match-string 0))))
+      (setq end-cand (match-beginning 0)))
+
+    end-cand))
+
+(defun ada-wisi-find-matching-end ()
+  "Starting at current point, search forward for a matching end.
+Point must have been set by `ada-wisi-find-begin'."
+  (let (end-regexp)
+    ;; Point is at bol
+    (back-to-indentation)
+    (when (looking-at ada-wisi-named-begin-regexp)
+      (skip-syntax-forward "ws")
+      (skip-syntax-forward " ")
+      (when (looking-at "body\\|type")
+       (goto-char (match-end 0))
+       (skip-syntax-forward " "))
+      (setq end-regexp
+           (concat "end +"
+                   (buffer-substring-no-properties
+                    (point)
+                    (progn
+                      (skip-syntax-forward "ws._")
+                      (point)))
+                   ";"))
+      (if (search-forward-regexp end-regexp nil t)
+         (progn
+           (while (and (ada-in-string-or-comment-p)
+                       (search-forward-regexp end-regexp)))
+           (point))
+
+       ;; matching end not found
+       nil)
+      )))
+
+(cl-defmethod wisi-parse-expand-region ((_parser ada-wisi-parser) begin end)
+  (let (begin-cand end-cand result)
+    (save-excursion
+      (goto-char begin)
+
+      (setq begin-cand (ada-wisi-find-begin))
+      (if (= begin-cand (point-min)) ;; No code between BEGIN and bob
+         (progn
+           (goto-char end)
+           (setq result (cons begin-cand (ada-wisi-find-end))))
+
+       (setq end-cand (ada-wisi-find-matching-end))
+       (if (and end-cand
+                (>= end-cand end))
+           (setq result (cons begin-cand end-cand))
+         (goto-char end)
+         (setq result (cons begin-cand (ada-wisi-find-end))))
+
+       ))
+    result))
+
+(defun ada-wisi-show-expanded-region ()
+  "For debugging. Expand currently selected region."
+  (interactive)
+  (let ((region (wisi-parse-expand-region wisi--parser (region-beginning) 
(region-end))))
+    (message "pre (%d . %d) post %s" (region-beginning) (region-end) region)
+    (set-mark (car region))
+    (goto-char (cdr region))
+    ))
+
+(cl-defmethod wisi-parse-adjust-indent ((_parser ada-wisi-parser) indent 
repair)
+  (cond
+   ((or (wisi-list-memq (wisi--parse-error-repair-inserted repair) '(BEGIN IF 
LOOP))
+       (wisi-list-memq (wisi--parse-error-repair-deleted repair) '(END)))
+    ;; Error token terminates the block containing the start token
+    (- indent ada-indent))
+
+   ((memq 'CASE (wisi--parse-error-repair-inserted repair))
+    ;; We don't need to handle comments between 'case' and 'when'; the
+    ;; 'case' is virtual.
+    (- indent (+ ada-indent ada-indent-when)))
+
+   (t indent)
+   ))
+
 (defvar ada-parser nil) ;; declared, set in ada-mode.el for parser detection
 (defvar ada-process-token-table nil) ;; ada-process.el
 (defvar ada-process-face-table nil) ;; ada-process.el
diff --git a/packages/ada-mode/ada_lr1_parse_table.txt.gz 
b/packages/ada-mode/ada_lr1_parse_table.txt.gz
index 4533e27..8dd52ba 100644
Binary files a/packages/ada-mode/ada_lr1_parse_table.txt.gz and 
b/packages/ada-mode/ada_lr1_parse_table.txt.gz differ
diff --git a/packages/ada-mode/ada_mode_gps_indent.adb 
b/packages/ada-mode/ada_mode_gps_indent.adb
deleted file mode 100644
index ea8b0c0..0000000
--- a/packages/ada-mode/ada_mode_gps_indent.adb
+++ /dev/null
@@ -1,323 +0,0 @@
---  Abstract :
---
---  Back end for Emacs Ada mode indentation engine, using GPS
---  indentation code.
---
---  Copyright (C) 2014, 2017 Free Software Foundation, Inc.
---
---  This program is free software; you can redistribute it and/or
---  modify it under terms of the GNU General Public License as
---  published by the Free Software Foundation; either version 3, or (at
---  your option) any later version. This program is distributed in the
---  hope that it will be useful, but WITHOUT ANY WARRANTY; without even
---  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
---  PURPOSE. See the GNU General Public License for more details. You
---  should have received a copy of the GNU General Public License
---  distributed with this program; see file COPYING. If not, write to
---  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
---  MA 02110-1335, USA.
-
-pragma License (GPL);
-
-with Ada.Command_Line;
-with Ada.Exceptions;
-with Ada.Strings.Fixed;
-with Ada.Strings.Unbounded;
-with Ada.Text_IO; use Ada.Text_IO;
-with Ada_Analyzer;
-with Case_Handling;
-with GNAT.OS_Lib;
-with GNAT.Traceback.Symbolic;
-with GNATCOLL.Symbols;
-with Language;
-with System.Storage_Elements;
-procedure Ada_Mode_GPS_Indent is
-
-   Programmer_Error : exception;
-
-   Version : constant String := "1.001";
-   --  Format: API_version . patch_level
-   --
-   --  API_version match ada-gps.el ada-gps-indent-exec-api-version.
-   --
-   --  Bump API_version for change in commands/response; bump patch
-   --  level for patches to GPS indentation code.
-
-   Prompt : constant String := "GPS_Indent> ";
-
-   --  Indentation parameters to Analyze_Ada_Source
-   --  Defaults for debugging.
-   Indent_Level      : Natural               := 0;                     -- 
ada-indent
-   Indent_Continue   : Natural               := 0;                     -- 
ada-broken-indent
-   Indent_Case_Extra : Language.Indent_Style := Language.Non_RM_Style; -- 
derived from ada-indent-when
-   Indent_Record     : Natural               := 0;                     -- 
ada-indent-record-rel-type
-
-   procedure Usage
-   is begin
-      Put_Line ("Prompt is '" & Prompt & "'");
-      Put_Line ("commands are case sensitive");
-      Put_Line ("each command starts with a two-character decimal count of 
bytes in command");
-      New_Line;
-      Put_Line ("Commands: ");
-      New_Line;
-      Put_Line ("07version");
-      Put_Line ("  outputs: <version>");
-      New_Line;
-      Put_Line ("NNset_params <ada-indent> <ada-indent-broken> 
<ada-indent-when>");
-      New_Line;
-      Put_Line ("NNcompute_indent <line> <text_byte_count><text>");
-      Put_Line ("  first line is 1 (emacs convention)");
-      Put_Line ("  text must be UTF8 encoded");
-      Put_Line ("  outputs: <line number> <indent><newline>");
-      Put_Line ("  no indent is 0 (emacs convention)");
-      New_Line;
-      Put_Line ("NNcompute_region_indent <start line> <end line> 
<text_byte_count><text>");
-      Put_Line ("  outputs for each line: <line number> <indent><newline>");
-      New_Line;
-      Put_Line ("NNnoop <text_byte_count><text>");
-      Put_Line ("  Receive text as in 'compute_indent', otherwise no 
operation.");
-      Put_Line ("  Used to time sending buffer text.");
-      New_Line;
-      Put_Line ("04exit");
-   end Usage;
-
-   procedure Read_Input
-     (A : System.Address;
-      N : Integer)
-   is
-      use System.Storage_Elements;
-
-      B         : System.Address := A;
-      Remaining : Integer        := N;
-      Read      : Integer;
-   begin
-      --  WORKAROUND: with GNAT GPL 2016, GNAT.OS_Lib.Read does _not_
-      --  wait for all N bytes or EOF; it returns as soon as it gets
-      --  some bytes.
-      --
-      --  Note that with this loop we cannot detect EOF; that's ok for
-      --  this application.
-      loop
-         Read := GNAT.OS_Lib.Read (GNAT.OS_Lib.Standin, B, Remaining);
-         Remaining := Remaining - Read;
-         exit when Remaining <= 0;
-         B := B + Storage_Offset (Read);
-      end loop;
-   end Read_Input;
-
-   function Get_Command_Length return Integer
-   is
-      Temp : aliased String (1 .. 2) := "  ";
-   begin
-      Read_Input (Temp'Address, 2);
-      return Integer'Value (Temp);
-
-   exception
-   when Constraint_Error =>
-      --  From Integer'Value
-      raise Programmer_Error with "command byte count not provided; got '" & 
Temp & "'";
-   end Get_Command_Length;
-
-   function Get_Integer
-     (Source : in     String;
-      Last   : in out Integer)
-     return Integer
-   is
-      use Ada.Exceptions;
-      use Ada.Strings.Fixed;
-      First : constant Integer := Last + 2; -- final char of previous 
word/integer, space
-   begin
-      Last := Index
-        (Source  => Source,
-         Pattern => " ",
-         From    => First);
-
-      if Last = 0 then
-         Last := Source'Last;
-      else
-         Last := Last - 1;
-      end if;
-
-      return Integer'Value (Source (First .. Last));
-   exception
-   when E : others =>
-      Put_Line ("bad integer '" & Source (First .. Source'Last) & "'");
-      Put_Line ("Exception : " & Exception_Name (E));
-      Put_Line (Exception_Message (E));
-      raise;
-   end Get_Integer;
-
-   procedure Replace_Cb
-     (Line    : in Natural;
-      First   : in Natural;
-      Last    : in Natural;
-      Replace : in String)
-   is
-      pragma Unreferenced (Last);
-   begin
-      --  analyze calls replace_cb for ":", ":=" etc. We only
-      --  want the leading spaces, for indentation.
-      if Replace'Length > 0 and First = 1 then
-         Put_Line (Natural'Image (Line) & Natural'Image (Replace'Length));
-      end if;
-   end Replace_Cb;
-
-   procedure Compute_Indent
-     (Start_Line : in Natural;
-      End_Line   : in Natural;
-      Byte_Count : in Integer)
-   is
-      use Ada.Strings.Unbounded;
-      Buffer : aliased String_Access := new String (1 .. Byte_Count);
-   begin
-      Read_Input (Buffer.all'Address, Byte_Count);
-
-      Ada_Analyzer.Analyze_Ada_Source
-        (Buffer.all, GNATCOLL.Symbols.Allocate,
-         Indent_Params          =>
-           (Indent_Level        => Indent_Level,
-            Indent_Continue     => Indent_Continue,
-            Indent_Decl         => 2, -- no ada-mode equivalent
-            Indent_Conditional  => 1, -- no ada-mode equivalent
-            Indent_Record       => Indent_Record,
-            Indent_Case_Extra   => Indent_Case_Extra,
-            Casing_Policy       => Case_Handling.Disabled,
-            Reserved_Casing     => Case_Handling.Unchanged,
-            Ident_Casing        => Case_Handling.Unchanged,
-            Format_Operators    => False,
-            Use_Tabs            => False,
-            Align_On_Colons     => False,
-            Align_On_Arrows     => False,
-            Align_Decl_On_Colon => False,
-            Indent_Comments     => True,
-            Stick_Comments      => False), -- no ada-mode equivalent.
-         --  Stick_Comments = True causes comments to be not indented.
-
-         From                   => Start_Line,
-         To                     => End_Line,
-         Replace                => Replace_Cb'Unrestricted_Access);
-
-      Free (Buffer);
-   exception
-   when E : others =>
-      declare
-         use Ada.Exceptions;
-         use GNAT.Traceback.Symbolic;
-      begin
-         Put_Line ("analyze failed on '" & Buffer.all & "'");
-         Put_Line ("Exception : " & Exception_Name (E));
-         Put_Line (Exception_Message (E));
-         Put_Line (Symbolic_Traceback (E));
-      end;
-   end Compute_Indent;
-
-   procedure Receive_Text (Byte_Count : in Integer)
-   is
-      use Ada.Strings.Unbounded;
-      Buffer : aliased String_Access := new String (1 .. Byte_Count);
-   begin
-      Read_Input (Buffer.all'Address, Byte_Count);
-      Free (Buffer);
-   end Receive_Text;
-begin
-
-   Commands :
-   loop
-      Put (Prompt); Flush;
-
-      declare
-         use Ada.Strings.Fixed;
-         Command_Length : constant Integer := Get_Command_Length;
-         Command_Line   : aliased String (1 .. Command_Length);
-         Last           : Integer;
-      begin
-         Read_Input (Command_Line'Address, Command_Length);
-         Last := Index (Source => Command_Line, Pattern => " ");
-
-         if Last = 0 then
-            Last := Command_Line'Last;
-         else
-            Last := Last - 1;
-         end if;
-
-         if Command_Line (1 .. Last) = "exit" then
-            exit Commands;
-
-         elsif Command_Line (1 .. Last) = "version" then
-            Put_Line (Version);
-
-         elsif Command_Line (1 .. Last) = "set_params" then
-            declare
-               Ada_Indent                 : constant Integer := Get_Integer 
(Command_Line, Last);
-               Ada_Broken_Indent          : constant Integer := Get_Integer 
(Command_Line, Last);
-               Ada_Indent_When            : constant Integer := Get_Integer 
(Command_Line, Last);
-               Ada_Indent_Record_Rel_Type : constant Integer := Get_Integer 
(Command_Line, Last);
-            begin
-               Indent_Level    := Ada_Indent;
-               Indent_Continue := Ada_Broken_Indent;
-               Indent_Record   := Ada_Indent_Record_Rel_Type;
-
-               if Ada_Indent_When = 0 then
-                  Indent_Case_Extra := Language.Non_RM_Style;
-               else
-                  Indent_Case_Extra := Language.RM_Style;
-                  --  IMPROVEME: maybe Automatic if ada-indent-when < 0?
-               end if;
-            end;
-
-         elsif Command_Line (1 .. Last) = "compute_indent" then
-            declare
-               Line       : constant Integer := Get_Integer (Command_Line, 
Last);
-               Byte_Count : constant Integer := Get_Integer (Command_Line, 
Last);
-            begin
-               Compute_Indent (Line, Line, Byte_Count);
-            end;
-
-         elsif Command_Line (1 .. Last) = "compute_region_indent" then
-            declare
-               Start_Line : constant Integer := Get_Integer (Command_Line, 
Last);
-               End_Line   : constant Integer := Get_Integer (Command_Line, 
Last);
-               Byte_Count : constant Integer := Get_Integer (Command_Line, 
Last);
-            begin
-               Compute_Indent (Start_Line, End_Line, Byte_Count);
-            end;
-
-         elsif Command_Line (1 .. Last) = "noop" then
-            declare
-               Byte_Count : constant Integer := Get_Integer (Command_Line, 
Last);
-            begin
-               Receive_Text (Byte_Count);
-            end;
-
-         else
-            Put_Line ("unrecognized command '" & Command_Line & "'");
-            Usage;
-         end if;
-      exception
-      when E : Programmer_Error =>
-         declare
-            use Ada.Exceptions;
-         begin
-            Put_Line (Exception_Message (E));
-            Usage;
-            Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
-            exit Commands;
-         end;
-
-      when E : others =>
-         declare
-            use Ada.Exceptions;
-            use GNAT.Traceback.Symbolic;
-         begin
-            Put_Line ("Bad command '" & Command_Line & "'");
-            Put_Line ("Exception : " & Exception_Name (E));
-            Put_Line (Exception_Message (E));
-            Put_Line (Symbolic_Traceback (E));
-            Usage;
-            Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
-            exit Commands;
-         end;
-      end;
-   end loop Commands;
-
-end Ada_Mode_GPS_Indent;
diff --git a/packages/ada-mode/ada_mode_gps_indent.gpr.gp 
b/packages/ada-mode/ada_mode_gps_indent.gpr.gp
deleted file mode 100644
index 1f09cd8..0000000
--- a/packages/ada-mode/ada_mode_gps_indent.gpr.gp
+++ /dev/null
@@ -1,81 +0,0 @@
---  Abstract :
---
---  build ada_mode_gps_indent
---
---  Copyright (C) 2014 Free Software Foundation, Inc.
---
---  This program is free software; you can redistribute it and/or
---  modify it under terms of the GNU General Public License as
---  published by the Free Software Foundation; either version 3, or (at
---  your option) any later version. This program is distributed in the
---  hope that it will be useful, but WITHOUT ANY WARRANTY; without even
---  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
---  PURPOSE. See the GNU General Public License for more details. You
---  should have received a copy of the GNU General Public License
---  distributed with this program; see file COPYING. If not, write to
---  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
---  MA 02110-1335, USA.
-
-with "gnat_util";
-with "gnatcoll_iconv";
-with "gnatcoll_sqlite";
-#if HAVE_GNATCOLL_XREF="yes"
-with "gnatcoll_xref";
-#end if;
-project Ada_Mode_GPS_Indent is
-   for Main use ("ada_mode_gps_indent.adb");
-
-   type GPS_Source_Type is ("ada-mode", "GPS");
-   GPS_Source : GPS_Source_Type := External ("Ada_Mode_GPS_Source", 
"ada-mode");
-
-   case GPS_Source is
-   when "ada-mode" =>
-      for Source_Dirs use (".", "gps_source");
-   when "GPS" =>
-      for Source_Dirs use
-        (".",
-         External ("GPS_ROOT") & "/common/core/src",
-         External ("GPS_ROOT") & "/syntax/src",
-         External ("GPS_ROOT") & "/language/src/"
-        );
-   end case;
-
-   for Object_Dir use "obj";
-
-   for Exec_Dir use ".";
-
-   type Build_Type is ("Debug", "Normal");
-   Build : Build_Type := External ("Ada_Mode_GPS_Indent_Build", "Normal");
-
-   for Languages use ("Ada");
-
-   package Compiler is
-
-      Common_Switches :=
-        ("-g",
-         "-gnata",  -- assertions
-         "-gnatfoqQ",
-         "-gnatVa", -- validity checks
-         "-gnaty3abcefhiklM120nprtx", -- no 'O'; gnatcoll-traces missing 
"overriding"
-         "-gnateE", -- extra info in exceptions
-         "-gnatwaBCeJL",
-         "-fstack-check",
-         "-gnat12");
-
-      case Build is
-         when "Debug" =>
-            for Switches ("Ada") use Common_Switches & ("-O0");
-         when "Normal" =>
-            for Switches ("Ada") use Common_Switches & ("-O2", "-gnatn");
-      end case;
-   end Compiler;
-
-   package Linker is
-      for Default_Switches ("Ada") use ("-lpthread");
-   end Linker;
-
-   package Binder is
-      for default_switches ("Ada") use ("-E"); -- symbolic traceback
-   end Binder;
-
-end Ada_Mode_GPS_Indent;
diff --git a/packages/ada-mode/ada_mode_wisi_lalr_parse.ads 
b/packages/ada-mode/ada_mode_wisi_lalr_parse.ads
index f709796..321edfc 100644
--- a/packages/ada-mode/ada_mode_wisi_lalr_parse.ads
+++ b/packages/ada-mode/ada_mode_wisi_lalr_parse.ads
@@ -2,7 +2,7 @@
 --
 --  External process parser for Ada mode
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -24,10 +24,11 @@ with Gen_Emacs_Wisi_LR_Parse;
 with WisiToken.Parse.LR.McKenzie_Recover.Ada;
 with Wisi.Ada;
 procedure Ada_Mode_Wisi_LALR_Parse is new Gen_Emacs_Wisi_LR_Parse
-  (Parse_Data_Type              => Wisi.Ada.Parse_Data_Type,
-   Name                         => "Ada_mode_wisi_lalr_parse",
-   Descriptor                   => Ada_Process_Actions.Descriptor,
-   Language_Fixes               => 
WisiToken.Parse.LR.McKenzie_Recover.Ada.Language_Fixes'Access,
+  (Parse_Data_Type                       => Wisi.Ada.Parse_Data_Type,
+   Name                                  => "Ada_mode_wisi_lalr_parse",
+   Descriptor                            => Ada_Process_Actions.Descriptor,
+   Partial_Parse_Active                  => 
Ada_Process_Actions.Partial_Parse_Active,
+   Language_Fixes                        => 
WisiToken.Parse.LR.McKenzie_Recover.Ada.Language_Fixes'Access,
    Language_Use_Minimal_Complete_Actions => 
WisiToken.Parse.LR.McKenzie_Recover.Ada.Use_Minimal_Complete_Actions'Access,
-   Language_String_ID_Set       => 
WisiToken.Parse.LR.McKenzie_Recover.Ada.String_ID_Set'Access,
-   Create_Parser                => Ada_Process_LALR_Main.Create_Parser);
+   Language_String_ID_Set                => 
WisiToken.Parse.LR.McKenzie_Recover.Ada.String_ID_Set'Access,
+   Create_Parser                         => 
Ada_Process_LALR_Main.Create_Parser);
diff --git a/packages/ada-mode/ada_mode_wisi_lr1_parse.ads 
b/packages/ada-mode/ada_mode_wisi_lr1_parse.ads
index 3e54061..52af611 100644
--- a/packages/ada-mode/ada_mode_wisi_lr1_parse.ads
+++ b/packages/ada-mode/ada_mode_wisi_lr1_parse.ads
@@ -2,7 +2,7 @@
 --
 --  External process parser for Ada mode
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -24,11 +24,12 @@ with Gen_Emacs_Wisi_LR_Text_Rep_Parse;
 with WisiToken.Parse.LR.McKenzie_Recover.Ada;
 with Wisi.Ada;
 procedure Ada_Mode_Wisi_LR1_Parse is new Gen_Emacs_Wisi_LR_Text_Rep_Parse
-  (Parse_Data_Type              => Wisi.Ada.Parse_Data_Type,
-   Name                         => "Ada_mode_wisi_lr1_parse",
-   Descriptor                   => Ada_Process_Actions.Descriptor,
-   Language_Fixes               => 
WisiToken.Parse.LR.McKenzie_Recover.Ada.Language_Fixes'Access,
+  (Parse_Data_Type                       => Wisi.Ada.Parse_Data_Type,
+   Name                                  => "Ada_mode_wisi_lr1_parse",
+   Descriptor                            => Ada_Process_Actions.Descriptor,
+   Partial_Parse_Active                  => 
Ada_Process_Actions.Partial_Parse_Active,
+   Language_Fixes                        => 
WisiToken.Parse.LR.McKenzie_Recover.Ada.Language_Fixes'Access,
    Language_Use_Minimal_Complete_Actions => 
WisiToken.Parse.LR.McKenzie_Recover.Ada.Use_Minimal_Complete_Actions'Access,
-   Language_String_ID_Set       => 
WisiToken.Parse.LR.McKenzie_Recover.Ada.String_ID_Set'Access,
-   Text_Rep_File_Name           => "ada_lr1_parse_table.txt",
-   Create_Parser                => Ada_Process_LR1_Main.Create_Parser);
+   Language_String_ID_Set                => 
WisiToken.Parse.LR.McKenzie_Recover.Ada.String_ID_Set'Access,
+   Text_Rep_File_Name                    => "ada_lr1_parse_table.txt",
+   Create_Parser                         => 
Ada_Process_LR1_Main.Create_Parser);
diff --git a/packages/ada-mode/ada_mode_wisi_parse.gpr.gp 
b/packages/ada-mode/ada_mode_wisi_parse.gpr.gp
index 02bba4d..158ee54 100644
--- a/packages/ada-mode/ada_mode_wisi_parse.gpr.gp
+++ b/packages/ada-mode/ada_mode_wisi_parse.gpr.gp
@@ -108,13 +108,15 @@ project Ada_Mode_Wisi_Parse is
    end Compiler;
 
    package Builder is
-      case Standard_Common.Profile is
-      when "On" =>
-         for Default_Switches ("Ada") use 
Standard_Common.Builder'Default_Switches ("Ada") & ("-pg");
-
-      when "Off" =>
-         for Default_Switches ("Ada") use 
Standard_Common.Builder'Default_Switches ("Ada");
-      end case;
+      --  Specifying some configuration pragmas can reduce parse times
+      --  by 10% or so, on some systems. But doing so only here causes
+      --  recompiling of wisitoken. If we add Global_ or Local_
+      --  Configuration_Pragmas in wisitoken.gpr, we get compilation
+      --  errors there. So we leave it up to users to patch this if
+      --  they want it.
+      --  for Global_Configuration_Pragmas use "config.pragmas";
+
+      for Global_Compilation_Switches ("Ada") use 
Standard_Common.Builder'Global_Compilation_Switches ("Ada");
 
       --  We use ".exe" extension even on non-Windows, to simplify the 
makefiles.
       for Executable_Suffix use ".exe";
diff --git a/packages/ada-mode/ada_process_actions.adb 
b/packages/ada-mode/ada_process_actions.adb
index a01a89a..a4e8035 100644
--- a/packages/ada-mode/ada_process_actions.adb
+++ b/packages/ada-mode/ada_process_actions.adb
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS text_rep ada.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
@@ -72,12 +72,14 @@ package body Ada_Process_Actions is
    end accept_statement_0;
 
    function accept_statement_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 8, End_Names_Optional);
    end accept_statement_0_check;
@@ -516,23 +518,27 @@ package body Ada_Process_Actions is
    end block_label_0;
 
    function block_label_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 1);
    end block_label_0_check;
 
    function block_label_opt_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 1);
    end block_label_opt_0_check;
@@ -564,12 +570,14 @@ package body Ada_Process_Actions is
    end block_statement_0;
 
    function block_statement_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 1, 7, End_Names_Optional);
    end block_statement_0_check;
@@ -597,12 +605,14 @@ package body Ada_Process_Actions is
    end block_statement_1;
 
    function block_statement_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 1, 5, End_Names_Optional);
    end block_statement_1_check;
@@ -682,8 +692,9 @@ package body Ada_Process_Actions is
          null;
       when Indent =>
          Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Simple, (Int,
-         Ada_Indent_Broken))), (True, (Simple, (Int, 0)), (Simple, (Int, 
Ada_Indent_When))), (False, (Simple, (Int,
-         Ada_Indent_When))), (False, (Simple, (Int, 0))), (False, (Simple, 
(Int, 0))), (False, (Simple, (Int, 0)))));
+         Ada_Indent_Broken))), (True, (Simple, (Int, 0)), (Simple, (Int, 
Ada_Indent_When))), (True, (Simple, (Int,
+         Ada_Indent_When)), (Simple, (Int, Ada_Indent_When))), (False, 
(Simple, (Int, 0))), (False, (Simple, (Int,
+         0))), (False, (Simple, (Int, 0)))));
       end case;
    end case_statement_0;
 
@@ -707,6 +718,75 @@ package body Ada_Process_Actions is
       end case;
    end case_statement_alternative_0;
 
+   procedure compilation_unit_2
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         null;
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Simple, (Int,
+         0)))));
+      end case;
+   end compilation_unit_2;
+
+   procedure compilation_unit_list_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         null;
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Simple, (Int, 0)),
+         (Simple, (Int, 0)))));
+      end case;
+   end compilation_unit_list_0;
+
+   procedure compilation_unit_list_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         null;
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, (1 => (True, 
(Simple, (Int, 0)), (Simple, (Int, 0)))));
+      end case;
+   end compilation_unit_list_1;
+
+   function compilation_unit_list_1_check
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
+    return WisiToken.Semantic_Checks.Check_Status
+   is
+      pragma Unreferenced (Lexer);
+      pragma Unreferenced (Tokens);
+   begin
+      return Terminate_Partial_Parse (Partial_Parse_Active, 
Partial_Parse_Byte_Goal, Recover_Active, Nonterm);
+   end compilation_unit_list_1_check;
+
    procedure component_clause_0
     (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
      Tree      : in out WisiToken.Syntax_Trees.Tree;
@@ -941,8 +1021,9 @@ package body Ada_Process_Actions is
       when Face =>
          null;
       when Indent =>
-         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Simple, (Int,
-         Ada_Indent_Broken))), (False, (Simple, (Int, 0))), (False, (Simple, 
(Int, Ada_Indent)))));
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Simple, (Int,
+         Ada_Indent_Broken)), (Simple, (Int, Ada_Indent_Broken))), (False, 
(Simple, (Int, 0))), (False, (Simple, (Int,
+         Ada_Indent)))));
       end case;
    end elsif_expression_item_0;
 
@@ -960,9 +1041,9 @@ package body Ada_Process_Actions is
       when Face =>
          null;
       when Indent =>
-         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Simple, (Int,
-         Ada_Indent_Broken))), (False, (Simple, (Int, 0))), (True, (Simple, 
(Int, Ada_Indent)), (Simple, (Int,
-         Ada_Indent)))));
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Simple, (Int,
+         Ada_Indent_Broken)), (Simple, (Int, Ada_Indent_Broken))), (False, 
(Simple, (Int, 0))), (True, (Simple, (Int,
+         Ada_Indent)), (Simple, (Int, Ada_Indent)))));
       end case;
    end elsif_statement_item_0;
 
@@ -996,12 +1077,14 @@ package body Ada_Process_Actions is
    end entry_body_0;
 
    function entry_body_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 11, 
End_Names_Optional);
    end entry_body_0_check;
@@ -1656,12 +1739,14 @@ package body Ada_Process_Actions is
    end function_specification_0;
 
    function function_specification_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 2);
    end function_specification_0_check;
@@ -1903,7 +1988,8 @@ package body Ada_Process_Actions is
          null;
       when Indent =>
          Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((True, (Simple, 
(Int, 0)), (Simple, (Int, 0))), (False,
-         (Simple, (Int, -Ada_Indent))), (False, (Simple, (Int, Ada_Indent_When 
- Ada_Indent)))));
+         (Simple, (Int, -Ada_Indent))), (True, (Simple, (Int, Ada_Indent_When 
- Ada_Indent)), (Simple, (Int,
+         Ada_Indent_When - Ada_Indent)))));
       end case;
    end handled_sequence_of_statements_0;
 
@@ -1927,12 +2013,14 @@ package body Ada_Process_Actions is
    end identifier_list_0;
 
    function identifier_opt_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 1);
    end identifier_opt_0_check;
@@ -1954,9 +2042,10 @@ package body Ada_Process_Actions is
       when Face =>
          null;
       when Indent =>
-         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Simple, (Int,
-         Ada_Indent_Broken))), (False, (Simple, (Int, 0))), (False, (Simple, 
(Int, Ada_Indent))), (False, (Simple,
-         (Int, 0))), (False, (Simple, (Int, 0))), (False, (Simple, (Int, 
Ada_Indent)))));
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Simple, (Int,
+         Ada_Indent_Broken)), (Simple, (Int, Ada_Indent_Broken))), (False, 
(Simple, (Int, 0))), (False, (Simple, (Int,
+         Ada_Indent))), (False, (Simple, (Int, 0))), (False, (Simple, (Int, 
0))), (False, (Simple, (Int,
+         Ada_Indent)))));
       end case;
    end if_expression_0;
 
@@ -1976,9 +2065,9 @@ package body Ada_Process_Actions is
       when Face =>
          null;
       when Indent =>
-         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Simple, (Int,
-         Ada_Indent_Broken))), (False, (Simple, (Int, 0))), (False, (Simple, 
(Int, Ada_Indent))), (False, (Simple,
-         (Int, 0))), (False, (Simple, (Int, Ada_Indent)))));
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Simple, (Int,
+         Ada_Indent_Broken)), (Simple, (Int, Ada_Indent_Broken))), (False, 
(Simple, (Int, 0))), (False, (Simple, (Int,
+         Ada_Indent))), (False, (Simple, (Int, 0))), (False, (Simple, (Int, 
Ada_Indent)))));
       end case;
    end if_expression_1;
 
@@ -1998,9 +2087,9 @@ package body Ada_Process_Actions is
       when Face =>
          null;
       when Indent =>
-         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Simple, (Int,
-         Ada_Indent_Broken))), (False, (Simple, (Int, 0))), (False, (Simple, 
(Int, Ada_Indent))), (False, (Simple,
-         (Int, 0)))));
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Simple, (Int,
+         Ada_Indent_Broken)), (Simple, (Int, Ada_Indent_Broken))), (False, 
(Simple, (Int, 0))), (False, (Simple, (Int,
+         Ada_Indent))), (False, (Simple, (Int, 0)))));
       end case;
    end if_expression_2;
 
@@ -2020,8 +2109,9 @@ package body Ada_Process_Actions is
       when Face =>
          null;
       when Indent =>
-         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Simple, (Int,
-         Ada_Indent_Broken))), (False, (Simple, (Int, 0))), (False, (Simple, 
(Int, Ada_Indent)))));
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Simple, (Int,
+         Ada_Indent_Broken)), (Simple, (Int, Ada_Indent_Broken))), (False, 
(Simple, (Int, 0))), (False, (Simple, (Int,
+         Ada_Indent)))));
       end case;
    end if_expression_3;
 
@@ -2046,11 +2136,12 @@ package body Ada_Process_Actions is
       when Face =>
          null;
       when Indent =>
-         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Hanging_1, (Int,
-         Ada_Indent_Broken), (Int, 2 * Ada_Indent_Broken))), (True, (Simple, 
(Int, 0)), (Simple, (Int, Ada_Indent))),
-         (True, (Simple, (Int, Ada_Indent)), (Simple, (Int, Ada_Indent))), 
(False, (Simple, (Int, 0))), (True, (Simple,
-         (Int, 0)), (Simple, (Int, Ada_Indent))), (True, (Simple, (Int, 
Ada_Indent)), (Simple, (Int, Ada_Indent))),
-         (False, (Simple, (Int, 0))), (False, (Simple, (Int, 0))), (False, 
(Simple, (Int, 0)))));
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Hanging_1, (Int,
+         Ada_Indent_Broken), (Int, 2 * Ada_Indent_Broken)), (Simple, (Int, 
Ada_Indent_Broken))), (True, (Simple, (Int,
+         0)), (Simple, (Int, Ada_Indent))), (True, (Simple, (Int, 
Ada_Indent)), (Simple, (Int, Ada_Indent))), (False,
+         (Simple, (Int, 0))), (True, (Simple, (Int, 0)), (Simple, (Int, 
Ada_Indent))), (True, (Simple, (Int,
+         Ada_Indent)), (Simple, (Int, Ada_Indent))), (False, (Simple, (Int, 
0))), (False, (Simple, (Int, 0))), (False,
+         (Simple, (Int, 0)))));
       end case;
    end if_statement_0;
 
@@ -2074,11 +2165,11 @@ package body Ada_Process_Actions is
       when Face =>
          null;
       when Indent =>
-         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Hanging_1, (Int,
-         Ada_Indent_Broken), (Int, 2 * Ada_Indent_Broken))), (True, (Simple, 
(Int, 0)), (Simple, (Int, Ada_Indent))),
-         (True, (Simple, (Int, Ada_Indent)), (Simple, (Int, Ada_Indent))), 
(True, (Simple, (Int, 0)), (Simple, (Int,
-         Ada_Indent))), (True, (Simple, (Int, Ada_Indent)), (Simple, (Int, 
Ada_Indent))), (False, (Simple, (Int, 0))),
-         (False, (Simple, (Int, 0))), (False, (Simple, (Int, 0)))));
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Hanging_1, (Int,
+         Ada_Indent_Broken), (Int, 2 * Ada_Indent_Broken)), (Simple, (Int, 
Ada_Indent_Broken))), (True, (Simple, (Int,
+         0)), (Simple, (Int, Ada_Indent))), (True, (Simple, (Int, 
Ada_Indent)), (Simple, (Int, Ada_Indent))), (True,
+         (Simple, (Int, 0)), (Simple, (Int, Ada_Indent))), (True, (Simple, 
(Int, Ada_Indent)), (Simple, (Int,
+         Ada_Indent))), (False, (Simple, (Int, 0))), (False, (Simple, (Int, 
0))), (False, (Simple, (Int, 0)))));
       end case;
    end if_statement_1;
 
@@ -2101,10 +2192,10 @@ package body Ada_Process_Actions is
       when Face =>
          null;
       when Indent =>
-         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Hanging_1, (Int,
-         Ada_Indent_Broken), (Int, 2 * Ada_Indent_Broken))), (True, (Simple, 
(Int, 0)), (Simple, (Int, Ada_Indent))),
-         (True, (Simple, (Int, Ada_Indent)), (Simple, (Int, Ada_Indent))), 
(False, (Simple, (Int, 0))), (False,
-         (Simple, (Int, 0))), (False, (Simple, (Int, 0))), (False, (Simple, 
(Int, 0)))));
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Hanging_1, (Int,
+         Ada_Indent_Broken), (Int, 2 * Ada_Indent_Broken)), (Simple, (Int, 
Ada_Indent_Broken))), (True, (Simple, (Int,
+         0)), (Simple, (Int, Ada_Indent))), (True, (Simple, (Int, 
Ada_Indent)), (Simple, (Int, Ada_Indent))), (False,
+         (Simple, (Int, 0))), (False, (Simple, (Int, 0))), (False, (Simple, 
(Int, 0))), (False, (Simple, (Int, 0)))));
       end case;
    end if_statement_2;
 
@@ -2125,10 +2216,10 @@ package body Ada_Process_Actions is
       when Face =>
          null;
       when Indent =>
-         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Hanging_1, (Int,
-         Ada_Indent_Broken), (Int, 2 * Ada_Indent_Broken))), (True, (Simple, 
(Int, 0)), (Simple, (Int, Ada_Indent))),
-         (True, (Simple, (Int, Ada_Indent)), (Simple, (Int, Ada_Indent))), 
(False, (Simple, (Int, 0))), (False,
-         (Simple, (Int, 0))), (False, (Simple, (Int, 0)))));
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (True, (Hanging_1, (Int,
+         Ada_Indent_Broken), (Int, 2 * Ada_Indent_Broken)), (Simple, (Int, 
Ada_Indent_Broken))), (True, (Simple, (Int,
+         0)), (Simple, (Int, Ada_Indent))), (True, (Simple, (Int, 
Ada_Indent)), (Simple, (Int, Ada_Indent))), (False,
+         (Simple, (Int, 0))), (False, (Simple, (Int, 0))), (False, (Simple, 
(Int, 0)))));
       end case;
    end if_statement_3;
 
@@ -2325,12 +2416,14 @@ package body Ada_Process_Actions is
    end loop_statement_0;
 
    function loop_statement_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 1, 7, End_Names_Optional);
    end loop_statement_0_check;
@@ -2357,12 +2450,14 @@ package body Ada_Process_Actions is
    end loop_statement_1;
 
    function loop_statement_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 1, 6, End_Names_Optional);
    end loop_statement_1_check;
@@ -2409,12 +2504,14 @@ package body Ada_Process_Actions is
    end name_1;
 
    function name_2_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 1);
    end name_2_check;
@@ -2438,34 +2535,40 @@ package body Ada_Process_Actions is
    end name_5;
 
    function name_5_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 1);
    end name_5_check;
 
    function name_7_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 1);
    end name_7_check;
 
    function name_opt_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 1);
    end name_opt_0_check;
@@ -2825,12 +2928,14 @@ package body Ada_Process_Actions is
    end package_body_0;
 
    function package_body_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 3, 10, 
End_Names_Optional);
    end package_body_0_check;
@@ -2860,12 +2965,14 @@ package body Ada_Process_Actions is
    end package_body_1;
 
    function package_body_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 3, 8, End_Names_Optional);
    end package_body_1_check;
@@ -2957,12 +3064,14 @@ package body Ada_Process_Actions is
    end package_specification_0;
 
    function package_specification_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 9, End_Names_Optional);
    end package_specification_0_check;
@@ -2992,12 +3101,14 @@ package body Ada_Process_Actions is
    end package_specification_1;
 
    function package_specification_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 7, End_Names_Optional);
    end package_specification_1_check;
@@ -3378,12 +3489,14 @@ package body Ada_Process_Actions is
    end procedure_specification_0;
 
    function procedure_specification_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 2);
    end procedure_specification_0_check;
@@ -3413,12 +3526,14 @@ package body Ada_Process_Actions is
    end protected_body_0;
 
    function protected_body_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 3, 8, End_Names_Optional);
    end protected_body_0_check;
@@ -3465,12 +3580,14 @@ package body Ada_Process_Actions is
    end protected_definition_0;
 
    function protected_definition_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 5);
    end protected_definition_0_check;
@@ -3495,12 +3612,14 @@ package body Ada_Process_Actions is
    end protected_definition_1;
 
    function protected_definition_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 3);
    end protected_definition_1_check;
@@ -3532,12 +3651,14 @@ package body Ada_Process_Actions is
    end protected_type_declaration_0;
 
    function protected_type_declaration_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 3, 10, 
End_Names_Optional);
    end protected_type_declaration_0_check;
@@ -3568,12 +3689,14 @@ package body Ada_Process_Actions is
    end protected_type_declaration_1;
 
    function protected_type_declaration_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 3, 7, End_Names_Optional);
    end protected_type_declaration_1_check;
@@ -3854,12 +3977,14 @@ package body Ada_Process_Actions is
    end selected_component_0;
 
    function selected_component_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Merge_Names (Nonterm, Tokens, 1, 3);
    end selected_component_0_check;
@@ -3901,12 +4026,14 @@ package body Ada_Process_Actions is
    end selected_component_2;
 
    function selected_component_2_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Merge_Names (Nonterm, Tokens, 1, 3);
    end selected_component_2_check;
@@ -4189,12 +4316,14 @@ package body Ada_Process_Actions is
    end single_protected_declaration_0;
 
    function single_protected_declaration_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 8, End_Names_Optional);
    end single_protected_declaration_0_check;
@@ -4224,12 +4353,14 @@ package body Ada_Process_Actions is
    end single_protected_declaration_1;
 
    function single_protected_declaration_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 5, End_Names_Optional);
    end single_protected_declaration_1_check;
@@ -4261,12 +4392,14 @@ package body Ada_Process_Actions is
    end single_task_declaration_0;
 
    function single_task_declaration_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 10, 
End_Names_Optional);
    end single_task_declaration_0_check;
@@ -4296,12 +4429,14 @@ package body Ada_Process_Actions is
    end single_task_declaration_1;
 
    function single_task_declaration_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 7, End_Names_Optional);
    end single_task_declaration_1_check;
@@ -4354,12 +4489,14 @@ package body Ada_Process_Actions is
    end subprogram_body_0;
 
    function subprogram_body_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 9, End_Names_Optional);
    end subprogram_body_0_check;
@@ -4444,23 +4581,27 @@ package body Ada_Process_Actions is
    end subprogram_renaming_declaration_0;
 
    function subprogram_specification_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 1);
    end subprogram_specification_0_check;
 
    function subprogram_specification_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 1);
    end subprogram_specification_1_check;
@@ -4605,12 +4746,14 @@ package body Ada_Process_Actions is
    end task_body_0;
 
    function task_body_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 3, 10, 
End_Names_Optional);
    end task_body_0_check;
@@ -4702,12 +4845,14 @@ package body Ada_Process_Actions is
    end task_type_declaration_0;
 
    function task_type_declaration_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 3, 12, 
End_Names_Optional);
    end task_type_declaration_0_check;
@@ -4739,12 +4884,14 @@ package body Ada_Process_Actions is
    end task_type_declaration_1;
 
    function task_type_declaration_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 3, 9, End_Names_Optional);
    end task_type_declaration_1_check;
diff --git a/packages/ada-mode/ada_process_actions.ads 
b/packages/ada-mode/ada_process_actions.ads
index 7a789a1..6b61e0a 100644
--- a/packages/ada-mode/ada_process_actions.ads
+++ b/packages/ada-mode/ada_process_actions.ads
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS text_rep ada.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
@@ -27,7 +27,7 @@ package Ada_Process_Actions is
       Last_Terminal                 => 107,
       First_Nonterminal             => 108,
       Last_Nonterminal              => 332,
-      EOF_ID                        => 107,
+      EOI_ID                        => 107,
       Accept_ID                     => 108,
       Case_Insensitive              => True,
       New_Line_ID                   => 1,
@@ -873,6 +873,21 @@ package Ada_Process_Actions is
      Tree      : in out WisiToken.Syntax_Trees.Tree;
      Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
      Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure compilation_unit_2
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure compilation_unit_list_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure compilation_unit_list_1
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
    procedure component_clause_0
     (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
      Tree      : in out WisiToken.Syntax_Trees.Tree;
@@ -1829,183 +1844,228 @@ package Ada_Process_Actions is
      Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
      Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
    function accept_statement_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function block_label_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function block_label_opt_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function block_statement_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function block_statement_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
+    return WisiToken.Semantic_Checks.Check_Status;
+   function compilation_unit_list_1_check
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function entry_body_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function function_specification_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function identifier_opt_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function loop_statement_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function loop_statement_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function name_2_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function name_5_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function name_7_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function name_opt_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function package_body_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function package_body_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function package_specification_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function package_specification_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function procedure_specification_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function protected_body_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function protected_definition_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function protected_definition_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function protected_type_declaration_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function protected_type_declaration_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function selected_component_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function selected_component_2_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function single_protected_declaration_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function single_protected_declaration_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function single_task_declaration_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function single_task_declaration_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function subprogram_body_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function subprogram_specification_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function subprogram_specification_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function task_body_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function task_type_declaration_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function task_type_declaration_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
+
+   Partial_Parse_Active    : Boolean := False;
+   Partial_Parse_Byte_Goal : WisiToken.Buffer_Pos := WisiToken.Buffer_Pos'Last;
 end Ada_Process_Actions;
diff --git a/packages/ada-mode/ada_process_lalr_main.adb 
b/packages/ada-mode/ada_process_lalr_main.adb
index ede307e..a95a398 100644
--- a/packages/ada-mode/ada_process_lalr_main.adb
+++ b/packages/ada-mode/ada_process_lalr_main.adb
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LALR Ada_Emacs re2c 
PROCESS ada.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
@@ -48,9 +48,9 @@ package body Ada_Process_LALR_Main is
             3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 
2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3,
             3, 2, 1, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 
3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3),
          Delete =>
-           (3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 2, 3, 1, 3, 3, 3, 3, 1, 3, 1, 
3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3,
+           (3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 2, 3, 1, 3, 3, 3, 3, 1, 3, 2, 
3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 3, 2, 3,
             3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-            3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 
3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3),
+            3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 
3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3),
          Push_Back =>
            (2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
             2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -204,11 +204,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (0), 325, 115);
             Add_Goto (Table.States (0), 331, 116);
             Add_Goto (Table.States (0), 332, 117);
-            Set_Minimal_Action (Table.States (0).Minimal_Complete_Actions, (1 
=> (Shift, 52, 20)));
+            Table.States (0).Minimal_Complete_Action := (Shift, 41, 13);
             Table.States (1).Productions := WisiToken.To_Vector (((113, 0), 
(113, 1)));
             Add_Action (Table.States (1), 104, 118);
             Add_Error (Table.States (1));
-            Set_Minimal_Action (Table.States (1).Minimal_Complete_Actions, (1 
=> (Shift, 104, 118)));
+            Table.States (1).Minimal_Complete_Action := (Shift, 104, 118);
             Table.States (2).Productions := WisiToken.To_Vector ((1 => (303, 
8)));
             Add_Action (Table.States (2), 104, 119);
             Add_Action (Table.States (2), 105, 33);
@@ -218,7 +218,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (2), 239, 120);
             Add_Goto (Table.States (2), 272, 92);
             Add_Goto (Table.States (2), 293, 97);
-            Set_Minimal_Action (Table.States (2).Minimal_Complete_Actions, (1 
=> (Shift, 105, 33)));
+            Table.States (2).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (3).Productions := WisiToken.To_Vector ((1 => (139, 
0)));
             Add_Action (Table.States (3), 3, 121);
             Add_Action (Table.States (3), 35, Reduce, (192, 1), 0, null, null);
@@ -254,7 +254,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (3), 320, 144);
             Add_Goto (Table.States (3), 321, 145);
             Add_Goto (Table.States (3), 330, 146);
-            Set_Minimal_Action (Table.States (3).Minimal_Complete_Actions, (1 
=> (Reduce, 192, 0)));
+            Table.States (3).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (4).Productions := WisiToken.To_Vector (((161, 0), 
(161, 1)));
             Add_Action (Table.States (4), 3, 121);
             Add_Action (Table.States (4), 39, 122);
@@ -291,14 +291,14 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (4), 320, 144);
             Add_Goto (Table.States (4), 321, 145);
             Add_Goto (Table.States (4), 330, 146);
-            Set_Minimal_Action (Table.States (4).Minimal_Complete_Actions, 
((Shift, 70, 147), (Reduce, 192, 0)));
+            Table.States (4).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (5).Productions := WisiToken.To_Vector (((190, 0), 
(190, 1)));
             Add_Action (Table.States (5), 72, Reduce, (220, 1), 0, null, null);
             Add_Action (Table.States (5), 96, Reduce, (220, 1), 0, null, null);
             Add_Action (Table.States (5), 104, 149);
             Add_Error (Table.States (5));
             Add_Goto (Table.States (5), 220, 150);
-            Set_Minimal_Action (Table.States (5).Minimal_Complete_Actions, (1 
=> (Reduce, 220, 0)));
+            Table.States (5).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (6).Productions := WisiToken.To_Vector (((121, 0), 
(127, 0), (182, 0), (229, 1), (281, 0)));
             Add_Action (Table.States (6), 104, 151);
             Add_Action (Table.States (6), 105, 152);
@@ -311,7 +311,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (6), 239, 157);
             Add_Goto (Table.States (6), 272, 92);
             Add_Goto (Table.States (6), 293, 97);
-            Set_Minimal_Action (Table.States (6).Minimal_Complete_Actions, 
((Shift, 105, 152), (Reduce, 231, 0)));
+            Table.States (6).Minimal_Complete_Action := (Reduce, 231, 0);
             Table.States (7).Productions := WisiToken.To_Vector ((1 => (207, 
0)));
             Add_Action (Table.States (7), 104, 119);
             Add_Action (Table.States (7), 105, 33);
@@ -321,7 +321,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (7), 239, 158);
             Add_Goto (Table.States (7), 272, 92);
             Add_Goto (Table.States (7), 293, 97);
-            Set_Minimal_Action (Table.States (7).Minimal_Complete_Actions, (1 
=> (Shift, 105, 33)));
+            Table.States (7).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (8).Productions := WisiToken.To_Vector (((210, 0), 
(210, 1), (215, 0), (215, 1), (215, 2)));
             Add_Action (Table.States (8), 29, 159, (210, 1), 1, 
generic_formal_part_1'Access, null);
             Add_Action (Table.States (8), 47, 160, (210, 1), 1, 
generic_formal_part_1'Access, null);
@@ -341,12 +341,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (8), 219, 171);
             Add_Goto (Table.States (8), 257, 172);
             Add_Goto (Table.States (8), 331, 173);
-            Set_Minimal_Action (Table.States (8).Minimal_Complete_Actions, 
((Shift, 29, 159), (Shift, 47, 160), (Shift,
-            50, 161), (Reduce, 210, 1)));
+            Table.States (8).Minimal_Complete_Action := (Reduce, 210, 1);
             Table.States (9).Productions := WisiToken.To_Vector ((1 => (303, 
3)));
             Add_Action (Table.States (9), 104, 174);
             Add_Error (Table.States (9));
-            Set_Minimal_Action (Table.States (9).Minimal_Complete_Actions, (1 
=> (Shift, 104, 174)));
+            Table.States (9).Minimal_Complete_Action := (Shift, 104, 174);
             Table.States (10).Productions := WisiToken.To_Vector (((222, 0), 
(222, 1), (222, 2), (222, 3)));
             Add_Action (Table.States (10), 3, 121);
             Add_Action (Table.States (10), 39, 122);
@@ -382,23 +381,23 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (10), 320, 144);
             Add_Goto (Table.States (10), 321, 145);
             Add_Goto (Table.States (10), 330, 146);
-            Set_Minimal_Action (Table.States (10).Minimal_Complete_Actions, (1 
=> (Reduce, 192, 0)));
+            Table.States (10).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (11).Productions := WisiToken.To_Vector (((332, 0), 
(332, 1)));
             Add_Action (Table.States (11), 49, 176);
             Add_Action (Table.States (11), 74, 177);
             Add_Error (Table.States (11));
-            Set_Minimal_Action (Table.States (11).Minimal_Complete_Actions, 
((Shift, 49, 176), (Shift, 74, 177)));
+            Table.States (11).Minimal_Complete_Action := (Shift, 74, 177);
             Table.States (12).Productions := WisiToken.To_Vector ((1 => (246, 
0)));
             Add_Action (Table.States (12), 46, 178);
             Add_Error (Table.States (12));
-            Set_Minimal_Action (Table.States (12).Minimal_Complete_Actions, (1 
=> (Shift, 46, 178)));
+            Table.States (12).Minimal_Complete_Action := (Shift, 46, 178);
             Table.States (13).Productions := WisiToken.To_Vector ((1 => (303, 
0)));
             Add_Action (Table.States (13), 96, 179);
             Add_Error (Table.States (13));
-            Set_Minimal_Action (Table.States (13).Minimal_Complete_Actions, (1 
=> (Shift, 96, 179)));
+            Table.States (13).Minimal_Complete_Action := (Shift, 96, 179);
             Table.States (14).Productions := WisiToken.To_Vector ((1 => (246, 
1)));
             Add_Action (Table.States (14), (25, 29, 50), (246, 1), 1, 
overriding_indicator_opt_1'Access, null);
-            Set_Minimal_Action (Table.States (14).Minimal_Complete_Actions, (1 
=> (Reduce, 246, 1)));
+            Table.States (14).Minimal_Complete_Action := (Reduce, 246, 1);
             Table.States (15).Productions := WisiToken.To_Vector (((213, 0), 
(247, 0), (247, 1), (248, 0), (250, 0),
             (251, 0), (251, 1)));
             Add_Action (Table.States (15), 14, 180);
@@ -410,11 +409,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (15), 239, 181);
             Add_Goto (Table.States (15), 272, 92);
             Add_Goto (Table.States (15), 293, 97);
-            Set_Minimal_Action (Table.States (15).Minimal_Complete_Actions, 
((Shift, 14, 180), (Shift, 105, 33)));
+            Table.States (15).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (16).Productions := WisiToken.To_Vector (((257, 0), 
(257, 1), (257, 2)));
             Add_Action (Table.States (16), 104, 182);
             Add_Error (Table.States (16));
-            Set_Minimal_Action (Table.States (16).Minimal_Complete_Actions, (1 
=> (Shift, 104, 182)));
+            Table.States (16).Minimal_Complete_Action := (Shift, 104, 182);
             Table.States (17).Productions := WisiToken.To_Vector (((142, 2), 
(332, 2)));
             Add_Action (Table.States (17), 25, Reduce, (246, 2), 0, null, 
null);
             Add_Action (Table.States (17), 28, 183);
@@ -482,7 +481,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (17), 319, 113);
             Add_Goto (Table.States (17), 325, 115);
             Add_Goto (Table.States (17), 331, 116);
-            Set_Minimal_Action (Table.States (17).Minimal_Complete_Actions, 
((Shift, 71, 28), (Shift, 74, 184)));
+            Table.States (17).Minimal_Complete_Action := (Reduce, 246, 0);
             Table.States (18).Productions := WisiToken.To_Vector ((1 => (262, 
0)));
             Add_Action (Table.States (18), 104, 119);
             Add_Action (Table.States (18), 105, 33);
@@ -492,15 +491,14 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (18), 239, 187);
             Add_Goto (Table.States (18), 272, 92);
             Add_Goto (Table.States (18), 293, 97);
-            Set_Minimal_Action (Table.States (18).Minimal_Complete_Actions, (1 
=> (Shift, 105, 33)));
+            Table.States (18).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (19).Productions := WisiToken.To_Vector (((264, 0), 
(265, 0), (271, 0), (271, 1), (304, 0),
             (304, 1)));
             Add_Action (Table.States (19), 14, 188);
             Add_Action (Table.States (19), 69, 189);
             Add_Action (Table.States (19), 104, 190);
             Add_Error (Table.States (19));
-            Set_Minimal_Action (Table.States (19).Minimal_Complete_Actions, 
((Shift, 14, 188), (Shift, 69, 189),
-            (Shift, 104, 190)));
+            Table.States (19).Minimal_Complete_Action := (Shift, 104, 190);
             Table.States (20).Productions := WisiToken.To_Vector (((276, 0), 
(276, 1), (276, 2)));
             Add_Action (Table.States (20), 96, 191);
             Add_Action (Table.States (20), 104, 119);
@@ -511,7 +509,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (20), 239, 192);
             Add_Goto (Table.States (20), 272, 92);
             Add_Goto (Table.States (20), 293, 97);
-            Set_Minimal_Action (Table.States (20).Minimal_Complete_Actions, 
((Shift, 96, 191), (Shift, 105, 33)));
+            Table.States (20).Minimal_Complete_Action := (Shift, 96, 191);
             Table.States (21).Productions := WisiToken.To_Vector (((290, 0), 
(290, 1)));
             Add_Action (Table.States (21), 104, 119);
             Add_Action (Table.States (21), 105, 33);
@@ -521,7 +519,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (21), 239, 193);
             Add_Goto (Table.States (21), 272, 92);
             Add_Goto (Table.States (21), 293, 97);
-            Set_Minimal_Action (Table.States (21).Minimal_Complete_Actions, (1 
=> (Shift, 105, 33)));
+            Table.States (21).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (22).Productions := WisiToken.To_Vector (((196, 0), 
(196, 1), (302, 0)));
             Add_Action (Table.States (22), 3, 121);
             Add_Action (Table.States (22), 21, Reduce, (195, 1), 0, null, 
null);
@@ -560,12 +558,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (22), 320, 144);
             Add_Goto (Table.States (22), 321, 145);
             Add_Goto (Table.States (22), 330, 146);
-            Set_Minimal_Action (Table.States (22).Minimal_Complete_Actions, 
((Shift, 104, 194), (Reduce, 192, 0),
-            (Reduce, 195, 0)));
+            Table.States (22).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (23).Productions := WisiToken.To_Vector ((1 => (315, 
0)));
             Add_Action (Table.States (23), 76, 198);
             Add_Error (Table.States (23));
-            Set_Minimal_Action (Table.States (23).Minimal_Complete_Actions, (1 
=> (Shift, 76, 198)));
+            Table.States (23).Minimal_Complete_Action := (Shift, 76, 198);
             Table.States (24).Productions := WisiToken.To_Vector (((126, 0), 
(152, 0), (294, 0), (294, 1), (323, 0)));
             Add_Action (Table.States (24), 4, 1);
             Add_Action (Table.States (24), 18, 4);
@@ -590,23 +587,22 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (24), 296, 208);
             Add_Goto (Table.States (24), 297, 209);
             Add_Goto (Table.States (24), 324, 210);
-            Set_Minimal_Action (Table.States (24).Minimal_Complete_Actions, 
((Shift, 105, 33), (Reduce, 297, 0)));
+            Table.States (24).Minimal_Complete_Action := (Reduce, 297, 0);
             Table.States (25).Productions := WisiToken.To_Vector ((1 => (313, 
0)));
             Add_Action (Table.States (25), 104, 211);
             Add_Error (Table.States (25));
-            Set_Minimal_Action (Table.States (25).Minimal_Complete_Actions, (1 
=> (Shift, 104, 211)));
+            Table.States (25).Minimal_Complete_Action := (Shift, 104, 211);
             Table.States (26).Productions := WisiToken.To_Vector (((305, 0), 
(305, 1), (305, 2), (316, 0), (317, 0),
             (319, 0), (319, 1), (319, 2)));
             Add_Action (Table.States (26), 14, 212);
             Add_Action (Table.States (26), 69, 213);
             Add_Action (Table.States (26), 104, 214);
             Add_Error (Table.States (26));
-            Set_Minimal_Action (Table.States (26).Minimal_Complete_Actions, 
((Shift, 14, 212), (Shift, 69, 213),
-            (Shift, 104, 214)));
+            Table.States (26).Minimal_Complete_Action := (Shift, 104, 214);
             Table.States (27).Productions := WisiToken.To_Vector (((206, 0), 
(223, 0), (223, 1), (259, 0), (260, 0)));
             Add_Action (Table.States (27), 104, 215);
             Add_Error (Table.States (27));
-            Set_Minimal_Action (Table.States (27).Minimal_Complete_Actions, (1 
=> (Shift, 104, 215)));
+            Table.States (27).Minimal_Complete_Action := (Shift, 104, 215);
             Table.States (28).Productions := WisiToken.To_Vector (((331, 0), 
(331, 1), (331, 2)));
             Add_Action (Table.States (28), 9, 216);
             Add_Action (Table.States (28), 69, 217);
@@ -619,8 +615,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (28), 239, 219);
             Add_Goto (Table.States (28), 272, 92);
             Add_Goto (Table.States (28), 293, 97);
-            Set_Minimal_Action (Table.States (28).Minimal_Complete_Actions, 
((Shift, 9, 216), (Shift, 69, 217), (Shift,
-            105, 33)));
+            Table.States (28).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (29).Productions := WisiToken.To_Vector ((1 => (229, 
0)));
             Add_Action (Table.States (29), 3, 121);
             Add_Action (Table.States (29), 37, Reduce, (192, 1), 0, null, 
null);
@@ -656,7 +651,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (29), 320, 144);
             Add_Goto (Table.States (29), 321, 145);
             Add_Goto (Table.States (29), 330, 146);
-            Set_Minimal_Action (Table.States (29).Minimal_Complete_Actions, (1 
=> (Reduce, 192, 0)));
+            Table.States (29).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (30).Productions := WisiToken.To_Vector ((1 => (332, 
3)));
             Add_Action (Table.States (30), 104, 119);
             Add_Action (Table.States (30), 105, 33);
@@ -667,11 +662,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (30), 239, 219);
             Add_Goto (Table.States (30), 272, 92);
             Add_Goto (Table.States (30), 293, 97);
-            Set_Minimal_Action (Table.States (30).Minimal_Complete_Actions, (1 
=> (Shift, 105, 33)));
+            Table.States (30).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (31).Productions := WisiToken.To_Vector ((1 => (217, 
0)));
             Add_Action (Table.States (31), 104, 222);
             Add_Error (Table.States (31));
-            Set_Minimal_Action (Table.States (31).Minimal_Complete_Actions, (1 
=> (Shift, 104, 222)));
+            Table.States (31).Minimal_Complete_Action := (Shift, 104, 222);
             Table.States (32).Productions := WisiToken.To_Vector (((131, 0), 
(219, 1), (239, 5), (245, 0), (245, 1),
             (245, 2)));
             Add_Action (Table.States (32), 76, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
@@ -683,57 +678,56 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (32), 101, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (32), 102, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Error (Table.States (32));
-            Set_Minimal_Action (Table.States (32).Minimal_Complete_Actions, 
((Shift, 81, 223), (Reduce, 219, 1),
-            (Reduce, 239, 1)));
+            Table.States (32).Minimal_Complete_Action := (Reduce, 219, 1);
             Table.States (33).Productions := WisiToken.To_Vector ((1 => (239, 
7)));
             Add_Action (Table.States (33), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (239, 7), 1, null,
             name_7_check'Access);
-            Set_Minimal_Action (Table.States (33).Minimal_Complete_Actions, (1 
=> (Reduce, 239, 1)));
+            Table.States (33).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (34).Productions := WisiToken.To_Vector ((1 => (239, 
6)));
             Add_Action (Table.States (34), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (239, 6), 1, null, null);
-            Set_Minimal_Action (Table.States (34).Minimal_Complete_Actions, (1 
=> (Reduce, 239, 1)));
+            Table.States (34).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (35).Productions := WisiToken.To_Vector ((1 => (157, 
0)));
             Add_Action (Table.States (35), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 0), 1, null,
             null);
-            Set_Minimal_Action (Table.States (35).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (35).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (36).Productions := WisiToken.To_Vector ((1 => (151, 
5)));
             Add_Action (Table.States (36), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (151, 5), 1, null, null);
-            Set_Minimal_Action (Table.States (36).Minimal_Complete_Actions, (1 
=> (Reduce, 151, 1)));
+            Table.States (36).Minimal_Complete_Action := (Reduce, 151, 1);
             Table.States (37).Productions := WisiToken.To_Vector ((1 => (157, 
1)));
             Add_Action (Table.States (37), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 1), 1, null,
             null);
-            Set_Minimal_Action (Table.States (37).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (37).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (38).Productions := WisiToken.To_Vector ((1 => (303, 
1)));
             Add_Action (Table.States (38), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (38).Minimal_Complete_Actions, (1 
=> (Reduce, 303, 1)));
+            Table.States (38).Minimal_Complete_Action := (Reduce, 303, 1);
             Table.States (39).Productions := WisiToken.To_Vector ((1 => (298, 
3)));
             Add_Action (Table.States (39), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (298, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (39).Minimal_Complete_Actions, (1 
=> (Reduce, 298, 1)));
+            Table.States (39).Minimal_Complete_Action := (Reduce, 298, 1);
             Table.States (40).Productions := WisiToken.To_Vector ((1 => (121, 
3)));
             Add_Action (Table.States (40), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 72, 73, 
74, 93, 104, 105, 106, 107), (121, 3), 1,
             null, null);
-            Set_Minimal_Action (Table.States (40).Minimal_Complete_Actions, (1 
=> (Reduce, 121, 1)));
+            Table.States (40).Minimal_Complete_Action := (Reduce, 121, 1);
             Table.States (41).Productions := WisiToken.To_Vector ((1 => (239, 
3)));
             Add_Action (Table.States (41), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (239, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (41).Minimal_Complete_Actions, (1 
=> (Reduce, 239, 1)));
+            Table.States (41).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (42).Productions := WisiToken.To_Vector ((1 => (132, 
0)));
             Add_Action (Table.States (42), (13, 17, 28, 37, 73), (132, 0), 1, 
null, block_label_opt_0_check'Access);
-            Set_Minimal_Action (Table.States (42).Minimal_Complete_Actions, (1 
=> (Reduce, 132, 1)));
+            Table.States (42).Minimal_Complete_Action := (Reduce, 132, 1);
             Table.States (43).Productions := WisiToken.To_Vector (((133, 0), 
(133, 1), (232, 0), (232, 1)));
             Add_Action (Table.States (43), 13, 224);
             Add_Action (Table.States (43), 17, 225);
@@ -742,33 +736,32 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (43), 73, 29);
             Add_Error (Table.States (43));
             Add_Goto (Table.States (43), 229, 228);
-            Set_Minimal_Action (Table.States (43).Minimal_Complete_Actions, 
((Shift, 13, 224), (Shift, 17, 225),
-            (Shift, 28, 226), (Shift, 37, 227)));
+            Table.States (43).Minimal_Complete_Action := (Shift, 13, 224);
             Table.States (44).Productions := WisiToken.To_Vector ((1 => (151, 
3)));
             Add_Action (Table.States (44), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (151, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (44).Minimal_Complete_Actions, (1 
=> (Reduce, 151, 1)));
+            Table.States (44).Minimal_Complete_Action := (Reduce, 151, 1);
             Table.States (45).Productions := WisiToken.To_Vector ((1 => (157, 
2)));
             Add_Action (Table.States (45), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 2), 1, null,
             null);
-            Set_Minimal_Action (Table.States (45).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (45).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (46).Productions := WisiToken.To_Vector ((1 => (134, 
1)));
             Add_Action (Table.States (46), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (134, 1), 1, null,
             null);
-            Set_Minimal_Action (Table.States (46).Minimal_Complete_Actions, (1 
=> (Reduce, 134, 1)));
+            Table.States (46).Minimal_Complete_Action := (Reduce, 134, 1);
             Table.States (47).Productions := WisiToken.To_Vector ((1 => (151, 
1)));
             Add_Action (Table.States (47), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (151, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (47).Minimal_Complete_Actions, (1 
=> (Reduce, 151, 1)));
+            Table.States (47).Minimal_Complete_Action := (Reduce, 151, 1);
             Table.States (48).Productions := WisiToken.To_Vector ((1 => (143, 
1)));
             Add_Action (Table.States (48), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
-            48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (143, 1), 1, null,
-            null);
-            Set_Minimal_Action (Table.States (48).Minimal_Complete_Actions, (1 
=> (Reduce, 143, 1)));
+            48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (143, 1), 1,
+            compilation_unit_list_1'Access, 
compilation_unit_list_1_check'Access);
+            Table.States (48).Minimal_Complete_Action := (Reduce, 143, 1);
             Table.States (49).Productions := WisiToken.To_Vector (((108, 0), 
(143, 0)));
             Add_Action (Table.States (49), 4, 1);
             Add_Action (Table.States (49), 5, 2);
@@ -899,65 +892,65 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (50), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (306, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (50).Minimal_Complete_Actions, (1 
=> (Reduce, 306, 1)));
+            Table.States (50).Minimal_Complete_Action := (Reduce, 306, 1);
             Table.States (51).Productions := WisiToken.To_Vector ((1 => (298, 
2)));
             Add_Action (Table.States (51), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (298, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (51).Minimal_Complete_Actions, (1 
=> (Reduce, 298, 1)));
+            Table.States (51).Minimal_Complete_Action := (Reduce, 298, 1);
             Table.States (52).Productions := WisiToken.To_Vector ((1 => (142, 
3)));
             Add_Action (Table.States (52), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
             48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (142, 3), 1, null,
             null);
-            Set_Minimal_Action (Table.States (52).Minimal_Complete_Actions, (1 
=> (Reduce, 142, 1)));
+            Table.States (52).Minimal_Complete_Action := (Reduce, 142, 1);
             Table.States (53).Productions := WisiToken.To_Vector ((1 => (303, 
7)));
             Add_Action (Table.States (53), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 7), 1, null, null);
-            Set_Minimal_Action (Table.States (53).Minimal_Complete_Actions, (1 
=> (Reduce, 303, 1)));
+            Table.States (53).Minimal_Complete_Action := (Reduce, 303, 1);
             Table.States (54).Productions := WisiToken.To_Vector ((1 => (157, 
3)));
             Add_Action (Table.States (54), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 3), 1, null,
             null);
-            Set_Minimal_Action (Table.States (54).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (54).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (55).Productions := WisiToken.To_Vector ((1 => (121, 
1)));
             Add_Action (Table.States (55), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 72, 73, 
74, 93, 104, 105, 106, 107), (121, 1), 1,
             null, null);
-            Set_Minimal_Action (Table.States (55).Minimal_Complete_Actions, (1 
=> (Reduce, 121, 1)));
+            Table.States (55).Minimal_Complete_Action := (Reduce, 121, 1);
             Table.States (56).Productions := WisiToken.To_Vector ((1 => (157, 
4)));
             Add_Action (Table.States (56), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 4), 1, null,
             null);
-            Set_Minimal_Action (Table.States (56).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (56).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (57).Productions := WisiToken.To_Vector ((1 => (303, 
2)));
             Add_Action (Table.States (57), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (57).Minimal_Complete_Actions, (1 
=> (Reduce, 303, 1)));
+            Table.States (57).Minimal_Complete_Action := (Reduce, 303, 1);
             Table.States (58).Productions := WisiToken.To_Vector ((1 => (157, 
5)));
             Add_Action (Table.States (58), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 5), 1, null,
             null);
-            Set_Minimal_Action (Table.States (58).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (58).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (59).Productions := WisiToken.To_Vector ((1 => (151, 
4)));
             Add_Action (Table.States (59), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (151, 4), 1, null, null);
-            Set_Minimal_Action (Table.States (59).Minimal_Complete_Actions, (1 
=> (Reduce, 151, 1)));
+            Table.States (59).Minimal_Complete_Action := (Reduce, 151, 1);
             Table.States (60).Productions := WisiToken.To_Vector ((1 => (325, 
0)));
             Add_Action (Table.States (60), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (325, 0), 1, null,
             null);
-            Set_Minimal_Action (Table.States (60).Minimal_Complete_Actions, (1 
=> (Reduce, 325, 1)));
+            Table.States (60).Minimal_Complete_Action := (Reduce, 325, 1);
             Table.States (61).Productions := WisiToken.To_Vector ((1 => (312, 
1)));
             Add_Action (Table.States (61), (35, 74, 96), (312, 1), 1, null, 
subprogram_specification_1_check'Access);
-            Set_Minimal_Action (Table.States (61).Minimal_Complete_Actions, (1 
=> (Reduce, 312, 1)));
+            Table.States (61).Minimal_Complete_Action := (Reduce, 312, 1);
             Table.States (62).Productions := WisiToken.To_Vector ((1 => (157, 
6)));
             Add_Action (Table.States (62), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 6), 1, null,
             null);
-            Set_Minimal_Action (Table.States (62).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (62).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (63).Productions := WisiToken.To_Vector (((214, 0), 
(216, 0)));
             Add_Action (Table.States (63), 29, 7);
             Add_Action (Table.States (63), 47, 230);
@@ -967,53 +960,53 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (63), 251, 231);
             Add_Goto (Table.States (63), 262, 87);
             Add_Goto (Table.States (63), 312, 232);
-            Set_Minimal_Action (Table.States (63).Minimal_Complete_Actions, 
((Shift, 47, 230), (Shift, 50, 18)));
+            Table.States (63).Minimal_Complete_Action := (Shift, 50, 18);
             Table.States (64).Productions := WisiToken.To_Vector ((1 => (157, 
7)));
             Add_Action (Table.States (64), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 7), 1, null,
             null);
-            Set_Minimal_Action (Table.States (64).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (64).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (65).Productions := WisiToken.To_Vector ((1 => (209, 
1)));
             Add_Action (Table.States (65), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (209, 1), 1, null,
             null);
-            Set_Minimal_Action (Table.States (65).Minimal_Complete_Actions, (1 
=> (Reduce, 209, 1)));
+            Table.States (65).Minimal_Complete_Action := (Reduce, 209, 1);
             Table.States (66).Productions := WisiToken.To_Vector ((1 => (289, 
3)));
             Add_Action (Table.States (66), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (289, 3), 1, null,
             null);
-            Set_Minimal_Action (Table.States (66).Minimal_Complete_Actions, (1 
=> (Reduce, 289, 1)));
+            Table.States (66).Minimal_Complete_Action := (Reduce, 289, 1);
             Table.States (67).Productions := WisiToken.To_Vector ((1 => (209, 
0)));
             Add_Action (Table.States (67), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (209, 0), 1, null,
             null);
-            Set_Minimal_Action (Table.States (67).Minimal_Complete_Actions, (1 
=> (Reduce, 209, 1)));
+            Table.States (67).Minimal_Complete_Action := (Reduce, 209, 1);
             Table.States (68).Productions := WisiToken.To_Vector ((1 => (306, 
0)));
             Add_Action (Table.States (68), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (306, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (68).Minimal_Complete_Actions, (1 
=> (Reduce, 306, 1)));
+            Table.States (68).Minimal_Complete_Action := (Reduce, 306, 1);
             Table.States (69).Productions := WisiToken.To_Vector (((157, 9), 
(186, 0), (219, 0), (244, 0), (244, 1),
             (244, 2), (244, 3), (244, 4), (244, 5)));
             Add_Action (Table.States (69), 81, 233);
             Add_Action (Table.States (69), 83, 234);
             Add_Error (Table.States (69));
-            Set_Minimal_Action (Table.States (69).Minimal_Complete_Actions, (1 
=> (Shift, 81, 233)));
+            Table.States (69).Minimal_Complete_Action := (Shift, 81, 233);
             Table.States (70).Productions := WisiToken.To_Vector ((1 => (151, 
0)));
             Add_Action (Table.States (70), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (151, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (70).Minimal_Complete_Actions, (1 
=> (Reduce, 151, 1)));
+            Table.States (70).Minimal_Complete_Action := (Reduce, 151, 1);
             Table.States (71).Productions := WisiToken.To_Vector ((1 => (325, 
1)));
             Add_Action (Table.States (71), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (325, 1), 1, null,
             null);
-            Set_Minimal_Action (Table.States (71).Minimal_Complete_Actions, (1 
=> (Reduce, 325, 1)));
+            Table.States (71).Minimal_Complete_Action := (Reduce, 325, 1);
             Table.States (72).Productions := WisiToken.To_Vector ((1 => (151, 
2)));
             Add_Action (Table.States (72), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (151, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (72).Minimal_Complete_Actions, (1 
=> (Reduce, 151, 1)));
+            Table.States (72).Minimal_Complete_Action := (Reduce, 151, 1);
             Table.States (73).Productions := WisiToken.To_Vector (((123, 0), 
(128, 0), (239, 0), (239, 1), (261, 0),
             (272, 0), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (73), 76, 235);
@@ -1025,23 +1018,22 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (73));
             Add_Goto (Table.States (73), 115, 241);
             Add_Goto (Table.States (73), 322, 242);
-            Set_Minimal_Action (Table.States (73).Minimal_Complete_Actions, 
((Shift, 82, 236), (Shift, 84, 237),
-            (Shift, 96, 238), (Shift, 102, 240)));
+            Table.States (73).Minimal_Complete_Action := (Shift, 96, 238);
             Table.States (74).Productions := WisiToken.To_Vector ((1 => (157, 
8)));
             Add_Action (Table.States (74), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 8), 1, null,
             null);
-            Set_Minimal_Action (Table.States (74).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (74).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (75).Productions := WisiToken.To_Vector ((1 => (157, 
10)));
             Add_Action (Table.States (75), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 10), 1,
             null, null);
-            Set_Minimal_Action (Table.States (75).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (75).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (76).Productions := WisiToken.To_Vector ((1 => (289, 
0)));
             Add_Action (Table.States (76), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (289, 0), 1, null,
             null);
-            Set_Minimal_Action (Table.States (76).Minimal_Complete_Actions, (1 
=> (Reduce, 289, 1)));
+            Table.States (76).Minimal_Complete_Action := (Reduce, 289, 1);
             Table.States (77).Productions := WisiToken.To_Vector (((112, 0), 
(179, 0), (179, 1), (193, 0), (213, 1),
             (213, 2), (243, 0), (307, 0), (308, 0), (309, 0), (311, 0)));
             Add_Action (Table.States (77), 25, 243);
@@ -1051,206 +1043,205 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (77), 207, 246);
             Add_Goto (Table.States (77), 262, 247);
             Add_Goto (Table.States (77), 312, 248);
-            Set_Minimal_Action (Table.States (77).Minimal_Complete_Actions, 
((Shift, 25, 243), (Shift, 29, 244),
-            (Shift, 50, 245)));
+            Table.States (77).Minimal_Complete_Action := (Shift, 25, 243);
             Table.States (78).Productions := WisiToken.To_Vector ((1 => (263, 
1)));
             Add_Action (Table.States (78), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (263, 1), 1, null,
             null);
-            Set_Minimal_Action (Table.States (78).Minimal_Complete_Actions, (1 
=> (Reduce, 263, 1)));
+            Table.States (78).Minimal_Complete_Action := (Reduce, 263, 1);
             Table.States (79).Productions := WisiToken.To_Vector ((1 => (135, 
1)));
             Add_Action (Table.States (79), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (135, 1), 1, null,
             null);
-            Set_Minimal_Action (Table.States (79).Minimal_Complete_Actions, (1 
=> (Reduce, 135, 1)));
+            Table.States (79).Minimal_Complete_Action := (Reduce, 135, 1);
             Table.States (80).Productions := WisiToken.To_Vector ((1 => (157, 
11)));
             Add_Action (Table.States (80), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 11), 1,
             null, null);
-            Set_Minimal_Action (Table.States (80).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (80).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (81).Productions := WisiToken.To_Vector ((1 => (289, 
1)));
             Add_Action (Table.States (81), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (289, 1), 1, null,
             null);
-            Set_Minimal_Action (Table.States (81).Minimal_Complete_Actions, (1 
=> (Reduce, 289, 1)));
+            Table.States (81).Minimal_Complete_Action := (Reduce, 289, 1);
             Table.States (82).Productions := WisiToken.To_Vector ((1 => (249, 
0)));
             Add_Action (Table.States (82), 96, 249);
             Add_Error (Table.States (82));
-            Set_Minimal_Action (Table.States (82).Minimal_Complete_Actions, (1 
=> (Shift, 96, 249)));
+            Table.States (82).Minimal_Complete_Action := (Shift, 96, 249);
             Table.States (83).Productions := WisiToken.To_Vector ((1 => (303, 
10)));
             Add_Action (Table.States (83), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 10), 1, null, null);
-            Set_Minimal_Action (Table.States (83).Minimal_Complete_Actions, (1 
=> (Reduce, 303, 1)));
+            Table.States (83).Minimal_Complete_Action := (Reduce, 303, 1);
             Table.States (84).Productions := WisiToken.To_Vector ((1 => (325, 
3)));
             Add_Action (Table.States (84), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (325, 3), 1, null,
             null);
-            Set_Minimal_Action (Table.States (84).Minimal_Complete_Actions, (1 
=> (Reduce, 325, 1)));
+            Table.States (84).Minimal_Complete_Action := (Reduce, 325, 1);
             Table.States (85).Productions := WisiToken.To_Vector ((1 => (325, 
2)));
             Add_Action (Table.States (85), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (325, 2), 1, null,
             null);
-            Set_Minimal_Action (Table.States (85).Minimal_Complete_Actions, (1 
=> (Reduce, 325, 1)));
+            Table.States (85).Minimal_Complete_Action := (Reduce, 325, 1);
             Table.States (86).Productions := WisiToken.To_Vector ((1 => (303, 
4)));
             Add_Action (Table.States (86), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 4), 1, null, null);
-            Set_Minimal_Action (Table.States (86).Minimal_Complete_Actions, (1 
=> (Reduce, 303, 1)));
+            Table.States (86).Minimal_Complete_Action := (Reduce, 303, 1);
             Table.States (87).Productions := WisiToken.To_Vector ((1 => (312, 
0)));
             Add_Action (Table.States (87), (35, 74, 96), (312, 0), 1, null, 
subprogram_specification_0_check'Access);
-            Set_Minimal_Action (Table.States (87).Minimal_Complete_Actions, (1 
=> (Reduce, 312, 1)));
+            Table.States (87).Minimal_Complete_Action := (Reduce, 312, 1);
             Table.States (88).Productions := WisiToken.To_Vector ((1 => (134, 
0)));
             Add_Action (Table.States (88), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (134, 0), 1, null,
             null);
-            Set_Minimal_Action (Table.States (88).Minimal_Complete_Actions, (1 
=> (Reduce, 134, 1)));
+            Table.States (88).Minimal_Complete_Action := (Reduce, 134, 1);
             Table.States (89).Productions := WisiToken.To_Vector ((1 => (263, 
3)));
             Add_Action (Table.States (89), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (263, 3), 1, null,
             null);
-            Set_Minimal_Action (Table.States (89).Minimal_Complete_Actions, (1 
=> (Reduce, 263, 1)));
+            Table.States (89).Minimal_Complete_Action := (Reduce, 263, 1);
             Table.States (90).Productions := WisiToken.To_Vector ((1 => (135, 
3)));
             Add_Action (Table.States (90), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (135, 3), 1, null,
             null);
-            Set_Minimal_Action (Table.States (90).Minimal_Complete_Actions, (1 
=> (Reduce, 135, 1)));
+            Table.States (90).Minimal_Complete_Action := (Reduce, 135, 1);
             Table.States (91).Productions := WisiToken.To_Vector ((1 => (206, 
2)));
             Add_Action (Table.States (91), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (206, 2), 1, null,
             null);
-            Set_Minimal_Action (Table.States (91).Minimal_Complete_Actions, (1 
=> (Reduce, 206, 1)));
+            Table.States (91).Minimal_Complete_Action := (Reduce, 206, 1);
             Table.States (92).Productions := WisiToken.To_Vector ((1 => (239, 
4)));
             Add_Action (Table.States (92), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (239, 4), 1, null, null);
-            Set_Minimal_Action (Table.States (92).Minimal_Complete_Actions, (1 
=> (Reduce, 239, 1)));
+            Table.States (92).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (93).Productions := WisiToken.To_Vector ((1 => (303, 
9)));
             Add_Action (Table.States (93), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 9), 1, null, null);
-            Set_Minimal_Action (Table.States (93).Minimal_Complete_Actions, (1 
=> (Reduce, 303, 1)));
+            Table.States (93).Minimal_Complete_Action := (Reduce, 303, 1);
             Table.States (94).Productions := WisiToken.To_Vector ((1 => (121, 
2)));
             Add_Action (Table.States (94), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 72, 73, 
74, 93, 104, 105, 106, 107), (121, 2), 1,
             null, null);
-            Set_Minimal_Action (Table.States (94).Minimal_Complete_Actions, (1 
=> (Reduce, 121, 1)));
+            Table.States (94).Minimal_Complete_Action := (Reduce, 121, 1);
             Table.States (95).Productions := WisiToken.To_Vector ((1 => (157, 
12)));
             Add_Action (Table.States (95), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 12), 1,
             null, null);
-            Set_Minimal_Action (Table.States (95).Minimal_Complete_Actions, (1 
=> (Reduce, 157, 1)));
+            Table.States (95).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (96).Productions := WisiToken.To_Vector ((1 => (303, 
6)));
             Add_Action (Table.States (96), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 6), 1, null, null);
-            Set_Minimal_Action (Table.States (96).Minimal_Complete_Actions, (1 
=> (Reduce, 303, 1)));
+            Table.States (96).Minimal_Complete_Action := (Reduce, 303, 1);
             Table.States (97).Productions := WisiToken.To_Vector ((1 => (239, 
2)));
             Add_Action (Table.States (97), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (239, 2), 1, null,
             name_2_check'Access);
-            Set_Minimal_Action (Table.States (97).Minimal_Complete_Actions, (1 
=> (Reduce, 239, 1)));
+            Table.States (97).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (98).Productions := WisiToken.To_Vector ((1 => (298, 
0)));
             Add_Action (Table.States (98), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (298, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (98).Minimal_Complete_Actions, (1 
=> (Reduce, 298, 1)));
+            Table.States (98).Minimal_Complete_Action := (Reduce, 298, 1);
             Table.States (99).Productions := WisiToken.To_Vector ((1 => (151, 
6)));
             Add_Action (Table.States (99), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (151, 6), 1, null, null);
-            Set_Minimal_Action (Table.States (99).Minimal_Complete_Actions, (1 
=> (Reduce, 151, 1)));
+            Table.States (99).Minimal_Complete_Action := (Reduce, 151, 1);
             Table.States (100).Productions := WisiToken.To_Vector ((1 => (303, 
5)));
             Add_Action (Table.States (100), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 5), 1, null, null);
-            Set_Minimal_Action (Table.States (100).Minimal_Complete_Actions, 
(1 => (Reduce, 303, 1)));
+            Table.States (100).Minimal_Complete_Action := (Reduce, 303, 1);
             Table.States (101).Productions := WisiToken.To_Vector ((1 => (306, 
1)));
             Add_Action (Table.States (101), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (306, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (101).Minimal_Complete_Actions, 
(1 => (Reduce, 306, 1)));
+            Table.States (101).Minimal_Complete_Action := (Reduce, 306, 1);
             Table.States (102).Productions := WisiToken.To_Vector ((1 => (244, 
7)));
             Add_Action (Table.States (102), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (244, 7), 1, null,
             null);
-            Set_Minimal_Action (Table.States (102).Minimal_Complete_Actions, 
(1 => (Reduce, 244, 1)));
+            Table.States (102).Minimal_Complete_Action := (Reduce, 244, 1);
             Table.States (103).Productions := WisiToken.To_Vector ((1 => (244, 
6)));
             Add_Action (Table.States (103), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (244, 6), 1, null,
             null);
-            Set_Minimal_Action (Table.States (103).Minimal_Complete_Actions, 
(1 => (Reduce, 244, 1)));
+            Table.States (103).Minimal_Complete_Action := (Reduce, 244, 1);
             Table.States (104).Productions := WisiToken.To_Vector ((1 => (142, 
4)));
             Add_Action (Table.States (104), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
             48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (142, 4), 1, null,
             null);
-            Set_Minimal_Action (Table.States (104).Minimal_Complete_Actions, 
(1 => (Reduce, 142, 1)));
+            Table.States (104).Minimal_Complete_Action := (Reduce, 142, 1);
             Table.States (105).Productions := WisiToken.To_Vector ((1 => (263, 
0)));
             Add_Action (Table.States (105), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (263, 0), 1, null,
             null);
-            Set_Minimal_Action (Table.States (105).Minimal_Complete_Actions, 
(1 => (Reduce, 263, 1)));
+            Table.States (105).Minimal_Complete_Action := (Reduce, 263, 1);
             Table.States (106).Productions := WisiToken.To_Vector ((1 => (135, 
0)));
             Add_Action (Table.States (106), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (135, 0), 1, null,
             null);
-            Set_Minimal_Action (Table.States (106).Minimal_Complete_Actions, 
(1 => (Reduce, 135, 1)));
+            Table.States (106).Minimal_Complete_Action := (Reduce, 135, 1);
             Table.States (107).Productions := WisiToken.To_Vector ((1 => (157, 
13)));
             Add_Action (Table.States (107), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 13), 1,
             null, null);
-            Set_Minimal_Action (Table.States (107).Minimal_Complete_Actions, 
(1 => (Reduce, 157, 1)));
+            Table.States (107).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (108).Productions := WisiToken.To_Vector ((1 => (289, 
2)));
             Add_Action (Table.States (108), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (289, 2), 1, null,
             null);
-            Set_Minimal_Action (Table.States (108).Minimal_Complete_Actions, 
(1 => (Reduce, 289, 1)));
+            Table.States (108).Minimal_Complete_Action := (Reduce, 289, 1);
             Table.States (109).Productions := WisiToken.To_Vector ((1 => (157, 
14)));
             Add_Action (Table.States (109), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 14), 1,
             null, null);
-            Set_Minimal_Action (Table.States (109).Minimal_Complete_Actions, 
(1 => (Reduce, 157, 1)));
+            Table.States (109).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (110).Productions := WisiToken.To_Vector ((1 => (142, 
1)));
             Add_Action (Table.States (110), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
             48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (142, 1), 1, null,
             null);
-            Set_Minimal_Action (Table.States (110).Minimal_Complete_Actions, 
(1 => (Reduce, 142, 1)));
+            Table.States (110).Minimal_Complete_Action := (Reduce, 142, 1);
             Table.States (111).Productions := WisiToken.To_Vector ((1 => (263, 
2)));
             Add_Action (Table.States (111), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (263, 2), 1, null,
             null);
-            Set_Minimal_Action (Table.States (111).Minimal_Complete_Actions, 
(1 => (Reduce, 263, 1)));
+            Table.States (111).Minimal_Complete_Action := (Reduce, 263, 1);
             Table.States (112).Productions := WisiToken.To_Vector ((1 => (135, 
2)));
             Add_Action (Table.States (112), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (135, 2), 1, null,
             null);
-            Set_Minimal_Action (Table.States (112).Minimal_Complete_Actions, 
(1 => (Reduce, 135, 1)));
+            Table.States (112).Minimal_Complete_Action := (Reduce, 135, 1);
             Table.States (113).Productions := WisiToken.To_Vector ((1 => (206, 
1)));
             Add_Action (Table.States (113), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (206, 1), 1, null,
             null);
-            Set_Minimal_Action (Table.States (113).Minimal_Complete_Actions, 
(1 => (Reduce, 206, 1)));
+            Table.States (113).Minimal_Complete_Action := (Reduce, 206, 1);
             Table.States (114).Productions := WisiToken.To_Vector ((1 => (298, 
1)));
             Add_Action (Table.States (114), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (298, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (114).Minimal_Complete_Actions, 
(1 => (Reduce, 298, 1)));
+            Table.States (114).Minimal_Complete_Action := (Reduce, 298, 1);
             Table.States (115).Productions := WisiToken.To_Vector ((1 => (157, 
15)));
             Add_Action (Table.States (115), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 15), 1,
             null, null);
-            Set_Minimal_Action (Table.States (115).Minimal_Complete_Actions, 
(1 => (Reduce, 157, 1)));
+            Table.States (115).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (116).Productions := WisiToken.To_Vector ((1 => (157, 
16)));
             Add_Action (Table.States (116), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 16), 1,
             null, null);
-            Set_Minimal_Action (Table.States (116).Minimal_Complete_Actions, 
(1 => (Reduce, 157, 1)));
+            Table.States (116).Minimal_Complete_Action := (Reduce, 157, 1);
             Table.States (117).Productions := WisiToken.To_Vector ((1 => (142, 
0)));
             Add_Action (Table.States (117), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
             48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (142, 0), 1, null,
             null);
-            Set_Minimal_Action (Table.States (117).Minimal_Complete_Actions, 
(1 => (Reduce, 142, 1)));
+            Table.States (117).Minimal_Complete_Action := (Reduce, 142, 1);
             Table.States (118).Productions := WisiToken.To_Vector (((113, 0), 
(113, 1)));
             Add_Action (Table.States (118), 21, Reduce, (116, 1), 0, null, 
null);
             Add_Action (Table.States (118), 76, 250, (116, 1), 0, null, null);
@@ -1258,13 +1249,13 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (118));
             Add_Goto (Table.States (118), 115, 251);
             Add_Goto (Table.States (118), 116, 252);
-            Set_Minimal_Action (Table.States (118).Minimal_Complete_Actions, 
(1 => (Reduce, 116, 0)));
+            Table.States (118).Minimal_Complete_Action := (Reduce, 116, 0);
             Table.States (119).Productions := WisiToken.To_Vector ((1 => (239, 
5)));
             Add_Action (Table.States (119), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (239, 5), 1, name_5'Access,
             name_5_check'Access);
-            Set_Minimal_Action (Table.States (119).Minimal_Complete_Actions, 
(1 => (Reduce, 239, 1)));
+            Table.States (119).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (120).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (272, 0), (293, 0),
             (293, 1), (293, 2), (293, 3), (303, 8)));
             Add_Action (Table.States (120), 76, 235);
@@ -1275,8 +1266,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (120));
             Add_Goto (Table.States (120), 115, 241);
             Add_Goto (Table.States (120), 322, 242);
-            Set_Minimal_Action (Table.States (120).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 96, 253),
-            (Shift, 102, 240)));
+            Table.States (120).Minimal_Complete_Action := (Shift, 96, 253);
             Table.States (121).Productions := WisiToken.To_Vector ((1 => (197, 
2)));
             Add_Action (Table.States (121), 39, 122);
             Add_Action (Table.States (121), 41, 124);
@@ -1292,7 +1282,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (121), 258, 254);
             Add_Goto (Table.States (121), 272, 92);
             Add_Goto (Table.States (121), 293, 97);
-            Set_Minimal_Action (Table.States (121).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (121).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (122).Productions := WisiToken.To_Vector ((1 => (258, 
4)));
             Add_Action (Table.States (122), 104, 119);
             Add_Action (Table.States (122), 105, 33);
@@ -1302,7 +1292,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (122), 239, 255);
             Add_Goto (Table.States (122), 272, 92);
             Add_Goto (Table.States (122), 293, 97);
-            Set_Minimal_Action (Table.States (122).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (122).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (123).Productions := WisiToken.To_Vector ((1 => (197, 
3)));
             Add_Action (Table.States (123), 39, 122);
             Add_Action (Table.States (123), 41, 124);
@@ -1318,11 +1308,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (123), 258, 256);
             Add_Goto (Table.States (123), 272, 92);
             Add_Goto (Table.States (123), 293, 97);
-            Set_Minimal_Action (Table.States (123).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (123).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (124).Productions := WisiToken.To_Vector ((1 => (258, 
1)));
             Add_Action (Table.States (124), (10, 20, 21, 22, 23, 33, 35, 37, 
38, 40, 42, 43, 53, 55, 68, 74, 75, 77,
             78, 79, 82, 83, 85, 86, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 
99, 100), (258, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (124).Minimal_Complete_Actions, 
(1 => (Reduce, 258, 1)));
+            Table.States (124).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (125).Productions := WisiToken.To_Vector (((275, 0), 
(275, 1)));
             Add_Action (Table.States (125), 104, 119);
             Add_Action (Table.States (125), 105, 33);
@@ -1332,7 +1322,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (125), 239, 257);
             Add_Goto (Table.States (125), 272, 92);
             Add_Goto (Table.States (125), 293, 97);
-            Set_Minimal_Action (Table.States (125).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (125).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (126).Productions := WisiToken.To_Vector (((117, 0), 
(117, 1), (117, 2), (117, 3), (117, 4)));
             Add_Action (Table.States (126), 3, 121);
             Add_Action (Table.States (126), 15, 258);
@@ -1385,36 +1375,35 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (126), 320, 144);
             Add_Goto (Table.States (126), 321, 145);
             Add_Goto (Table.States (126), 330, 146);
-            Set_Minimal_Action (Table.States (126).Minimal_Complete_Actions, 
((Shift, 32, 260), (Shift, 41, 262),
-            (Reduce, 125, 0), (Reduce, 192, 0)));
+            Table.States (126).Minimal_Complete_Action := (Reduce, 125, 0);
             Table.States (127).Productions := WisiToken.To_Vector ((1 => (330, 
1)));
             Add_Action (Table.States (127), (3, 39, 40, 41, 76, 103, 104, 105, 
106), (330, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (127).Minimal_Complete_Actions, 
(1 => (Reduce, 330, 1)));
+            Table.States (127).Minimal_Complete_Action := (Reduce, 330, 1);
             Table.States (128).Productions := WisiToken.To_Vector ((1 => (330, 
0)));
             Add_Action (Table.States (128), (3, 39, 40, 41, 76, 103, 104, 105, 
106), (330, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (128).Minimal_Complete_Actions, 
(1 => (Reduce, 330, 1)));
+            Table.States (128).Minimal_Complete_Action := (Reduce, 330, 1);
             Table.States (129).Productions := WisiToken.To_Vector ((1 => (258, 
0)));
             Add_Action (Table.States (129), (10, 20, 21, 22, 23, 33, 35, 37, 
38, 40, 42, 43, 53, 55, 68, 74, 75, 77,
             78, 79, 82, 83, 85, 86, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 
99, 100), (258, 0), 1, primary_0'Access,
             null);
-            Set_Minimal_Action (Table.States (129).Minimal_Complete_Actions, 
(1 => (Reduce, 258, 1)));
+            Table.States (129).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (130).Productions := WisiToken.To_Vector ((1 => (258, 
2)));
             Add_Action (Table.States (130), (10, 20, 21, 22, 23, 33, 35, 37, 
38, 40, 42, 43, 53, 55, 68, 74, 75, 77,
             78, 79, 82, 83, 85, 86, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 
99, 100), (258, 2), 1, primary_2'Access,
             null);
-            Set_Minimal_Action (Table.States (130).Minimal_Complete_Actions, 
(1 => (Reduce, 258, 1)));
+            Table.States (130).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (131).Productions := WisiToken.To_Vector ((1 => (192, 
0)));
             Add_Action (Table.States (131), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (192,
             0), 1, null, null);
-            Set_Minimal_Action (Table.States (131).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 1)));
+            Table.States (131).Minimal_Complete_Action := (Reduce, 192, 1);
             Table.States (132).Productions := WisiToken.To_Vector ((1 => (139, 
0)));
             Add_Action (Table.States (132), 35, 278);
             Add_Error (Table.States (132));
-            Set_Minimal_Action (Table.States (132).Minimal_Complete_Actions, 
(1 => (Shift, 35, 278)));
+            Table.States (132).Minimal_Complete_Action := (Shift, 35, 278);
             Table.States (133).Productions := WisiToken.To_Vector ((1 => (320, 
1)));
             Add_Action (Table.States (133), (10, 20, 21, 22, 23, 33, 35, 37, 
38, 40, 42, 43, 53, 55, 68, 74, 75, 77,
             78, 79, 82, 83, 85, 86, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 
99), (320, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (133).Minimal_Complete_Actions, 
(1 => (Reduce, 320, 1)));
+            Table.States (133).Minimal_Complete_Action := (Reduce, 320, 1);
             Table.States (134).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (258, 3), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (134), 10, Reduce, (258, 3), 1, null, 
null);
@@ -1460,8 +1449,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (134));
             Add_Goto (Table.States (134), 115, 241);
             Add_Goto (Table.States (134), 322, 242);
-            Set_Minimal_Action (Table.States (134).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 258, 1)));
+            Table.States (134).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (135).Productions := WisiToken.To_Vector (((197, 0), 
(197, 1)));
             Add_Action (Table.States (135), 10, Reduce, (197, 1), 1, null, 
null);
             Add_Action (Table.States (135), 20, Reduce, (197, 1), 1, null, 
null);
@@ -1500,11 +1488,11 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (135), 99, Reduce, (197, 1), 1, null, 
null);
             Add_Action (Table.States (135), 100, 279);
             Add_Error (Table.States (135));
-            Set_Minimal_Action (Table.States (135).Minimal_Complete_Actions, 
(1 => (Reduce, 197, 1)));
+            Table.States (135).Minimal_Complete_Action := (Reduce, 197, 1);
             Table.States (136).Productions := WisiToken.To_Vector ((1 => (287, 
4)));
             Add_Action (Table.States (136), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (287,
             4), 1, null, null);
-            Set_Minimal_Action (Table.States (136).Minimal_Complete_Actions, 
(1 => (Reduce, 287, 1)));
+            Table.States (136).Minimal_Complete_Action := (Reduce, 287, 1);
             Table.States (137).Productions := WisiToken.To_Vector (((191, 1), 
(282, 0)));
             Add_Action (Table.States (137), 10, 280, (191, 1), 1, null, null);
             Add_Action (Table.States (137), 20, Reduce, (191, 1), 1, null, 
null);
@@ -1524,7 +1512,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (137), 87, Reduce, (191, 1), 1, null, 
null);
             Add_Action (Table.States (137), 96, Reduce, (191, 1), 1, null, 
null);
             Add_Error (Table.States (137));
-            Set_Minimal_Action (Table.States (137).Minimal_Complete_Actions, 
(1 => (Reduce, 191, 1)));
+            Table.States (137).Minimal_Complete_Action := (Reduce, 191, 1);
             Table.States (138).Productions := WisiToken.To_Vector (((191, 2), 
(283, 0)));
             Add_Action (Table.States (138), 10, 281, (191, 2), 1, null, null);
             Add_Action (Table.States (138), 20, Reduce, (191, 2), 1, null, 
null);
@@ -1544,7 +1532,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (138), 87, Reduce, (191, 2), 1, null, 
null);
             Add_Action (Table.States (138), 96, Reduce, (191, 2), 1, null, 
null);
             Add_Error (Table.States (138));
-            Set_Minimal_Action (Table.States (138).Minimal_Complete_Actions, 
(1 => (Reduce, 191, 1)));
+            Table.States (138).Minimal_Complete_Action := (Reduce, 191, 1);
             Table.States (139).Productions := WisiToken.To_Vector (((191, 3), 
(284, 0)));
             Add_Action (Table.States (139), 10, Reduce, (191, 3), 1, null, 
null);
             Add_Action (Table.States (139), 20, Reduce, (191, 3), 1, null, 
null);
@@ -1564,7 +1552,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (139), 87, Reduce, (191, 3), 1, null, 
null);
             Add_Action (Table.States (139), 96, Reduce, (191, 3), 1, null, 
null);
             Add_Error (Table.States (139));
-            Set_Minimal_Action (Table.States (139).Minimal_Complete_Actions, 
(1 => (Reduce, 191, 1)));
+            Table.States (139).Minimal_Complete_Action := (Reduce, 191, 1);
             Table.States (140).Productions := WisiToken.To_Vector (((191, 4), 
(285, 0)));
             Add_Action (Table.States (140), 10, Reduce, (191, 4), 1, null, 
null);
             Add_Action (Table.States (140), 20, Reduce, (191, 4), 1, null, 
null);
@@ -1584,7 +1572,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (140), 87, Reduce, (191, 4), 1, null, 
null);
             Add_Action (Table.States (140), 96, Reduce, (191, 4), 1, null, 
null);
             Add_Error (Table.States (140));
-            Set_Minimal_Action (Table.States (140).Minimal_Complete_Actions, 
(1 => (Reduce, 191, 1)));
+            Table.States (140).Minimal_Complete_Action := (Reduce, 191, 1);
             Table.States (141).Productions := WisiToken.To_Vector (((191, 5), 
(286, 0)));
             Add_Action (Table.States (141), 10, Reduce, (191, 5), 1, null, 
null);
             Add_Action (Table.States (141), 20, Reduce, (191, 5), 1, null, 
null);
@@ -1604,7 +1592,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (141), 87, Reduce, (191, 5), 1, null, 
null);
             Add_Action (Table.States (141), 96, Reduce, (191, 5), 1, null, 
null);
             Add_Error (Table.States (141));
-            Set_Minimal_Action (Table.States (141).Minimal_Complete_Actions, 
(1 => (Reduce, 191, 1)));
+            Table.States (141).Minimal_Complete_Action := (Reduce, 191, 1);
          end Subr_2;
          procedure Subr_3
          is begin
@@ -1628,8 +1616,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (142), 87, Reduce, (191, 0), 1, null, 
null);
             Add_Action (Table.States (142), 96, Reduce, (191, 0), 1, null, 
null);
             Add_Error (Table.States (142));
-            Set_Minimal_Action (Table.States (142).Minimal_Complete_Actions, 
((Shift, 10, 285), (Shift, 43, 286),
-            (Shift, 75, 287), (Reduce, 191, 1)));
+            Table.States (142).Minimal_Complete_Action := (Reduce, 191, 1);
             Table.States (143).Productions := WisiToken.To_Vector (((287, 0), 
(287, 1), (287, 2), (287, 3)));
             Add_Action (Table.States (143), 10, Reduce, (287, 3), 1, null, 
null);
             Add_Action (Table.States (143), 20, Reduce, (287, 3), 1, null, 
null);
@@ -1658,7 +1645,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (143), 98, 295);
             Add_Error (Table.States (143));
             Add_Goto (Table.States (143), 288, 296);
-            Set_Minimal_Action (Table.States (143).Minimal_Complete_Actions, 
(1 => (Reduce, 287, 1)));
+            Table.States (143).Minimal_Complete_Action := (Reduce, 287, 1);
             Table.States (144).Productions := WisiToken.To_Vector (((320, 0), 
(321, 1)));
             Add_Action (Table.States (144), 10, Reduce, (321, 1), 1, null, 
null);
             Add_Action (Table.States (144), 20, Reduce, (321, 1), 1, null, 
null);
@@ -1697,7 +1684,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (144), 99, 300);
             Add_Error (Table.States (144));
             Add_Goto (Table.States (144), 237, 301);
-            Set_Minimal_Action (Table.States (144).Minimal_Complete_Actions, 
(1 => (Reduce, 321, 1)));
+            Table.States (144).Minimal_Complete_Action := (Reduce, 321, 1);
             Table.States (145).Productions := WisiToken.To_Vector (((301, 1), 
(321, 0)));
             Add_Action (Table.States (145), 10, Reduce, (301, 1), 1, null, 
null);
             Add_Action (Table.States (145), 20, Reduce, (301, 1), 1, null, 
null);
@@ -1732,7 +1719,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (145), 98, Reduce, (301, 1), 1, null, 
null);
             Add_Error (Table.States (145));
             Add_Goto (Table.States (145), 130, 305);
-            Set_Minimal_Action (Table.States (145).Minimal_Complete_Actions, 
(1 => (Reduce, 301, 1)));
+            Table.States (145).Minimal_Complete_Action := (Reduce, 301, 1);
             Table.States (146).Productions := WisiToken.To_Vector ((1 => (301, 
0)));
             Add_Action (Table.States (146), 3, 121);
             Add_Action (Table.States (146), 39, 122);
@@ -1753,7 +1740,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (146), 293, 97);
             Add_Goto (Table.States (146), 320, 144);
             Add_Goto (Table.States (146), 321, 306);
-            Set_Minimal_Action (Table.States (146).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (146).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (147).Productions := WisiToken.To_Vector ((1 => (161, 
0)));
             Add_Action (Table.States (147), 3, 121);
             Add_Action (Table.States (147), 39, 122);
@@ -1789,19 +1776,19 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (147), 320, 144);
             Add_Goto (Table.States (147), 321, 145);
             Add_Goto (Table.States (147), 330, 146);
-            Set_Minimal_Action (Table.States (147).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (147).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (148).Productions := WisiToken.To_Vector ((1 => (161, 
1)));
             Add_Action (Table.States (148), 96, 308);
             Add_Error (Table.States (148));
-            Set_Minimal_Action (Table.States (148).Minimal_Complete_Actions, 
(1 => (Shift, 96, 308)));
+            Table.States (148).Minimal_Complete_Action := (Shift, 96, 308);
             Table.States (149).Productions := WisiToken.To_Vector ((1 => (220, 
0)));
             Add_Action (Table.States (149), (72, 96), (220, 0), 1, null, 
identifier_opt_0_check'Access);
-            Set_Minimal_Action (Table.States (149).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 1)));
+            Table.States (149).Minimal_Complete_Action := (Reduce, 220, 1);
             Table.States (150).Productions := WisiToken.To_Vector (((190, 0), 
(190, 1)));
             Add_Action (Table.States (150), 72, 309);
             Add_Action (Table.States (150), 96, 310);
             Add_Error (Table.States (150));
-            Set_Minimal_Action (Table.States (150).Minimal_Complete_Actions, 
((Shift, 72, 309), (Shift, 96, 310)));
+            Table.States (150).Minimal_Complete_Action := (Shift, 96, 310);
             Table.States (151).Productions := WisiToken.To_Vector (((163, 0), 
(230, 0), (230, 1), (230, 2), (230, 3),
             (230, 4), (230, 5), (239, 5)));
             Add_Action (Table.States (151), 33, 311);
@@ -1814,8 +1801,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (151), 101, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (151), 102, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Error (Table.States (151));
-            Set_Minimal_Action (Table.States (151).Minimal_Complete_Actions, 
((Shift, 33, 311), (Shift, 42, 312),
-            (Shift, 81, 313), (Reduce, 163, 1), (Reduce, 239, 1)));
+            Table.States (151).Minimal_Complete_Action := (Reduce, 163, 1);
             Table.States (152).Productions := WisiToken.To_Vector (((163, 1), 
(239, 7)));
             Add_Action (Table.States (152), 71, Reduce, (163, 1), 1, null, 
null, (239, 7), 1, null,
             name_7_check'Access);
@@ -1824,7 +1810,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (152), 101, Reduce, (239, 7), 1, null, 
name_7_check'Access);
             Add_Action (Table.States (152), 102, Reduce, (239, 7), 1, null, 
name_7_check'Access);
             Add_Error (Table.States (152));
-            Set_Minimal_Action (Table.States (152).Minimal_Complete_Actions, 
((Reduce, 163, 1), (Reduce, 239, 1)));
+            Table.States (152).Minimal_Complete_Action := (Reduce, 163, 1);
             Table.States (153).Productions := WisiToken.To_Vector (((121, 0), 
(239, 3)));
             Add_Action (Table.States (153), 71, 314, (239, 3), 1, null, null);
             Add_Action (Table.States (153), 76, Reduce, (239, 3), 1, null, 
null);
@@ -1832,17 +1818,17 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (153), 101, Reduce, (239, 3), 1, null, 
null);
             Add_Action (Table.States (153), 102, Reduce, (239, 3), 1, null, 
null);
             Add_Error (Table.States (153));
-            Set_Minimal_Action (Table.States (153).Minimal_Complete_Actions, 
((Shift, 71, 314), (Reduce, 239, 1)));
+            Table.States (153).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (154).Productions := WisiToken.To_Vector ((1 => (127, 
0)));
             Add_Action (Table.States (154), 71, 315);
             Add_Error (Table.States (154));
-            Set_Minimal_Action (Table.States (154).Minimal_Complete_Actions, 
(1 => (Shift, 71, 315)));
+            Table.States (154).Minimal_Complete_Action := (Shift, 71, 315);
             Table.States (155).Productions := WisiToken.To_Vector ((1 => (231, 
0)));
             Add_Action (Table.States (155), (1 =>  37), (231, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (155).Minimal_Complete_Actions, 
(1 => (Reduce, 231, 1)));
+            Table.States (155).Minimal_Complete_Action := (Reduce, 231, 1);
             Table.States (156).Productions := WisiToken.To_Vector ((1 => (229, 
1)));
             Add_Action (Table.States (156), (1 =>  37), (229, 1), 2, 
iteration_scheme_1'Access, null);
-            Set_Minimal_Action (Table.States (156).Minimal_Complete_Actions, 
(1 => (Reduce, 229, 2)));
+            Table.States (156).Minimal_Complete_Action := (Reduce, 229, 2);
             Table.States (157).Productions := WisiToken.To_Vector (((128, 0), 
(182, 0), (239, 0), (239, 1), (272, 0),
             (281, 0), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (157), 71, 316);
@@ -1853,8 +1839,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (157));
             Add_Goto (Table.States (157), 115, 241);
             Add_Goto (Table.States (157), 322, 242);
-            Set_Minimal_Action (Table.States (157).Minimal_Complete_Actions, 
((Shift, 71, 316), (Shift, 84, 237),
-            (Shift, 102, 240)));
+            Table.States (157).Minimal_Complete_Action := (Shift, 71, 316);
             Table.States (158).Productions := WisiToken.To_Vector (((128, 0), 
(207, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (158), 58, 317);
@@ -1868,8 +1853,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (158), 252, 320);
             Add_Goto (Table.States (158), 291, 321);
             Add_Goto (Table.States (158), 322, 242);
-            Set_Minimal_Action (Table.States (158).Minimal_Complete_Actions, 
((Shift, 58, 317), (Shift, 84, 237),
-            (Shift, 102, 240)));
+            Table.States (158).Minimal_Complete_Action := (Shift, 58, 317);
             Table.States (159).Productions := WisiToken.To_Vector ((1 => (215, 
2)));
             Add_Action (Table.States (159), 104, 119);
             Add_Action (Table.States (159), 105, 33);
@@ -1879,7 +1863,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (159), 239, 322);
             Add_Goto (Table.States (159), 272, 92);
             Add_Goto (Table.States (159), 293, 97);
-            Set_Minimal_Action (Table.States (159).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (159).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (160).Productions := WisiToken.To_Vector ((1 => (215, 
0)));
             Add_Action (Table.States (160), 104, 119);
             Add_Action (Table.States (160), 105, 33);
@@ -1889,7 +1873,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (160), 239, 323);
             Add_Goto (Table.States (160), 272, 92);
             Add_Goto (Table.States (160), 293, 97);
-            Set_Minimal_Action (Table.States (160).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (160).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (161).Productions := WisiToken.To_Vector ((1 => (215, 
1)));
             Add_Action (Table.States (161), 104, 119);
             Add_Action (Table.States (161), 105, 33);
@@ -1899,11 +1883,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (161), 239, 324);
             Add_Goto (Table.States (161), 272, 92);
             Add_Goto (Table.States (161), 293, 97);
-            Set_Minimal_Action (Table.States (161).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (161).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (162).Productions := WisiToken.To_Vector (((201, 0), 
(201, 1), (201, 2)));
             Add_Action (Table.States (162), 104, 325);
             Add_Error (Table.States (162));
-            Set_Minimal_Action (Table.States (162).Minimal_Complete_Actions, 
(1 => (Shift, 104, 325)));
+            Table.States (162).Minimal_Complete_Action := (Shift, 104, 325);
             Table.States (163).Productions := WisiToken.To_Vector (((200, 0), 
(200, 1), (200, 2), (200, 3), (204, 0)));
             Add_Action (Table.States (163), 29, 7);
             Add_Action (Table.States (163), 47, 326);
@@ -1912,22 +1896,22 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (163), 207, 61);
             Add_Goto (Table.States (163), 262, 87);
             Add_Goto (Table.States (163), 312, 327);
-            Set_Minimal_Action (Table.States (163).Minimal_Complete_Actions, 
((Shift, 47, 326), (Shift, 50, 18)));
+            Table.States (163).Minimal_Complete_Action := (Shift, 50, 18);
             Table.States (164).Productions := WisiToken.To_Vector ((1 => (219, 
1)));
             Add_Action (Table.States (164), (81, 83), (219, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (164).Minimal_Complete_Actions, 
(1 => (Reduce, 219, 1)));
+            Table.States (164).Minimal_Complete_Action := (Reduce, 219, 1);
             Table.States (165).Productions := WisiToken.To_Vector ((1 => (212, 
0)));
             Add_Action (Table.States (165), (29, 47, 48, 50, 69, 71, 74, 104), 
(212, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (165).Minimal_Complete_Actions, 
(1 => (Reduce, 212, 1)));
+            Table.States (165).Minimal_Complete_Action := (Reduce, 212, 1);
             Table.States (166).Productions := WisiToken.To_Vector ((1 => (212, 
2)));
             Add_Action (Table.States (166), (29, 47, 48, 50, 69, 71, 74, 104), 
(212, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (166).Minimal_Complete_Actions, 
(1 => (Reduce, 212, 1)));
+            Table.States (166).Minimal_Complete_Action := (Reduce, 212, 1);
             Table.States (167).Productions := WisiToken.To_Vector ((1 => (212, 
1)));
             Add_Action (Table.States (167), (29, 47, 48, 50, 69, 71, 74, 104), 
(212, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (167).Minimal_Complete_Actions, 
(1 => (Reduce, 212, 1)));
+            Table.States (167).Minimal_Complete_Action := (Reduce, 212, 1);
             Table.States (168).Productions := WisiToken.To_Vector ((1 => (212, 
3)));
             Add_Action (Table.States (168), (29, 47, 48, 50, 69, 71, 74, 104), 
(212, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (168).Minimal_Complete_Actions, 
(1 => (Reduce, 212, 1)));
+            Table.States (168).Minimal_Complete_Action := (Reduce, 212, 1);
             Table.States (169).Productions := WisiToken.To_Vector (((210, 0), 
(211, 0)));
             Add_Action (Table.States (169), 29, Reduce, (210, 0), 2, 
generic_formal_part_0'Access, null);
             Add_Action (Table.States (169), 47, Reduce, (210, 0), 2, 
generic_formal_part_0'Access, null);
@@ -1946,33 +1930,33 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (169), 219, 171);
             Add_Goto (Table.States (169), 257, 172);
             Add_Goto (Table.States (169), 331, 173);
-            Set_Minimal_Action (Table.States (169).Minimal_Complete_Actions, 
(1 => (Reduce, 210, 2)));
+            Table.States (169).Minimal_Complete_Action := (Reduce, 210, 2);
             Table.States (170).Productions := WisiToken.To_Vector ((1 => (211, 
1)));
             Add_Action (Table.States (170), (29, 47, 48, 50, 69, 71, 74, 104), 
(211, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (170).Minimal_Complete_Actions, 
(1 => (Reduce, 211, 1)));
+            Table.States (170).Minimal_Complete_Action := (Reduce, 211, 1);
             Table.States (171).Productions := WisiToken.To_Vector (((198, 0), 
(198, 1), (198, 2), (198, 3), (219, 0)));
             Add_Action (Table.States (171), 81, 329);
             Add_Action (Table.States (171), 83, 234);
             Add_Error (Table.States (171));
-            Set_Minimal_Action (Table.States (171).Minimal_Complete_Actions, 
(1 => (Shift, 81, 329)));
+            Table.States (171).Minimal_Complete_Action := (Shift, 81, 329);
             Table.States (172).Productions := WisiToken.To_Vector ((1 => (212, 
4)));
             Add_Action (Table.States (172), (29, 47, 48, 50, 69, 71, 74, 104), 
(212, 4), 1, null, null);
-            Set_Minimal_Action (Table.States (172).Minimal_Complete_Actions, 
(1 => (Reduce, 212, 1)));
+            Table.States (172).Minimal_Complete_Action := (Reduce, 212, 1);
             Table.States (173).Productions := WisiToken.To_Vector ((1 => (212, 
5)));
             Add_Action (Table.States (173), (29, 47, 48, 50, 69, 71, 74, 104), 
(212, 5), 1, null, null);
-            Set_Minimal_Action (Table.States (173).Minimal_Complete_Actions, 
(1 => (Reduce, 212, 1)));
+            Table.States (173).Minimal_Complete_Action := (Reduce, 212, 1);
             Table.States (174).Productions := WisiToken.To_Vector ((1 => (303, 
3)));
             Add_Action (Table.States (174), 96, 330);
             Add_Error (Table.States (174));
-            Set_Minimal_Action (Table.States (174).Minimal_Complete_Actions, 
(1 => (Shift, 96, 330)));
+            Table.States (174).Minimal_Complete_Action := (Shift, 96, 330);
             Table.States (175).Productions := WisiToken.To_Vector (((222, 0), 
(222, 1), (222, 2), (222, 3)));
             Add_Action (Table.States (175), 68, 331);
             Add_Error (Table.States (175));
-            Set_Minimal_Action (Table.States (175).Minimal_Complete_Actions, 
(1 => (Shift, 68, 331)));
+            Table.States (175).Minimal_Complete_Action := (Shift, 68, 331);
             Table.States (176).Productions := WisiToken.To_Vector ((1 => (332, 
0)));
             Add_Action (Table.States (176), 74, 332);
             Add_Error (Table.States (176));
-            Set_Minimal_Action (Table.States (176).Minimal_Complete_Actions, 
(1 => (Shift, 74, 332)));
+            Table.States (176).Minimal_Complete_Action := (Shift, 74, 332);
             Table.States (177).Productions := WisiToken.To_Vector ((1 => (332, 
1)));
             Add_Action (Table.States (177), 104, 119);
             Add_Action (Table.States (177), 105, 33);
@@ -1983,15 +1967,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (177), 239, 219);
             Add_Goto (Table.States (177), 272, 92);
             Add_Goto (Table.States (177), 293, 97);
-            Set_Minimal_Action (Table.States (177).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (177).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (178).Productions := WisiToken.To_Vector ((1 => (246, 
0)));
             Add_Action (Table.States (178), (25, 29, 50), (246, 0), 2, 
overriding_indicator_opt_0'Access, null);
-            Set_Minimal_Action (Table.States (178).Minimal_Complete_Actions, 
(1 => (Reduce, 246, 2)));
+            Table.States (178).Minimal_Complete_Action := (Reduce, 246, 2);
             Table.States (179).Productions := WisiToken.To_Vector ((1 => (303, 
0)));
             Add_Action (Table.States (179), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 0), 2, simple_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (179).Minimal_Complete_Actions, 
(1 => (Reduce, 303, 2)));
+            Table.States (179).Minimal_Complete_Action := (Reduce, 303, 2);
             Table.States (180).Productions := WisiToken.To_Vector (((247, 0), 
(247, 1), (248, 0)));
             Add_Action (Table.States (180), 104, 119);
             Add_Action (Table.States (180), 105, 33);
@@ -2001,7 +1985,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (180), 239, 334);
             Add_Goto (Table.States (180), 272, 92);
             Add_Goto (Table.States (180), 293, 97);
-            Set_Minimal_Action (Table.States (180).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (180).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (181).Productions := WisiToken.To_Vector (((128, 0), 
(213, 0), (239, 0), (239, 1), (250, 0),
             (251, 0), (251, 1), (272, 0), (293, 0), (293, 1), (293, 2), (293, 
3)));
             Add_Action (Table.States (181), 35, 335, (122, 1), 0, null, null);
@@ -2015,13 +1999,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (181), 115, 241);
             Add_Goto (Table.States (181), 122, 338);
             Add_Goto (Table.States (181), 322, 242);
-            Set_Minimal_Action (Table.States (181).Minimal_Complete_Actions, 
((Shift, 35, 335), (Shift, 56, 336),
-            (Shift, 84, 237), (Shift, 102, 240), (Reduce, 122, 0)));
+            Table.States (181).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (182).Productions := WisiToken.To_Vector (((257, 0), 
(257, 1), (257, 2)));
             Add_Action (Table.States (182), 76, 339);
             Add_Action (Table.States (182), 96, 340);
             Add_Error (Table.States (182));
-            Set_Minimal_Action (Table.States (182).Minimal_Complete_Actions, 
((Shift, 76, 339), (Shift, 96, 340)));
+            Table.States (182).Minimal_Complete_Action := (Shift, 96, 340);
             Table.States (183).Productions := WisiToken.To_Vector (((121, 0), 
(127, 0), (182, 0), (281, 0)));
             Add_Action (Table.States (183), 104, 341);
             Add_Action (Table.States (183), 105, 152);
@@ -2032,7 +2015,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (183), 239, 157);
             Add_Goto (Table.States (183), 272, 92);
             Add_Goto (Table.States (183), 293, 97);
-            Set_Minimal_Action (Table.States (183).Minimal_Complete_Actions, 
(1 => (Shift, 105, 152)));
+            Table.States (183).Minimal_Complete_Action := (Shift, 104, 341);
             Table.States (184).Productions := WisiToken.To_Vector ((1 => (332, 
2)));
             Add_Action (Table.States (184), 104, 119);
             Add_Action (Table.States (184), 105, 33);
@@ -2043,17 +2026,17 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (184), 239, 219);
             Add_Goto (Table.States (184), 272, 92);
             Add_Goto (Table.States (184), 293, 97);
-            Set_Minimal_Action (Table.States (184).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (184).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (185).Productions := WisiToken.To_Vector (((219, 1), 
(245, 0), (245, 1), (245, 2)));
             Add_Action (Table.States (185), 81, 343, (219, 1), 1, null, null);
             Add_Action (Table.States (185), 83, Reduce, (219, 1), 1, null, 
null);
             Add_Error (Table.States (185));
-            Set_Minimal_Action (Table.States (185).Minimal_Complete_Actions, 
((Shift, 81, 343), (Reduce, 219, 1)));
+            Table.States (185).Minimal_Complete_Action := (Reduce, 219, 1);
             Table.States (186).Productions := WisiToken.To_Vector ((1 => (142, 
2)));
             Add_Action (Table.States (186), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
-            48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (142, 2), 2, null,
-            null);
-            Set_Minimal_Action (Table.States (186).Minimal_Complete_Actions, 
(1 => (Reduce, 142, 2)));
+            48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (142, 2), 2,
+            compilation_unit_2'Access, null);
+            Table.States (186).Minimal_Complete_Action := (Reduce, 142, 2);
             Table.States (187).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (262, 0), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (187), 35, Reduce, (253, 1), 0, null, 
null);
@@ -2068,27 +2051,26 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (187), 199, 344);
             Add_Goto (Table.States (187), 253, 345);
             Add_Goto (Table.States (187), 322, 242);
-            Set_Minimal_Action (Table.States (187).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 253, 0)));
+            Table.States (187).Minimal_Complete_Action := (Reduce, 253, 0);
             Table.States (188).Productions := WisiToken.To_Vector (((264, 0), 
(265, 0)));
             Add_Action (Table.States (188), 104, 346);
             Add_Error (Table.States (188));
-            Set_Minimal_Action (Table.States (188).Minimal_Complete_Actions, 
(1 => (Shift, 104, 346)));
+            Table.States (188).Minimal_Complete_Action := (Shift, 104, 346);
             Table.States (189).Productions := WisiToken.To_Vector (((271, 0), 
(271, 1)));
             Add_Action (Table.States (189), 104, 347);
             Add_Error (Table.States (189));
-            Set_Minimal_Action (Table.States (189).Minimal_Complete_Actions, 
(1 => (Shift, 104, 347)));
+            Table.States (189).Minimal_Complete_Action := (Shift, 104, 347);
             Table.States (190).Productions := WisiToken.To_Vector (((304, 0), 
(304, 1)));
             Add_Action (Table.States (190), 35, Reduce, (122, 1), 0, null, 
null);
             Add_Action (Table.States (190), 74, 337);
             Add_Error (Table.States (190));
             Add_Goto (Table.States (190), 122, 348);
-            Set_Minimal_Action (Table.States (190).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (190).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (191).Productions := WisiToken.To_Vector ((1 => (276, 
2)));
             Add_Action (Table.States (191), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (276, 2), 2, raise_statement_2'Access, null);
-            Set_Minimal_Action (Table.States (191).Minimal_Complete_Actions, 
(1 => (Reduce, 276, 2)));
+            Table.States (191).Minimal_Complete_Action := (Reduce, 276, 2);
             Table.States (192).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (272, 0), (276, 0),
             (276, 1), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (192), 74, 349);
@@ -2100,8 +2082,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (192));
             Add_Goto (Table.States (192), 115, 241);
             Add_Goto (Table.States (192), 322, 242);
-            Set_Minimal_Action (Table.States (192).Minimal_Complete_Actions, 
((Shift, 74, 349), (Shift, 84, 237),
-            (Shift, 96, 350), (Shift, 102, 240)));
+            Table.States (192).Minimal_Complete_Action := (Shift, 96, 350);
             Table.States (193).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (272, 0), (290, 0),
             (290, 1), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (193), 74, 351);
@@ -2113,8 +2094,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (193));
             Add_Goto (Table.States (193), 115, 241);
             Add_Goto (Table.States (193), 322, 242);
-            Set_Minimal_Action (Table.States (193).Minimal_Complete_Actions, 
((Shift, 74, 351), (Shift, 84, 237),
-            (Shift, 96, 352), (Shift, 102, 240)));
+            Table.States (193).Minimal_Complete_Action := (Shift, 96, 352);
             Table.States (194).Productions := WisiToken.To_Vector (((194, 0), 
(194, 1), (239, 5)));
             Add_Action (Table.States (194), 10, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (194), 33, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
@@ -2142,20 +2122,20 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (194), 101, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (194), 102, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Error (Table.States (194));
-            Set_Minimal_Action (Table.States (194).Minimal_Complete_Actions, 
((Shift, 81, 353), (Reduce, 239, 1)));
+            Table.States (194).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (195).Productions := WisiToken.To_Vector ((1 => (302, 
0)));
             Add_Action (Table.States (195), 96, 354);
             Add_Error (Table.States (195));
-            Set_Minimal_Action (Table.States (195).Minimal_Complete_Actions, 
(1 => (Shift, 96, 354)));
+            Table.States (195).Minimal_Complete_Action := (Shift, 96, 354);
             Table.States (196).Productions := WisiToken.To_Vector (((195, 0), 
(196, 1)));
             Add_Action (Table.States (196), 21, Reduce, (195, 0), 1, null, 
null);
             Add_Action (Table.States (196), 96, 355);
             Add_Error (Table.States (196));
-            Set_Minimal_Action (Table.States (196).Minimal_Complete_Actions, 
((Shift, 96, 355), (Reduce, 195, 1)));
+            Table.States (196).Minimal_Complete_Action := (Reduce, 195, 1);
             Table.States (197).Productions := WisiToken.To_Vector ((1 => (196, 
0)));
             Add_Action (Table.States (197), 21, 356);
             Add_Error (Table.States (197));
-            Set_Minimal_Action (Table.States (197).Minimal_Complete_Actions, 
(1 => (Shift, 21, 356)));
+            Table.States (197).Minimal_Complete_Action := (Shift, 21, 356);
             Table.States (198).Productions := WisiToken.To_Vector ((1 => (315, 
0)));
             Add_Action (Table.States (198), 104, 119);
             Add_Action (Table.States (198), 105, 33);
@@ -2165,11 +2145,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (198), 239, 357);
             Add_Goto (Table.States (198), 272, 92);
             Add_Goto (Table.States (198), 293, 97);
-            Set_Minimal_Action (Table.States (198).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (198).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (199).Productions := WisiToken.To_Vector ((1 => (295, 
4)));
             Add_Action (Table.States (199), 96, 358);
             Add_Error (Table.States (199));
-            Set_Minimal_Action (Table.States (199).Minimal_Complete_Actions, 
(1 => (Shift, 96, 358)));
+            Table.States (199).Minimal_Complete_Action := (Shift, 96, 358);
             Table.States (200).Productions := WisiToken.To_Vector (((295, 0), 
(295, 1), (295, 2)));
             Add_Action (Table.States (200), 3, 121);
             Add_Action (Table.States (200), 39, 122);
@@ -2205,7 +2185,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (200), 320, 144);
             Add_Goto (Table.States (200), 321, 145);
             Add_Goto (Table.States (200), 330, 146);
-            Set_Minimal_Action (Table.States (200).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (200).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (201).Productions := WisiToken.To_Vector ((1 => (295, 
3)));
             Add_Action (Table.States (201), 4, 1);
             Add_Action (Table.States (201), 5, 2);
@@ -2264,13 +2244,13 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (201), 303, 101);
             Add_Goto (Table.States (201), 306, 363);
             Add_Goto (Table.States (201), 323, 114);
-            Set_Minimal_Action (Table.States (201).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (201).Minimal_Complete_Action := (Reduce, 300, 0);
          end Subr_3;
          procedure Subr_4
          is begin
             Table.States (202).Productions := WisiToken.To_Vector ((1 => (295, 
5)));
             Add_Action (Table.States (202), (22, 24, 43), (295, 5), 1, null, 
null);
-            Set_Minimal_Action (Table.States (202).Minimal_Complete_Actions, 
(1 => (Reduce, 295, 1)));
+            Table.States (202).Minimal_Complete_Action := (Reduce, 295, 1);
             Table.States (203).Productions := WisiToken.To_Vector (((160, 0), 
(324, 2)));
             Add_Action (Table.States (203), 4, 1);
             Add_Action (Table.States (203), 5, 2);
@@ -2330,12 +2310,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (203), 303, 101);
             Add_Goto (Table.States (203), 306, 363);
             Add_Goto (Table.States (203), 323, 114);
-            Set_Minimal_Action (Table.States (203).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (203).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (204).Productions := WisiToken.To_Vector (((152, 0), 
(323, 0)));
             Add_Action (Table.States (204), 22, 365);
             Add_Action (Table.States (204), 43, 366);
             Add_Error (Table.States (204));
-            Set_Minimal_Action (Table.States (204).Minimal_Complete_Actions, 
((Shift, 22, 365), (Shift, 43, 366)));
+            Table.States (204).Minimal_Complete_Action := (Shift, 22, 365);
             Table.States (205).Productions := WisiToken.To_Vector (((128, 0), 
(178, 1), (239, 0), (239, 1), (261, 0),
             (272, 0), (293, 0), (293, 1), (293, 2), (293, 3), (324, 1)));
             Add_Action (Table.States (205), 4, 1);
@@ -2402,8 +2382,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (205), 306, 363);
             Add_Goto (Table.States (205), 322, 242);
             Add_Goto (Table.States (205), 323, 114);
-            Set_Minimal_Action (Table.States (205).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 96, 238),
-            (Shift, 102, 240), (Reduce, 300, 0)));
+            Table.States (205).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (206).Productions := WisiToken.To_Vector (((178, 0), 
(324, 0)));
             Add_Action (Table.States (206), 4, 1);
             Add_Action (Table.States (206), 5, 2);
@@ -2462,55 +2441,55 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (206), 303, 101);
             Add_Goto (Table.States (206), 306, 363);
             Add_Goto (Table.States (206), 323, 114);
-            Set_Minimal_Action (Table.States (206).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (206).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (207).Productions := WisiToken.To_Vector ((1 => (296, 
1)));
             Add_Action (Table.States (207), (22, 24, 43), (296, 1), 1, 
select_alternative_list_1'Access, null);
-            Set_Minimal_Action (Table.States (207).Minimal_Complete_Actions, 
(1 => (Reduce, 296, 1)));
+            Table.States (207).Minimal_Complete_Action := (Reduce, 296, 1);
             Table.States (208).Productions := WisiToken.To_Vector (((296, 0), 
(297, 0)));
             Add_Action (Table.States (208), 22, Reduce, (297, 0), 1, null, 
null);
             Add_Action (Table.States (208), 24, Reduce, (297, 0), 1, null, 
null);
             Add_Action (Table.States (208), 43, 369);
             Add_Error (Table.States (208));
-            Set_Minimal_Action (Table.States (208).Minimal_Complete_Actions, 
(1 => (Reduce, 297, 1)));
+            Table.States (208).Minimal_Complete_Action := (Reduce, 297, 1);
             Table.States (209).Productions := WisiToken.To_Vector (((294, 0), 
(294, 1)));
             Add_Action (Table.States (209), 22, 370);
             Add_Action (Table.States (209), 24, 371);
             Add_Error (Table.States (209));
-            Set_Minimal_Action (Table.States (209).Minimal_Complete_Actions, 
((Shift, 22, 370), (Shift, 24, 371)));
+            Table.States (209).Minimal_Complete_Action := (Shift, 24, 371);
             Table.States (210).Productions := WisiToken.To_Vector ((1 => (126, 
0)));
             Add_Action (Table.States (210), 68, 372);
             Add_Error (Table.States (210));
-            Set_Minimal_Action (Table.States (210).Minimal_Complete_Actions, 
(1 => (Shift, 68, 372)));
+            Table.States (210).Minimal_Complete_Action := (Shift, 68, 372);
             Table.States (211).Productions := WisiToken.To_Vector ((1 => (313, 
0)));
             Add_Action (Table.States (211), 35, 373);
             Add_Error (Table.States (211));
-            Set_Minimal_Action (Table.States (211).Minimal_Complete_Actions, 
(1 => (Shift, 35, 373)));
+            Table.States (211).Minimal_Complete_Action := (Shift, 35, 373);
             Table.States (212).Productions := WisiToken.To_Vector (((316, 0), 
(317, 0)));
             Add_Action (Table.States (212), 104, 374);
             Add_Error (Table.States (212));
-            Set_Minimal_Action (Table.States (212).Minimal_Complete_Actions, 
(1 => (Shift, 104, 374)));
+            Table.States (212).Minimal_Complete_Action := (Shift, 104, 374);
             Table.States (213).Productions := WisiToken.To_Vector (((319, 0), 
(319, 1), (319, 2)));
             Add_Action (Table.States (213), 104, 375);
             Add_Error (Table.States (213));
-            Set_Minimal_Action (Table.States (213).Minimal_Complete_Actions, 
(1 => (Shift, 104, 375)));
+            Table.States (213).Minimal_Complete_Action := (Shift, 104, 375);
             Table.States (214).Productions := WisiToken.To_Vector (((305, 0), 
(305, 1), (305, 2)));
             Add_Action (Table.States (214), 35, Reduce, (122, 1), 0, null, 
null);
             Add_Action (Table.States (214), 74, 337);
             Add_Action (Table.States (214), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (214));
             Add_Goto (Table.States (214), 122, 376);
-            Set_Minimal_Action (Table.States (214).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (214).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (215).Productions := WisiToken.To_Vector (((206, 0), 
(223, 0), (223, 1), (259, 0), (260, 0)));
             Add_Action (Table.States (215), 35, Reduce, (169, 2), 0, null, 
null);
             Add_Action (Table.States (215), 76, 377);
             Add_Action (Table.States (215), 96, Reduce, (169, 2), 0, null, 
null);
             Add_Error (Table.States (215));
             Add_Goto (Table.States (215), 169, 378);
-            Set_Minimal_Action (Table.States (215).Minimal_Complete_Actions, 
(1 => (Reduce, 169, 0)));
+            Table.States (215).Minimal_Complete_Action := (Reduce, 169, 0);
             Table.States (216).Productions := WisiToken.To_Vector ((1 => (331, 
0)));
             Add_Action (Table.States (216), 69, 379);
             Add_Error (Table.States (216));
-            Set_Minimal_Action (Table.States (216).Minimal_Complete_Actions, 
(1 => (Shift, 69, 379)));
+            Table.States (216).Minimal_Complete_Action := (Shift, 69, 379);
             Table.States (217).Productions := WisiToken.To_Vector ((1 => (331, 
1)));
             Add_Action (Table.States (217), 104, 119);
             Add_Action (Table.States (217), 105, 33);
@@ -2521,12 +2500,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (217), 239, 219);
             Add_Goto (Table.States (217), 272, 92);
             Add_Goto (Table.States (217), 293, 97);
-            Set_Minimal_Action (Table.States (217).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (217).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (218).Productions := WisiToken.To_Vector (((238, 0), 
(331, 2)));
             Add_Action (Table.States (218), 83, 381);
             Add_Action (Table.States (218), 96, 382);
             Add_Error (Table.States (218));
-            Set_Minimal_Action (Table.States (218).Minimal_Complete_Actions, 
(1 => (Shift, 96, 382)));
+            Table.States (218).Minimal_Complete_Action := (Shift, 96, 382);
             Table.States (219).Productions := WisiToken.To_Vector (((128, 0), 
(238, 1), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (219), 76, 235);
@@ -2538,20 +2517,19 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (219));
             Add_Goto (Table.States (219), 115, 241);
             Add_Goto (Table.States (219), 322, 242);
-            Set_Minimal_Action (Table.States (219).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 238, 1)));
+            Table.States (219).Minimal_Complete_Action := (Reduce, 238, 1);
             Table.States (220).Productions := WisiToken.To_Vector ((1 => (229, 
0)));
             Add_Action (Table.States (220), (1 =>  37), (229, 0), 2, 
iteration_scheme_0'Access, null);
-            Set_Minimal_Action (Table.States (220).Minimal_Complete_Actions, 
(1 => (Reduce, 229, 2)));
+            Table.States (220).Minimal_Complete_Action := (Reduce, 229, 2);
             Table.States (221).Productions := WisiToken.To_Vector (((238, 0), 
(332, 3)));
             Add_Action (Table.States (221), 83, 381);
             Add_Action (Table.States (221), 96, 383);
             Add_Error (Table.States (221));
-            Set_Minimal_Action (Table.States (221).Minimal_Complete_Actions, 
(1 => (Shift, 96, 383)));
+            Table.States (221).Minimal_Complete_Action := (Shift, 96, 383);
             Table.States (222).Productions := WisiToken.To_Vector ((1 => (217, 
0)));
             Add_Action (Table.States (222), 90, 384);
             Add_Error (Table.States (222));
-            Set_Minimal_Action (Table.States (222).Minimal_Complete_Actions, 
(1 => (Shift, 90, 384)));
+            Table.States (222).Minimal_Complete_Action := (Shift, 90, 384);
             Table.States (223).Productions := WisiToken.To_Vector (((131, 0), 
(245, 0), (245, 1), (245, 2)));
             Add_Action (Table.States (223), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (223), 13, Reduce, (131, 0), 2, 
block_label_0'Access, block_label_0_check'Access);
@@ -2567,8 +2545,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (223));
             Add_Goto (Table.States (223), 114, 387);
             Add_Goto (Table.States (223), 241, 388);
-            Set_Minimal_Action (Table.States (223).Minimal_Complete_Actions, 
((Shift, 26, 385), (Reduce, 131, 2),
-            (Reduce, 241, 0)));
+            Table.States (223).Minimal_Complete_Action := (Reduce, 131, 2);
             Table.States (224).Productions := WisiToken.To_Vector ((1 => (133, 
1)));
             Add_Action (Table.States (224), 4, 1);
             Add_Action (Table.States (224), 5, 2);
@@ -2627,7 +2604,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (224), 303, 101);
             Add_Goto (Table.States (224), 306, 363);
             Add_Goto (Table.States (224), 323, 114);
-            Set_Minimal_Action (Table.States (224).Minimal_Complete_Actions, 
(1 => (Reduce, 218, 0)));
+            Table.States (224).Minimal_Complete_Action := (Reduce, 218, 0);
             Table.States (225).Productions := WisiToken.To_Vector ((1 => (133, 
0)));
             Add_Action (Table.States (225), 13, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (225), 25, Reduce, (246, 2), 0, null, 
null);
@@ -2699,14 +2676,14 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (225), 319, 113);
             Add_Goto (Table.States (225), 325, 115);
             Add_Goto (Table.States (225), 331, 116);
-            Set_Minimal_Action (Table.States (225).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (225).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (226).Productions := WisiToken.To_Vector ((1 => (229, 
1)));
             Add_Action (Table.States (226), 37, Reduce, (231, 1), 0, null, 
null);
             Add_Action (Table.States (226), 104, 395);
             Add_Error (Table.States (226));
             Add_Goto (Table.States (226), 230, 155);
             Add_Goto (Table.States (226), 231, 156);
-            Set_Minimal_Action (Table.States (226).Minimal_Complete_Actions, 
(1 => (Reduce, 231, 0)));
+            Table.States (226).Minimal_Complete_Action := (Reduce, 231, 0);
             Table.States (227).Productions := WisiToken.To_Vector ((1 => (232, 
1)));
             Add_Action (Table.States (227), 4, 1);
             Add_Action (Table.States (227), 5, 2);
@@ -2763,16 +2740,16 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (227), 303, 101);
             Add_Goto (Table.States (227), 306, 363);
             Add_Goto (Table.States (227), 323, 114);
-            Set_Minimal_Action (Table.States (227).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (227).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (228).Productions := WisiToken.To_Vector ((1 => (232, 
0)));
             Add_Action (Table.States (228), 37, 397);
             Add_Error (Table.States (228));
-            Set_Minimal_Action (Table.States (228).Minimal_Complete_Actions, 
(1 => (Shift, 37, 397)));
+            Table.States (228).Minimal_Complete_Action := (Shift, 37, 397);
             Table.States (229).Productions := WisiToken.To_Vector ((1 => (143, 
0)));
             Add_Action (Table.States (229), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
-            48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (143, 0), 2, null,
-            null);
-            Set_Minimal_Action (Table.States (229).Minimal_Complete_Actions, 
(1 => (Reduce, 143, 2)));
+            48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (143, 0), 2,
+            compilation_unit_list_0'Access, null);
+            Table.States (229).Minimal_Complete_Action := (Reduce, 143, 2);
             Table.States (230).Productions := WisiToken.To_Vector (((251, 0), 
(251, 1)));
             Add_Action (Table.States (230), 104, 119);
             Add_Action (Table.States (230), 105, 33);
@@ -2782,17 +2759,17 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (230), 239, 398);
             Add_Goto (Table.States (230), 272, 92);
             Add_Goto (Table.States (230), 293, 97);
-            Set_Minimal_Action (Table.States (230).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (230).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (231).Productions := WisiToken.To_Vector ((1 => (214, 
0)));
             Add_Action (Table.States (231), 96, 399);
             Add_Error (Table.States (231));
-            Set_Minimal_Action (Table.States (231).Minimal_Complete_Actions, 
(1 => (Shift, 96, 399)));
+            Table.States (231).Minimal_Complete_Action := (Shift, 96, 399);
             Table.States (232).Productions := WisiToken.To_Vector ((1 => (216, 
0)));
             Add_Action (Table.States (232), 74, 337);
             Add_Action (Table.States (232), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (232));
             Add_Goto (Table.States (232), 122, 400);
-            Set_Minimal_Action (Table.States (232).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (232).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (233).Productions := WisiToken.To_Vector (((157, 9), 
(186, 0), (244, 0), (244, 1), (244, 2),
             (244, 3), (244, 4), (244, 5)));
             Add_Action (Table.States (233), 7, Reduce, (118, 1), 0, null, 
null);
@@ -2809,12 +2786,11 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (233), 106, Reduce, (118, 1), 0, null, 
null);
             Add_Error (Table.States (233));
             Add_Goto (Table.States (233), 118, 404);
-            Set_Minimal_Action (Table.States (233).Minimal_Complete_Actions, 
((Shift, 16, 402), (Shift, 26, 403),
-            (Reduce, 118, 0)));
+            Table.States (233).Minimal_Complete_Action := (Shift, 26, 403);
             Table.States (234).Productions := WisiToken.To_Vector ((1 => (219, 
0)));
             Add_Action (Table.States (234), 104, 405);
             Add_Error (Table.States (234));
-            Set_Minimal_Action (Table.States (234).Minimal_Complete_Actions, 
(1 => (Shift, 104, 405)));
+            Table.States (234).Minimal_Complete_Action := (Shift, 104, 405);
             Table.States (235).Productions := WisiToken.To_Vector (((115, 0), 
(115, 1), (239, 0)));
             Add_Action (Table.States (235), 3, 121);
             Add_Action (Table.States (235), 15, 258);
@@ -2866,8 +2842,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (235), 320, 144);
             Add_Goto (Table.States (235), 321, 145);
             Add_Goto (Table.States (235), 330, 146);
-            Set_Minimal_Action (Table.States (235).Minimal_Complete_Actions, 
((Shift, 32, 260), (Shift, 105, 33),
-            (Reduce, 125, 0)));
+            Table.States (235).Minimal_Complete_Action := (Reduce, 125, 0);
             Table.States (236).Productions := WisiToken.To_Vector ((1 => (123, 
0)));
             Add_Action (Table.States (236), 3, 121);
             Add_Action (Table.States (236), 39, 122);
@@ -2903,32 +2878,31 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (236), 320, 144);
             Add_Goto (Table.States (236), 321, 145);
             Add_Goto (Table.States (236), 330, 146);
-            Set_Minimal_Action (Table.States (236).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (236).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (237).Productions := WisiToken.To_Vector (((293, 0), 
(293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (237), 9, 412);
             Add_Action (Table.States (237), 104, 413);
             Add_Action (Table.States (237), 105, 414);
             Add_Action (Table.States (237), 106, 415);
             Add_Error (Table.States (237));
-            Set_Minimal_Action (Table.States (237).Minimal_Complete_Actions, 
((Shift, 9, 412), (Shift, 104, 413),
-            (Shift, 105, 414), (Shift, 106, 415)));
+            Table.States (237).Minimal_Complete_Action := (Shift, 104, 413);
             Table.States (238).Productions := WisiToken.To_Vector ((1 => (261, 
0)));
             Add_Action (Table.States (238), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (261, 0), 2, procedure_call_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (238).Minimal_Complete_Actions, 
(1 => (Reduce, 261, 2)));
+            Table.States (238).Minimal_Complete_Action := (Reduce, 261, 2);
             Table.States (239).Productions := WisiToken.To_Vector ((1 => (322, 
0)));
             Add_Action (Table.States (239), (7, 19, 20, 38, 53, 76, 104, 105, 
106), (322, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (239).Minimal_Complete_Actions, 
(1 => (Reduce, 322, 1)));
+            Table.States (239).Minimal_Complete_Action := (Reduce, 322, 1);
             Table.States (240).Productions := WisiToken.To_Vector ((1 => (322, 
1)));
             Add_Action (Table.States (240), (7, 19, 20, 38, 53, 76, 104, 105, 
106), (322, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (240).Minimal_Complete_Actions, 
(1 => (Reduce, 322, 1)));
+            Table.States (240).Minimal_Complete_Action := (Reduce, 322, 1);
             Table.States (241).Productions := WisiToken.To_Vector ((1 => (239, 
1)));
             Add_Action (Table.States (241), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (239, 1), 2, name_1'Access,
             null);
-            Set_Minimal_Action (Table.States (241).Minimal_Complete_Actions, 
(1 => (Reduce, 239, 2)));
+            Table.States (241).Minimal_Complete_Action := (Reduce, 239, 2);
             Table.States (242).Productions := WisiToken.To_Vector (((128, 0), 
(272, 0)));
             Add_Action (Table.States (242), 7, 416);
             Add_Action (Table.States (242), 19, 417);
@@ -2945,11 +2919,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (242), 239, 422);
             Add_Goto (Table.States (242), 272, 92);
             Add_Goto (Table.States (242), 293, 97);
-            Set_Minimal_Action (Table.States (242).Minimal_Complete_Actions, 
((Shift, 38, 419), (Shift, 76, 126)));
+            Table.States (242).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (243).Productions := WisiToken.To_Vector (((179, 0), 
(179, 1)));
             Add_Action (Table.States (243), 104, 423);
             Add_Error (Table.States (243));
-            Set_Minimal_Action (Table.States (243).Minimal_Complete_Actions, 
(1 => (Shift, 104, 423)));
+            Table.States (243).Minimal_Complete_Action := (Shift, 104, 423);
             Table.States (244).Productions := WisiToken.To_Vector (((207, 0), 
(213, 2)));
             Add_Action (Table.States (244), 104, 119);
             Add_Action (Table.States (244), 105, 33);
@@ -2959,7 +2933,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (244), 239, 424);
             Add_Goto (Table.States (244), 272, 92);
             Add_Goto (Table.States (244), 293, 97);
-            Set_Minimal_Action (Table.States (244).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (244).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (245).Productions := WisiToken.To_Vector (((213, 1), 
(262, 0)));
             Add_Action (Table.States (245), 104, 119);
             Add_Action (Table.States (245), 105, 33);
@@ -2969,7 +2943,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (245), 239, 425);
             Add_Goto (Table.States (245), 272, 92);
             Add_Goto (Table.States (245), 293, 97);
-            Set_Minimal_Action (Table.States (245).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (245).Minimal_Complete_Action := (Shift, 104, 119);
          end Subr_4;
          procedure Subr_5
          is begin
@@ -2979,14 +2953,14 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (246), 74, Reduce, (312, 1), 1, null, 
subprogram_specification_1_check'Access);
             Add_Action (Table.States (246), 96, Reduce, (312, 1), 1, null, 
subprogram_specification_1_check'Access);
             Add_Error (Table.States (246));
-            Set_Minimal_Action (Table.States (246).Minimal_Complete_Actions, 
((Shift, 35, 426), (Reduce, 312, 1)));
+            Table.States (246).Minimal_Complete_Action := (Reduce, 312, 1);
             Table.States (247).Productions := WisiToken.To_Vector (((243, 0), 
(312, 0)));
             Add_Action (Table.States (247), 35, 427, (312, 0), 1, null, 
subprogram_specification_0_check'Access);
             Add_Action (Table.States (247), 56, Reduce, (312, 0), 1, null, 
subprogram_specification_0_check'Access);
             Add_Action (Table.States (247), 74, Reduce, (312, 0), 1, null, 
subprogram_specification_0_check'Access);
             Add_Action (Table.States (247), 96, Reduce, (312, 0), 1, null, 
subprogram_specification_0_check'Access);
             Add_Error (Table.States (247));
-            Set_Minimal_Action (Table.States (247).Minimal_Complete_Actions, 
((Shift, 35, 427), (Reduce, 312, 1)));
+            Table.States (247).Minimal_Complete_Action := (Reduce, 312, 1);
             Table.States (248).Productions := WisiToken.To_Vector (((112, 0), 
(307, 0), (308, 0), (309, 0), (311, 0)));
             Add_Action (Table.States (248), 35, 428, (122, 1), 0, null, null);
             Add_Action (Table.States (248), 56, 429);
@@ -2994,13 +2968,12 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (248), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (248));
             Add_Goto (Table.States (248), 122, 430);
-            Set_Minimal_Action (Table.States (248).Minimal_Complete_Actions, 
((Shift, 35, 428), (Shift, 56, 429),
-            (Reduce, 122, 0)));
+            Table.States (248).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (249).Productions := WisiToken.To_Vector ((1 => (249, 
0)));
             Add_Action (Table.States (249), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (249, 0), 2,
             package_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (249).Minimal_Complete_Actions, 
(1 => (Reduce, 249, 2)));
+            Table.States (249).Minimal_Complete_Action := (Reduce, 249, 2);
             Table.States (250).Productions := WisiToken.To_Vector (((115, 0), 
(115, 1)));
             Add_Action (Table.States (250), 3, 121);
             Add_Action (Table.States (250), 15, 258);
@@ -3051,10 +3024,10 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (250), 320, 144);
             Add_Goto (Table.States (250), 321, 145);
             Add_Goto (Table.States (250), 330, 146);
-            Set_Minimal_Action (Table.States (250).Minimal_Complete_Actions, 
((Shift, 32, 260), (Reduce, 125, 0)));
+            Table.States (250).Minimal_Complete_Action := (Reduce, 125, 0);
             Table.States (251).Productions := WisiToken.To_Vector ((1 => (116, 
0)));
             Add_Action (Table.States (251), (21, 76, 96), (116, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (251).Minimal_Complete_Actions, 
(1 => (Reduce, 116, 1)));
+            Table.States (251).Minimal_Complete_Action := (Reduce, 116, 1);
             Table.States (252).Productions := WisiToken.To_Vector (((113, 0), 
(113, 1)));
             Add_Action (Table.States (252), 21, Reduce, (253, 1), 0, null, 
null);
             Add_Action (Table.States (252), 76, 431);
@@ -3062,16 +3035,16 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (252));
             Add_Goto (Table.States (252), 199, 344);
             Add_Goto (Table.States (252), 253, 432);
-            Set_Minimal_Action (Table.States (252).Minimal_Complete_Actions, 
(1 => (Reduce, 253, 0)));
+            Table.States (252).Minimal_Complete_Action := (Reduce, 253, 0);
             Table.States (253).Productions := WisiToken.To_Vector ((1 => (303, 
8)));
             Add_Action (Table.States (253), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 8), 3, simple_statement_8'Access, null);
-            Set_Minimal_Action (Table.States (253).Minimal_Complete_Actions, 
(1 => (Reduce, 303, 3)));
+            Table.States (253).Minimal_Complete_Action := (Reduce, 303, 3);
             Table.States (254).Productions := WisiToken.To_Vector ((1 => (197, 
2)));
             Add_Action (Table.States (254), (10, 20, 21, 22, 23, 33, 35, 37, 
38, 40, 42, 43, 53, 55, 68, 74, 75, 77,
             78, 79, 82, 83, 85, 86, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 
99), (197, 2), 2, null, null);
-            Set_Minimal_Action (Table.States (254).Minimal_Complete_Actions, 
(1 => (Reduce, 197, 2)));
+            Table.States (254).Minimal_Complete_Action := (Reduce, 197, 2);
             Table.States (255).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (258, 4), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (255), 10, Reduce, (258, 4), 2, 
primary_4'Access, null);
@@ -3117,12 +3090,11 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (255));
             Add_Goto (Table.States (255), 115, 241);
             Add_Goto (Table.States (255), 322, 242);
-            Set_Minimal_Action (Table.States (255).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 258, 2)));
+            Table.States (255).Minimal_Complete_Action := (Reduce, 258, 2);
             Table.States (256).Productions := WisiToken.To_Vector ((1 => (197, 
3)));
             Add_Action (Table.States (256), (10, 20, 21, 22, 23, 33, 35, 37, 
38, 40, 42, 43, 53, 55, 68, 74, 75, 77,
             78, 79, 82, 83, 85, 86, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 
99), (197, 3), 2, null, null);
-            Set_Minimal_Action (Table.States (256).Minimal_Complete_Actions, 
(1 => (Reduce, 197, 2)));
+            Table.States (256).Minimal_Complete_Action := (Reduce, 197, 2);
             Table.States (257).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (272, 0), (275, 0),
             (275, 1), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (257), 10, Reduce, (275, 1), 2, null, 
null);
@@ -3149,8 +3121,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (257));
             Add_Goto (Table.States (257), 115, 241);
             Add_Goto (Table.States (257), 322, 242);
-            Set_Minimal_Action (Table.States (257).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 275, 2)));
+            Table.States (257).Minimal_Complete_Action := (Reduce, 275, 2);
             Table.States (258).Productions := WisiToken.To_Vector ((1 => (136, 
0)));
             Add_Action (Table.States (258), 3, 121);
             Add_Action (Table.States (258), 35, Reduce, (192, 1), 0, null, 
null);
@@ -3186,13 +3157,13 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (258), 320, 144);
             Add_Goto (Table.States (258), 321, 145);
             Add_Goto (Table.States (258), 330, 146);
-            Set_Minimal_Action (Table.States (258).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (258).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (259).Productions := WisiToken.To_Vector ((1 => (273, 
0)));
             Add_Action (Table.States (259), 9, 435);
             Add_Action (Table.States (259), 62, 436);
             Add_Error (Table.States (259));
             Add_Goto (Table.States (259), 274, 437);
-            Set_Minimal_Action (Table.States (259).Minimal_Complete_Actions, 
(1 => (Shift, 62, 436)));
+            Table.States (259).Minimal_Complete_Action := (Shift, 9, 435);
             Table.States (260).Productions := WisiToken.To_Vector (((221, 0), 
(221, 1), (221, 2), (221, 3)));
             Add_Action (Table.States (260), 3, 121);
             Add_Action (Table.States (260), 39, 122);
@@ -3228,7 +3199,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (260), 320, 144);
             Add_Goto (Table.States (260), 321, 145);
             Add_Goto (Table.States (260), 330, 146);
-            Set_Minimal_Action (Table.States (260).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (260).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (261).Productions := WisiToken.To_Vector (((165, 1), 
(197, 3)));
             Add_Action (Table.States (261), 39, 122);
             Add_Action (Table.States (261), 41, 439);
@@ -3244,7 +3215,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (261), 258, 256);
             Add_Goto (Table.States (261), 272, 92);
             Add_Goto (Table.States (261), 293, 97);
-            Set_Minimal_Action (Table.States (261).Minimal_Complete_Actions, 
((Shift, 41, 439), (Shift, 105, 33)));
+            Table.States (261).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (262).Productions := WisiToken.To_Vector (((117, 2), 
(258, 1)));
             Add_Action (Table.States (262), 10, Reduce, (258, 1), 1, null, 
null);
             Add_Action (Table.States (262), 33, Reduce, (258, 1), 1, null, 
null);
@@ -3273,10 +3244,10 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (262), 99, Reduce, (258, 1), 1, null, 
null);
             Add_Action (Table.States (262), 100, Reduce, (258, 1), 1, null, 
null);
             Add_Error (Table.States (262));
-            Set_Minimal_Action (Table.States (262).Minimal_Complete_Actions, 
((Shift, 54, 440), (Reduce, 258, 1)));
+            Table.States (262).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (263).Productions := WisiToken.To_Vector ((1 => (165, 
3)));
             Add_Action (Table.States (263), (79, 87), (165, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (263).Minimal_Complete_Actions, 
(1 => (Reduce, 165, 1)));
+            Table.States (263).Minimal_Complete_Action := (Reduce, 165, 1);
             Table.States (264).Productions := WisiToken.To_Vector (((124, 0), 
(124, 1), (239, 6)));
             Add_Action (Table.States (264), 10, Reduce, (239, 6), 1, null, 
null);
             Add_Action (Table.States (264), 33, Reduce, (239, 6), 1, null, 
null);
@@ -3311,30 +3282,30 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (264), 101, Reduce, (239, 6), 1, null, 
null);
             Add_Action (Table.States (264), 102, Reduce, (239, 6), 1, null, 
null);
             Add_Error (Table.States (264));
-            Set_Minimal_Action (Table.States (264).Minimal_Complete_Actions, 
(1 => (Reduce, 239, 1)));
+            Table.States (264).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (265).Productions := WisiToken.To_Vector ((1 => (125, 
1)));
             Add_Action (Table.States (265), (35, 77, 83, 96), (125, 1), 1, 
null, null);
-            Set_Minimal_Action (Table.States (265).Minimal_Complete_Actions, 
(1 => (Reduce, 125, 1)));
+            Table.States (265).Minimal_Complete_Action := (Reduce, 125, 1);
             Table.States (266).Productions := WisiToken.To_Vector (((117, 4), 
(125, 0)));
             Add_Action (Table.States (266), 77, 442);
             Add_Action (Table.States (266), 83, 443);
             Add_Error (Table.States (266));
-            Set_Minimal_Action (Table.States (266).Minimal_Complete_Actions, 
(1 => (Shift, 77, 442)));
+            Table.States (266).Minimal_Complete_Action := (Shift, 77, 442);
             Table.States (267).Productions := WisiToken.To_Vector ((1 => (153, 
1)));
             Add_Action (Table.States (267), (1 =>  77), (153, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (267).Minimal_Complete_Actions, 
(1 => (Reduce, 153, 1)));
+            Table.States (267).Minimal_Complete_Action := (Reduce, 153, 1);
             Table.States (268).Productions := WisiToken.To_Vector ((1 => (117, 
3)));
             Add_Action (Table.States (268), 77, 444);
             Add_Error (Table.States (268));
-            Set_Minimal_Action (Table.States (268).Minimal_Complete_Actions, 
(1 => (Shift, 77, 444)));
+            Table.States (268).Minimal_Complete_Action := (Shift, 77, 444);
             Table.States (269).Productions := WisiToken.To_Vector ((1 => (166, 
1)));
             Add_Action (Table.States (269), (79, 87), (166, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (269).Minimal_Complete_Actions, 
(1 => (Reduce, 166, 1)));
+            Table.States (269).Minimal_Complete_Action := (Reduce, 166, 1);
             Table.States (270).Productions := WisiToken.To_Vector (((124, 2), 
(124, 3), (166, 0)));
             Add_Action (Table.States (270), 79, 445);
             Add_Action (Table.States (270), 87, 446);
             Add_Error (Table.States (270));
-            Set_Minimal_Action (Table.States (270).Minimal_Complete_Actions, 
(1 => (Shift, 87, 446)));
+            Table.States (270).Minimal_Complete_Action := (Shift, 87, 446);
             Table.States (271).Productions := WisiToken.To_Vector (((124, 4), 
(165, 0), (192, 0)));
             Add_Action (Table.States (271), 74, Reduce, (192, 0), 1, null, 
null);
             Add_Action (Table.States (271), 77, Reduce, (124, 4), 1, 
association_opt_4'Access, null, (192, 0), 1, null,
@@ -3343,15 +3314,14 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (271), 83, Reduce, (124, 4), 1, 
association_opt_4'Access, null);
             Add_Action (Table.States (271), 87, Reduce, (165, 0), 1, null, 
null);
             Add_Error (Table.States (271));
-            Set_Minimal_Action (Table.States (271).Minimal_Complete_Actions, 
((Reduce, 124, 1), (Reduce, 165, 1),
-            (Reduce, 192, 1)));
+            Table.States (271).Minimal_Complete_Action := (Reduce, 124, 1);
             Table.States (272).Productions := WisiToken.To_Vector (((117, 0), 
(117, 1)));
             Add_Action (Table.States (272), 74, 447);
             Add_Error (Table.States (272));
-            Set_Minimal_Action (Table.States (272).Minimal_Complete_Actions, 
(1 => (Shift, 74, 447)));
+            Table.States (272).Minimal_Complete_Action := (Shift, 74, 447);
             Table.States (273).Productions := WisiToken.To_Vector ((1 => (153, 
0)));
             Add_Action (Table.States (273), (1 =>  77), (153, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (273).Minimal_Complete_Actions, 
(1 => (Reduce, 153, 1)));
+            Table.States (273).Minimal_Complete_Action := (Reduce, 153, 1);
             Table.States (274).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (258, 3), (272, 0),
             (277, 0), (277, 1), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (274), 10, Reduce, (258, 3), 1, null, 
null);
@@ -3395,14 +3365,13 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (274));
             Add_Goto (Table.States (274), 115, 241);
             Add_Goto (Table.States (274), 322, 448);
-            Set_Minimal_Action (Table.States (274).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 258, 1)));
+            Table.States (274).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (275).Productions := WisiToken.To_Vector ((1 => (153, 
2)));
             Add_Action (Table.States (275), (1 =>  77), (153, 2), 1, null, 
null);
-            Set_Minimal_Action (Table.States (275).Minimal_Complete_Actions, 
(1 => (Reduce, 153, 1)));
+            Table.States (275).Minimal_Complete_Action := (Reduce, 153, 1);
             Table.States (276).Productions := WisiToken.To_Vector ((1 => (165, 
2)));
             Add_Action (Table.States (276), (79, 87), (165, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (276).Minimal_Complete_Actions, 
(1 => (Reduce, 165, 1)));
+            Table.States (276).Minimal_Complete_Action := (Reduce, 165, 1);
             Table.States (277).Productions := WisiToken.To_Vector (((277, 2), 
(287, 0), (287, 1), (287, 2), (287, 3)));
             Add_Action (Table.States (277), 10, Reduce, (287, 3), 1, null, 
null);
             Add_Action (Table.States (277), 33, 288);
@@ -3425,13 +3394,13 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (277), 98, 295);
             Add_Error (Table.States (277));
             Add_Goto (Table.States (277), 288, 296);
-            Set_Minimal_Action (Table.States (277).Minimal_Complete_Actions, 
((Shift, 85, 449), (Reduce, 287, 1)));
+            Table.States (277).Minimal_Complete_Action := (Reduce, 287, 1);
             Table.States (278).Productions := WisiToken.To_Vector ((1 => (139, 
0)));
             Add_Action (Table.States (278), 72, 450);
             Add_Error (Table.States (278));
             Add_Goto (Table.States (278), 140, 451);
             Add_Goto (Table.States (278), 141, 452);
-            Set_Minimal_Action (Table.States (278).Minimal_Complete_Actions, 
(1 => (Shift, 72, 450)));
+            Table.States (278).Minimal_Complete_Action := (Shift, 72, 450);
             Table.States (279).Productions := WisiToken.To_Vector ((1 => (197, 
0)));
             Add_Action (Table.States (279), 39, 122);
             Add_Action (Table.States (279), 41, 124);
@@ -3447,7 +3416,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (279), 258, 453);
             Add_Goto (Table.States (279), 272, 92);
             Add_Goto (Table.States (279), 293, 97);
-            Set_Minimal_Action (Table.States (279).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (279).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (280).Productions := WisiToken.To_Vector ((1 => (282, 
0)));
             Add_Action (Table.States (280), 3, 121);
             Add_Action (Table.States (280), 39, 122);
@@ -3475,11 +3444,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (280), 320, 144);
             Add_Goto (Table.States (280), 321, 145);
             Add_Goto (Table.States (280), 330, 146);
-            Set_Minimal_Action (Table.States (280).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (280).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (281).Productions := WisiToken.To_Vector ((1 => (283, 
0)));
             Add_Action (Table.States (281), 68, 455);
             Add_Error (Table.States (281));
-            Set_Minimal_Action (Table.States (281).Minimal_Complete_Actions, 
(1 => (Shift, 68, 455)));
+            Table.States (281).Minimal_Complete_Action := (Shift, 68, 455);
             Table.States (282).Productions := WisiToken.To_Vector ((1 => (284, 
0)));
             Add_Action (Table.States (282), 3, 121);
             Add_Action (Table.States (282), 39, 122);
@@ -3507,11 +3476,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (282), 320, 144);
             Add_Goto (Table.States (282), 321, 145);
             Add_Goto (Table.States (282), 330, 146);
-            Set_Minimal_Action (Table.States (282).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (282).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (283).Productions := WisiToken.To_Vector ((1 => (285, 
0)));
             Add_Action (Table.States (283), 22, 457);
             Add_Error (Table.States (283));
-            Set_Minimal_Action (Table.States (283).Minimal_Complete_Actions, 
(1 => (Shift, 22, 457)));
+            Table.States (283).Minimal_Complete_Action := (Shift, 22, 457);
             Table.States (284).Productions := WisiToken.To_Vector ((1 => (286, 
0)));
             Add_Action (Table.States (284), 3, 121);
             Add_Action (Table.States (284), 39, 122);
@@ -3539,7 +3508,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (284), 320, 144);
             Add_Goto (Table.States (284), 321, 145);
             Add_Goto (Table.States (284), 330, 146);
-            Set_Minimal_Action (Table.States (284).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (284).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (285).Productions := WisiToken.To_Vector (((282, 1), 
(283, 1)));
             Add_Action (Table.States (285), 3, 121);
             Add_Action (Table.States (285), 39, 122);
@@ -3568,7 +3537,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (285), 320, 144);
             Add_Goto (Table.States (285), 321, 145);
             Add_Goto (Table.States (285), 330, 146);
-            Set_Minimal_Action (Table.States (285).Minimal_Complete_Actions, 
((Shift, 68, 459), (Shift, 105, 33)));
+            Table.States (285).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (286).Productions := WisiToken.To_Vector (((284, 1), 
(285, 1)));
             Add_Action (Table.States (286), 3, 121);
             Add_Action (Table.States (286), 22, 461);
@@ -3597,7 +3566,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (286), 320, 144);
             Add_Goto (Table.States (286), 321, 145);
             Add_Goto (Table.States (286), 330, 146);
-            Set_Minimal_Action (Table.States (286).Minimal_Complete_Actions, 
((Shift, 22, 461), (Shift, 105, 33)));
+            Table.States (286).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (287).Productions := WisiToken.To_Vector ((1 => (286, 
1)));
             Add_Action (Table.States (287), 3, 121);
             Add_Action (Table.States (287), 39, 122);
@@ -3625,7 +3594,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (287), 320, 144);
             Add_Goto (Table.States (287), 321, 145);
             Add_Goto (Table.States (287), 330, 146);
-            Set_Minimal_Action (Table.States (287).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (287).Minimal_Complete_Action := (Shift, 103, 129);
          end Subr_5;
          procedure Subr_6
          is begin
@@ -3656,29 +3625,29 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (288), 320, 144);
             Add_Goto (Table.States (288), 321, 145);
             Add_Goto (Table.States (288), 330, 146);
-            Set_Minimal_Action (Table.States (288).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (288).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (289).Productions := WisiToken.To_Vector ((1 => (287, 
0)));
             Add_Action (Table.States (289), 33, 468);
             Add_Error (Table.States (289));
-            Set_Minimal_Action (Table.States (289).Minimal_Complete_Actions, 
(1 => (Shift, 33, 468)));
+            Table.States (289).Minimal_Complete_Action := (Shift, 33, 468);
             Table.States (290).Productions := WisiToken.To_Vector ((1 => (288, 
0)));
             Add_Action (Table.States (290), (3, 39, 40, 41, 76, 94, 95, 103, 
104, 105, 106), (288, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (290).Minimal_Complete_Actions, 
(1 => (Reduce, 288, 1)));
+            Table.States (290).Minimal_Complete_Action := (Reduce, 288, 1);
             Table.States (291).Productions := WisiToken.To_Vector ((1 => (288, 
4)));
             Add_Action (Table.States (291), (3, 39, 40, 41, 76, 94, 95, 103, 
104, 105, 106), (288, 4), 1, null, null);
-            Set_Minimal_Action (Table.States (291).Minimal_Complete_Actions, 
(1 => (Reduce, 288, 1)));
+            Table.States (291).Minimal_Complete_Action := (Reduce, 288, 1);
             Table.States (292).Productions := WisiToken.To_Vector ((1 => (288, 
5)));
             Add_Action (Table.States (292), (3, 39, 40, 41, 76, 94, 95, 103, 
104, 105, 106), (288, 5), 1, null, null);
-            Set_Minimal_Action (Table.States (292).Minimal_Complete_Actions, 
(1 => (Reduce, 288, 1)));
+            Table.States (292).Minimal_Complete_Action := (Reduce, 288, 1);
             Table.States (293).Productions := WisiToken.To_Vector ((1 => (288, 
2)));
             Add_Action (Table.States (293), (3, 39, 40, 41, 76, 94, 95, 103, 
104, 105, 106), (288, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (293).Minimal_Complete_Actions, 
(1 => (Reduce, 288, 1)));
+            Table.States (293).Minimal_Complete_Action := (Reduce, 288, 1);
             Table.States (294).Productions := WisiToken.To_Vector ((1 => (288, 
3)));
             Add_Action (Table.States (294), (3, 39, 40, 41, 76, 94, 95, 103, 
104, 105, 106), (288, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (294).Minimal_Complete_Actions, 
(1 => (Reduce, 288, 1)));
+            Table.States (294).Minimal_Complete_Action := (Reduce, 288, 1);
             Table.States (295).Productions := WisiToken.To_Vector ((1 => (288, 
1)));
             Add_Action (Table.States (295), (3, 39, 40, 41, 76, 94, 95, 103, 
104, 105, 106), (288, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (295).Minimal_Complete_Actions, 
(1 => (Reduce, 288, 1)));
+            Table.States (295).Minimal_Complete_Action := (Reduce, 288, 1);
             Table.States (296).Productions := WisiToken.To_Vector ((1 => (287, 
2)));
             Add_Action (Table.States (296), 3, 121);
             Add_Action (Table.States (296), 39, 122);
@@ -3703,19 +3672,19 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (296), 320, 144);
             Add_Goto (Table.States (296), 321, 145);
             Add_Goto (Table.States (296), 330, 146);
-            Set_Minimal_Action (Table.States (296).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (296).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (297).Productions := WisiToken.To_Vector ((1 => (237, 
2)));
             Add_Action (Table.States (297), (3, 39, 40, 41, 76, 103, 104, 105, 
106), (237, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (297).Minimal_Complete_Actions, 
(1 => (Reduce, 237, 1)));
+            Table.States (297).Minimal_Complete_Action := (Reduce, 237, 1);
             Table.States (298).Productions := WisiToken.To_Vector ((1 => (237, 
3)));
             Add_Action (Table.States (298), (3, 39, 40, 41, 76, 103, 104, 105, 
106), (237, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (298).Minimal_Complete_Actions, 
(1 => (Reduce, 237, 1)));
+            Table.States (298).Minimal_Complete_Action := (Reduce, 237, 1);
             Table.States (299).Productions := WisiToken.To_Vector ((1 => (237, 
1)));
             Add_Action (Table.States (299), (3, 39, 40, 41, 76, 103, 104, 105, 
106), (237, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (299).Minimal_Complete_Actions, 
(1 => (Reduce, 237, 1)));
+            Table.States (299).Minimal_Complete_Action := (Reduce, 237, 1);
             Table.States (300).Productions := WisiToken.To_Vector ((1 => (237, 
0)));
             Add_Action (Table.States (300), (3, 39, 40, 41, 76, 103, 104, 105, 
106), (237, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (300).Minimal_Complete_Actions, 
(1 => (Reduce, 237, 1)));
+            Table.States (300).Minimal_Complete_Action := (Reduce, 237, 1);
             Table.States (301).Productions := WisiToken.To_Vector ((1 => (320, 
0)));
             Add_Action (Table.States (301), 3, 121);
             Add_Action (Table.States (301), 39, 122);
@@ -3734,16 +3703,16 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (301), 258, 135);
             Add_Goto (Table.States (301), 272, 92);
             Add_Goto (Table.States (301), 293, 97);
-            Set_Minimal_Action (Table.States (301).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (301).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (302).Productions := WisiToken.To_Vector ((1 => (130, 
2)));
             Add_Action (Table.States (302), (3, 39, 40, 41, 76, 103, 104, 105, 
106), (130, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (302).Minimal_Complete_Actions, 
(1 => (Reduce, 130, 1)));
+            Table.States (302).Minimal_Complete_Action := (Reduce, 130, 1);
             Table.States (303).Productions := WisiToken.To_Vector ((1 => (130, 
1)));
             Add_Action (Table.States (303), (3, 39, 40, 41, 76, 103, 104, 105, 
106), (130, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (303).Minimal_Complete_Actions, 
(1 => (Reduce, 130, 1)));
+            Table.States (303).Minimal_Complete_Action := (Reduce, 130, 1);
             Table.States (304).Productions := WisiToken.To_Vector ((1 => (130, 
0)));
             Add_Action (Table.States (304), (3, 39, 40, 41, 76, 103, 104, 105, 
106), (130, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (304).Minimal_Complete_Actions, 
(1 => (Reduce, 130, 1)));
+            Table.States (304).Minimal_Complete_Action := (Reduce, 130, 1);
             Table.States (305).Productions := WisiToken.To_Vector ((1 => (321, 
0)));
             Add_Action (Table.States (305), 3, 121);
             Add_Action (Table.States (305), 39, 122);
@@ -3763,7 +3732,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (305), 272, 92);
             Add_Goto (Table.States (305), 293, 97);
             Add_Goto (Table.States (305), 320, 471);
-            Set_Minimal_Action (Table.States (305).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (305).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (306).Productions := WisiToken.To_Vector (((301, 0), 
(321, 0)));
             Add_Action (Table.States (306), 10, Reduce, (301, 0), 2, null, 
null);
             Add_Action (Table.States (306), 20, Reduce, (301, 0), 2, null, 
null);
@@ -3798,16 +3767,16 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (306), 98, Reduce, (301, 0), 2, null, 
null);
             Add_Error (Table.States (306));
             Add_Goto (Table.States (306), 130, 305);
-            Set_Minimal_Action (Table.States (306).Minimal_Complete_Actions, 
(1 => (Reduce, 301, 2)));
+            Table.States (306).Minimal_Complete_Action := (Reduce, 301, 2);
             Table.States (307).Productions := WisiToken.To_Vector ((1 => (161, 
0)));
             Add_Action (Table.States (307), 96, 472);
             Add_Error (Table.States (307));
-            Set_Minimal_Action (Table.States (307).Minimal_Complete_Actions, 
(1 => (Shift, 96, 472)));
+            Table.States (307).Minimal_Complete_Action := (Shift, 96, 472);
             Table.States (308).Productions := WisiToken.To_Vector ((1 => (161, 
1)));
             Add_Action (Table.States (308), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (161, 1), 3, delay_statement_1'Access, null);
-            Set_Minimal_Action (Table.States (308).Minimal_Complete_Actions, 
(1 => (Reduce, 161, 3)));
+            Table.States (308).Minimal_Complete_Action := (Reduce, 161, 3);
             Table.States (309).Productions := WisiToken.To_Vector ((1 => (190, 
0)));
             Add_Action (Table.States (309), 3, 121);
             Add_Action (Table.States (309), 39, 122);
@@ -3843,12 +3812,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (309), 320, 144);
             Add_Goto (Table.States (309), 321, 145);
             Add_Goto (Table.States (309), 330, 146);
-            Set_Minimal_Action (Table.States (309).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (309).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (310).Productions := WisiToken.To_Vector ((1 => (190, 
1)));
             Add_Action (Table.States (310), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (190, 1), 3, exit_statement_1'Access, null);
-            Set_Minimal_Action (Table.States (310).Minimal_Complete_Actions, 
(1 => (Reduce, 190, 3)));
+            Table.States (310).Minimal_Complete_Action := (Reduce, 190, 3);
             Table.States (311).Productions := WisiToken.To_Vector (((230, 2), 
(230, 5)));
             Add_Action (Table.States (311), 3, 121);
             Add_Action (Table.States (311), 39, 122);
@@ -3877,7 +3846,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (311), 320, 144);
             Add_Goto (Table.States (311), 321, 145);
             Add_Goto (Table.States (311), 330, 146);
-            Set_Minimal_Action (Table.States (311).Minimal_Complete_Actions, 
((Shift, 59, 475), (Shift, 105, 33)));
+            Table.States (311).Minimal_Complete_Action := (Shift, 40, 474);
             Table.States (312).Productions := WisiToken.To_Vector (((230, 3), 
(230, 4)));
             Add_Action (Table.States (312), 59, 481);
             Add_Action (Table.States (312), 104, 119);
@@ -3888,7 +3857,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (312), 239, 482);
             Add_Goto (Table.States (312), 272, 92);
             Add_Goto (Table.States (312), 293, 97);
-            Set_Minimal_Action (Table.States (312).Minimal_Complete_Actions, 
((Shift, 59, 481), (Shift, 105, 33)));
+            Table.States (312).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (313).Productions := WisiToken.To_Vector (((230, 0), 
(230, 1)));
             Add_Action (Table.States (313), 40, 483);
             Add_Action (Table.States (313), 104, 119);
@@ -3900,7 +3869,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (313), 272, 92);
             Add_Goto (Table.States (313), 293, 97);
             Add_Goto (Table.States (313), 314, 485);
-            Set_Minimal_Action (Table.States (313).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (313).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (314).Productions := WisiToken.To_Vector ((1 => (121, 
0)));
             Add_Action (Table.States (314), 3, 121);
             Add_Action (Table.States (314), 39, 122);
@@ -3936,17 +3905,17 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (314), 320, 144);
             Add_Goto (Table.States (314), 321, 145);
             Add_Goto (Table.States (314), 330, 146);
-            Set_Minimal_Action (Table.States (314).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (314).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (315).Productions := WisiToken.To_Vector ((1 => (127, 
0)));
             Add_Action (Table.States (315), 12, 487);
             Add_Error (Table.States (315));
-            Set_Minimal_Action (Table.States (315).Minimal_Complete_Actions, 
(1 => (Shift, 12, 487)));
+            Table.States (315).Minimal_Complete_Action := (Shift, 12, 487);
             Table.States (316).Productions := WisiToken.To_Vector (((182, 0), 
(281, 0)));
             Add_Action (Table.States (316), 54, 488);
             Add_Action (Table.States (316), 76, 126);
             Add_Error (Table.States (316));
             Add_Goto (Table.States (316), 117, 489);
-            Set_Minimal_Action (Table.States (316).Minimal_Complete_Actions, 
((Shift, 54, 488), (Shift, 76, 126)));
+            Table.States (316).Minimal_Complete_Action := (Shift, 76, 126);
             Table.States (317).Productions := WisiToken.To_Vector (((291, 0), 
(291, 1)));
             Add_Action (Table.States (317), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (317), 21, Reduce, (241, 1), 0, null, 
null);
@@ -3963,7 +3932,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (317));
             Add_Goto (Table.States (317), 114, 490);
             Add_Goto (Table.States (317), 241, 491);
-            Set_Minimal_Action (Table.States (317).Minimal_Complete_Actions, 
(1 => (Reduce, 241, 0)));
+            Table.States (317).Minimal_Complete_Action := (Reduce, 241, 0);
             Table.States (318).Productions := WisiToken.To_Vector (((115, 0), 
(115, 1), (199, 0), (239, 0)));
             Add_Action (Table.States (318), 3, 121);
             Add_Action (Table.States (318), 15, 258);
@@ -4019,20 +3988,19 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (318), 320, 144);
             Add_Goto (Table.States (318), 321, 145);
             Add_Goto (Table.States (318), 330, 146);
-            Set_Minimal_Action (Table.States (318).Minimal_Complete_Actions, 
((Shift, 32, 260), (Shift, 105, 33),
-            (Reduce, 125, 0), (Reduce, 255, 0)));
+            Table.States (318).Minimal_Complete_Action := (Reduce, 125, 0);
             Table.States (319).Productions := WisiToken.To_Vector ((1 => (252, 
0)));
             Add_Action (Table.States (319), 58, 317);
             Add_Error (Table.States (319));
             Add_Goto (Table.States (319), 291, 496);
-            Set_Minimal_Action (Table.States (319).Minimal_Complete_Actions, 
(1 => (Shift, 58, 317)));
+            Table.States (319).Minimal_Complete_Action := (Shift, 58, 317);
             Table.States (320).Productions := WisiToken.To_Vector ((1 => (207, 
0)));
             Add_Action (Table.States (320), (35, 56, 74, 96), (207, 0), 3, 
function_specification_0'Access,
             function_specification_0_check'Access);
-            Set_Minimal_Action (Table.States (320).Minimal_Complete_Actions, 
(1 => (Reduce, 207, 3)));
+            Table.States (320).Minimal_Complete_Action := (Reduce, 207, 3);
             Table.States (321).Productions := WisiToken.To_Vector ((1 => (252, 
1)));
             Add_Action (Table.States (321), (21, 35, 56, 74, 77, 82, 96), 
(252, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (321).Minimal_Complete_Actions, 
(1 => (Reduce, 252, 1)));
+            Table.States (321).Minimal_Complete_Action := (Reduce, 252, 1);
             Table.States (322).Productions := WisiToken.To_Vector (((128, 0), 
(215, 2), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (322), 56, 497);
@@ -4043,8 +4011,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (322));
             Add_Goto (Table.States (322), 115, 241);
             Add_Goto (Table.States (322), 322, 242);
-            Set_Minimal_Action (Table.States (322).Minimal_Complete_Actions, 
((Shift, 56, 497), (Shift, 84, 237),
-            (Shift, 102, 240)));
+            Table.States (322).Minimal_Complete_Action := (Shift, 56, 497);
             Table.States (323).Productions := WisiToken.To_Vector (((128, 0), 
(215, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (323), 56, 498);
@@ -4055,8 +4022,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (323));
             Add_Goto (Table.States (323), 115, 241);
             Add_Goto (Table.States (323), 322, 242);
-            Set_Minimal_Action (Table.States (323).Minimal_Complete_Actions, 
((Shift, 56, 498), (Shift, 84, 237),
-            (Shift, 102, 240)));
+            Table.States (323).Minimal_Complete_Action := (Shift, 56, 498);
             Table.States (324).Productions := WisiToken.To_Vector (((128, 0), 
(215, 1), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (324), 56, 499);
@@ -4067,8 +4033,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (324));
             Add_Goto (Table.States (324), 115, 241);
             Add_Goto (Table.States (324), 322, 242);
-            Set_Minimal_Action (Table.States (324).Minimal_Complete_Actions, 
((Shift, 56, 499), (Shift, 84, 237),
-            (Shift, 102, 240)));
+            Table.States (324).Minimal_Complete_Action := (Shift, 56, 499);
             Table.States (325).Productions := WisiToken.To_Vector (((201, 0), 
(201, 1), (201, 2)));
             Add_Action (Table.States (325), 35, Reduce, (169, 2), 0, null, 
null);
             Add_Action (Table.States (325), 74, Reduce, (169, 2), 0, null, 
null);
@@ -4076,7 +4041,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (325), 96, Reduce, (169, 2), 0, null, 
null);
             Add_Error (Table.States (325));
             Add_Goto (Table.States (325), 169, 500);
-            Set_Minimal_Action (Table.States (325).Minimal_Complete_Actions, 
(1 => (Reduce, 169, 0)));
+            Table.States (325).Minimal_Complete_Action := (Reduce, 169, 0);
             Table.States (326).Productions := WisiToken.To_Vector ((1 => (204, 
0)));
             Add_Action (Table.States (326), 104, 119);
             Add_Action (Table.States (326), 105, 33);
@@ -4086,17 +4051,17 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (326), 239, 501);
             Add_Goto (Table.States (326), 272, 92);
             Add_Goto (Table.States (326), 293, 97);
-            Set_Minimal_Action (Table.States (326).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (326).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (327).Productions := WisiToken.To_Vector (((200, 0), 
(200, 1), (200, 2), (200, 3)));
             Add_Action (Table.States (327), 35, 502);
             Add_Action (Table.States (327), 74, 337);
             Add_Action (Table.States (327), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (327));
             Add_Goto (Table.States (327), 122, 503);
-            Set_Minimal_Action (Table.States (327).Minimal_Complete_Actions, 
((Shift, 35, 502), (Reduce, 122, 0)));
+            Table.States (327).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (328).Productions := WisiToken.To_Vector ((1 => (211, 
0)));
             Add_Action (Table.States (328), (29, 47, 48, 50, 69, 71, 74, 104), 
(211, 0), 2, null, null);
-            Set_Minimal_Action (Table.States (328).Minimal_Complete_Actions, 
(1 => (Reduce, 211, 2)));
+            Table.States (328).Minimal_Complete_Action := (Reduce, 211, 2);
             Table.States (329).Productions := WisiToken.To_Vector (((198, 0), 
(198, 1), (198, 2), (198, 3)));
             Add_Action (Table.States (329), 7, Reduce, (236, 3), 0, null, 
null);
             Add_Action (Table.States (329), 33, 504);
@@ -4110,12 +4075,12 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (329), 106, Reduce, (236, 3), 0, null, 
null);
             Add_Error (Table.States (329));
             Add_Goto (Table.States (329), 236, 506);
-            Set_Minimal_Action (Table.States (329).Minimal_Complete_Actions, 
(1 => (Reduce, 236, 0)));
+            Table.States (329).Minimal_Complete_Action := (Reduce, 236, 0);
             Table.States (330).Productions := WisiToken.To_Vector ((1 => (303, 
3)));
             Add_Action (Table.States (330), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (303, 3), 3, simple_statement_3'Access, null);
-            Set_Minimal_Action (Table.States (330).Minimal_Complete_Actions, 
(1 => (Reduce, 303, 3)));
+            Table.States (330).Minimal_Complete_Action := (Reduce, 303, 3);
             Table.States (331).Productions := WisiToken.To_Vector (((222, 0), 
(222, 1), (222, 2), (222, 3)));
             Add_Action (Table.States (331), 4, 1);
             Add_Action (Table.States (331), 5, 2);
@@ -4174,7 +4139,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (331), 303, 101);
             Add_Goto (Table.States (331), 306, 363);
             Add_Goto (Table.States (331), 323, 114);
-            Set_Minimal_Action (Table.States (331).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (331).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (332).Productions := WisiToken.To_Vector ((1 => (332, 
0)));
             Add_Action (Table.States (332), 104, 119);
             Add_Action (Table.States (332), 105, 33);
@@ -4185,12 +4150,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (332), 239, 219);
             Add_Goto (Table.States (332), 272, 92);
             Add_Goto (Table.States (332), 293, 97);
-            Set_Minimal_Action (Table.States (332).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (332).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (333).Productions := WisiToken.To_Vector (((238, 0), 
(332, 1)));
             Add_Action (Table.States (333), 83, 381);
             Add_Action (Table.States (333), 96, 509);
             Add_Error (Table.States (333));
-            Set_Minimal_Action (Table.States (333).Minimal_Complete_Actions, 
(1 => (Shift, 96, 509)));
+            Table.States (333).Minimal_Complete_Action := (Shift, 96, 509);
             Table.States (334).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (247, 0), (247, 1),
             (248, 0), (272, 0), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (334), 35, 510, (122, 1), 0, null, null);
@@ -4203,12 +4168,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (334), 115, 241);
             Add_Goto (Table.States (334), 122, 511);
             Add_Goto (Table.States (334), 322, 242);
-            Set_Minimal_Action (Table.States (334).Minimal_Complete_Actions, 
((Shift, 35, 510), (Shift, 84, 237),
-            (Shift, 102, 240), (Reduce, 122, 0)));
+            Table.States (334).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (335).Productions := WisiToken.To_Vector ((1 => (213, 
0)));
             Add_Action (Table.States (335), 39, 512);
             Add_Error (Table.States (335));
-            Set_Minimal_Action (Table.States (335).Minimal_Complete_Actions, 
(1 => (Shift, 39, 512)));
+            Table.States (335).Minimal_Complete_Action := (Shift, 39, 512);
             Table.States (336).Productions := WisiToken.To_Vector ((1 => (250, 
0)));
             Add_Action (Table.States (336), 104, 119);
             Add_Action (Table.States (336), 105, 33);
@@ -4218,7 +4182,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (336), 239, 513);
             Add_Goto (Table.States (336), 272, 92);
             Add_Goto (Table.States (336), 293, 97);
-            Set_Minimal_Action (Table.States (336).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (336).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (337).Productions := WisiToken.To_Vector ((1 => (122, 
0)));
             Add_Action (Table.States (337), 3, 121);
             Add_Action (Table.States (337), 35, Reduce, (124, 5), 0, null, 
null);
@@ -4263,11 +4227,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (337), 320, 144);
             Add_Goto (Table.States (337), 321, 145);
             Add_Goto (Table.States (337), 330, 146);
-            Set_Minimal_Action (Table.States (337).Minimal_Complete_Actions, 
(1 => (Reduce, 125, 0)));
+            Table.States (337).Minimal_Complete_Action := (Reduce, 125, 0);
             Table.States (338).Productions := WisiToken.To_Vector (((251, 0), 
(251, 1)));
             Add_Action (Table.States (338), 35, 515);
             Add_Error (Table.States (338));
-            Set_Minimal_Action (Table.States (338).Minimal_Complete_Actions, 
(1 => (Shift, 35, 515)));
+            Table.States (338).Minimal_Complete_Action := (Shift, 35, 515);
             Table.States (339).Productions := WisiToken.To_Vector (((257, 0), 
(257, 1)));
             Add_Action (Table.States (339), 3, 121);
             Add_Action (Table.States (339), 15, 258);
@@ -4318,7 +4282,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (339), 320, 144);
             Add_Goto (Table.States (339), 321, 145);
             Add_Goto (Table.States (339), 330, 146);
-            Set_Minimal_Action (Table.States (339).Minimal_Complete_Actions, 
((Shift, 32, 260), (Reduce, 125, 0)));
+            Table.States (339).Minimal_Complete_Action := (Reduce, 125, 0);
          end Subr_6;
          procedure Subr_7
          is begin
@@ -4326,7 +4290,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (340), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (257, 2), 3, pragma_g_2'Access, null);
-            Set_Minimal_Action (Table.States (340).Minimal_Complete_Actions, 
(1 => (Reduce, 257, 3)));
+            Table.States (340).Minimal_Complete_Action := (Reduce, 257, 3);
             Table.States (341).Productions := WisiToken.To_Vector (((163, 0), 
(239, 5)));
             Add_Action (Table.States (341), 71, Reduce, (163, 0), 1, null, 
null, (239, 5), 1, name_5'Access,
             name_5_check'Access);
@@ -4335,12 +4299,12 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (341), 101, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (341), 102, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Error (Table.States (341));
-            Set_Minimal_Action (Table.States (341).Minimal_Complete_Actions, 
((Reduce, 163, 1), (Reduce, 239, 1)));
+            Table.States (341).Minimal_Complete_Action := (Reduce, 163, 1);
             Table.States (342).Productions := WisiToken.To_Vector (((238, 0), 
(332, 2)));
             Add_Action (Table.States (342), 83, 381);
             Add_Action (Table.States (342), 96, 518);
             Add_Error (Table.States (342));
-            Set_Minimal_Action (Table.States (342).Minimal_Complete_Actions, 
(1 => (Shift, 96, 518)));
+            Table.States (342).Minimal_Complete_Action := (Shift, 96, 518);
             Table.States (343).Productions := WisiToken.To_Vector (((245, 0), 
(245, 1), (245, 2)));
             Add_Action (Table.States (343), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (343), 26, 385);
@@ -4351,31 +4315,31 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (343));
             Add_Goto (Table.States (343), 114, 387);
             Add_Goto (Table.States (343), 241, 388);
-            Set_Minimal_Action (Table.States (343).Minimal_Complete_Actions, 
((Shift, 26, 385), (Reduce, 241, 0)));
+            Table.States (343).Minimal_Complete_Action := (Reduce, 241, 0);
             Table.States (344).Productions := WisiToken.To_Vector ((1 => (253, 
0)));
             Add_Action (Table.States (344), (21, 35, 56, 72, 74, 77, 82, 96), 
(253, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (344).Minimal_Complete_Actions, 
(1 => (Reduce, 253, 1)));
+            Table.States (344).Minimal_Complete_Action := (Reduce, 253, 1);
             Table.States (345).Productions := WisiToken.To_Vector ((1 => (262, 
0)));
             Add_Action (Table.States (345), (35, 56, 74, 96), (262, 0), 3, 
procedure_specification_0'Access,
             procedure_specification_0_check'Access);
-            Set_Minimal_Action (Table.States (345).Minimal_Complete_Actions, 
(1 => (Reduce, 262, 3)));
+            Table.States (345).Minimal_Complete_Action := (Reduce, 262, 3);
             Table.States (346).Productions := WisiToken.To_Vector (((264, 0), 
(265, 0)));
             Add_Action (Table.States (346), 35, 519, (122, 1), 0, null, null);
             Add_Action (Table.States (346), 74, 337);
             Add_Error (Table.States (346));
             Add_Goto (Table.States (346), 122, 520);
-            Set_Minimal_Action (Table.States (346).Minimal_Complete_Actions, 
((Shift, 35, 519), (Reduce, 122, 0)));
+            Table.States (346).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (347).Productions := WisiToken.To_Vector (((271, 0), 
(271, 1)));
             Add_Action (Table.States (347), 35, Reduce, (169, 2), 0, null, 
null);
             Add_Action (Table.States (347), 74, Reduce, (169, 2), 0, null, 
null);
             Add_Action (Table.States (347), 76, 377);
             Add_Error (Table.States (347));
             Add_Goto (Table.States (347), 169, 521);
-            Set_Minimal_Action (Table.States (347).Minimal_Complete_Actions, 
(1 => (Reduce, 169, 0)));
+            Table.States (347).Minimal_Complete_Action := (Reduce, 169, 0);
             Table.States (348).Productions := WisiToken.To_Vector (((304, 0), 
(304, 1)));
             Add_Action (Table.States (348), 35, 522);
             Add_Error (Table.States (348));
-            Set_Minimal_Action (Table.States (348).Minimal_Complete_Actions, 
(1 => (Shift, 35, 522)));
+            Table.States (348).Minimal_Complete_Action := (Shift, 35, 522);
             Table.States (349).Productions := WisiToken.To_Vector ((1 => (276, 
0)));
             Add_Action (Table.States (349), 3, 121);
             Add_Action (Table.States (349), 39, 122);
@@ -4411,21 +4375,21 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (349), 320, 144);
             Add_Goto (Table.States (349), 321, 145);
             Add_Goto (Table.States (349), 330, 146);
-            Set_Minimal_Action (Table.States (349).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (349).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (350).Productions := WisiToken.To_Vector ((1 => (276, 
1)));
             Add_Action (Table.States (350), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (276, 1), 3, raise_statement_1'Access, null);
-            Set_Minimal_Action (Table.States (350).Minimal_Complete_Actions, 
(1 => (Reduce, 276, 3)));
+            Table.States (350).Minimal_Complete_Action := (Reduce, 276, 3);
             Table.States (351).Productions := WisiToken.To_Vector ((1 => (290, 
0)));
             Add_Action (Table.States (351), 5, 524);
             Add_Error (Table.States (351));
-            Set_Minimal_Action (Table.States (351).Minimal_Complete_Actions, 
(1 => (Shift, 5, 524)));
+            Table.States (351).Minimal_Complete_Action := (Shift, 5, 524);
             Table.States (352).Productions := WisiToken.To_Vector ((1 => (290, 
1)));
             Add_Action (Table.States (352), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (290, 1), 3, requeue_statement_1'Access, null);
-            Set_Minimal_Action (Table.States (352).Minimal_Complete_Actions, 
(1 => (Reduce, 290, 3)));
+            Table.States (352).Minimal_Complete_Action := (Reduce, 290, 3);
             Table.States (353).Productions := WisiToken.To_Vector (((194, 0), 
(194, 1)));
             Add_Action (Table.States (353), 7, Reduce, (118, 1), 0, null, 
null);
             Add_Action (Table.States (353), 8, 401);
@@ -4439,17 +4403,17 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (353), 106, Reduce, (118, 1), 0, null, 
null);
             Add_Error (Table.States (353));
             Add_Goto (Table.States (353), 118, 525);
-            Set_Minimal_Action (Table.States (353).Minimal_Complete_Actions, 
(1 => (Reduce, 118, 0)));
+            Table.States (353).Minimal_Complete_Action := (Reduce, 118, 0);
             Table.States (354).Productions := WisiToken.To_Vector ((1 => (302, 
0)));
             Add_Action (Table.States (354), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (302, 0), 3, simple_return_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (354).Minimal_Complete_Actions, 
(1 => (Reduce, 302, 3)));
+            Table.States (354).Minimal_Complete_Action := (Reduce, 302, 3);
             Table.States (355).Productions := WisiToken.To_Vector ((1 => (196, 
1)));
             Add_Action (Table.States (355), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (196, 1), 3, extended_return_statement_1'Access, null);
-            Set_Minimal_Action (Table.States (355).Minimal_Complete_Actions, 
(1 => (Reduce, 196, 3)));
+            Table.States (355).Minimal_Complete_Action := (Reduce, 196, 3);
             Table.States (356).Productions := WisiToken.To_Vector ((1 => (196, 
0)));
             Add_Action (Table.States (356), 4, 1);
             Add_Action (Table.States (356), 5, 2);
@@ -4508,7 +4472,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (356), 303, 101);
             Add_Goto (Table.States (356), 306, 363);
             Add_Goto (Table.States (356), 323, 114);
-            Set_Minimal_Action (Table.States (356).Minimal_Complete_Actions, 
(1 => (Reduce, 218, 0)));
+            Table.States (356).Minimal_Complete_Action := (Reduce, 218, 0);
             Table.States (357).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (272, 0), (293, 0),
             (293, 1), (293, 2), (293, 3), (315, 0)));
             Add_Action (Table.States (357), 76, 235);
@@ -4519,15 +4483,14 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (357));
             Add_Goto (Table.States (357), 115, 241);
             Add_Goto (Table.States (357), 322, 242);
-            Set_Minimal_Action (Table.States (357).Minimal_Complete_Actions, 
((Shift, 77, 527), (Shift, 84, 237),
-            (Shift, 102, 240)));
+            Table.States (357).Minimal_Complete_Action := (Shift, 77, 527);
             Table.States (358).Productions := WisiToken.To_Vector ((1 => (295, 
4)));
             Add_Action (Table.States (358), (22, 24, 43), (295, 4), 2, 
select_alternative_4'Access, null);
-            Set_Minimal_Action (Table.States (358).Minimal_Complete_Actions, 
(1 => (Reduce, 295, 2)));
+            Table.States (358).Minimal_Complete_Action := (Reduce, 295, 2);
             Table.States (359).Productions := WisiToken.To_Vector (((295, 0), 
(295, 1), (295, 2)));
             Add_Action (Table.States (359), 87, 528);
             Add_Error (Table.States (359));
-            Set_Minimal_Action (Table.States (359).Minimal_Complete_Actions, 
(1 => (Shift, 87, 528)));
+            Table.States (359).Minimal_Complete_Action := (Shift, 87, 528);
             Table.States (360).Productions := WisiToken.To_Vector (((131, 0), 
(239, 5)));
             Add_Action (Table.States (360), 76, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (360), 81, 529);
@@ -4537,7 +4500,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (360), 101, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (360), 102, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Error (Table.States (360));
-            Set_Minimal_Action (Table.States (360).Minimal_Complete_Actions, 
((Shift, 81, 529), (Reduce, 239, 1)));
+            Table.States (360).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (361).Productions := WisiToken.To_Vector (((299, 0), 
(300, 0)));
             Add_Action (Table.States (361), 4, 1);
             Add_Action (Table.States (361), 5, 2);
@@ -4598,21 +4561,21 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (361), 303, 101);
             Add_Goto (Table.States (361), 306, 530);
             Add_Goto (Table.States (361), 323, 114);
-            Set_Minimal_Action (Table.States (361).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 1)));
+            Table.States (361).Minimal_Complete_Action := (Reduce, 300, 1);
             Table.States (362).Productions := WisiToken.To_Vector ((1 => (295, 
3)));
             Add_Action (Table.States (362), (22, 24, 43), (295, 3), 2, null, 
null);
-            Set_Minimal_Action (Table.States (362).Minimal_Complete_Actions, 
(1 => (Reduce, 295, 2)));
+            Table.States (362).Minimal_Complete_Action := (Reduce, 295, 2);
             Table.States (363).Productions := WisiToken.To_Vector ((1 => (299, 
1)));
             Add_Action (Table.States (363), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
26, 27, 28, 31, 32, 37, 41, 43, 48, 52,
             57, 58, 61, 68, 72, 73, 93, 104, 105, 106), (299, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (363).Minimal_Complete_Actions, 
(1 => (Reduce, 299, 1)));
+            Table.States (363).Minimal_Complete_Action := (Reduce, 299, 1);
             Table.States (364).Productions := WisiToken.To_Vector (((160, 0), 
(324, 2)));
             Add_Action (Table.States (364), 22, Reduce, (160, 0), 2, null, 
null);
             Add_Action (Table.States (364), 24, Reduce, (160, 0), 2, null, 
null);
             Add_Action (Table.States (364), 43, Reduce, (160, 0), 2, null, 
null);
             Add_Action (Table.States (364), 68, Reduce, (324, 2), 2, null, 
null);
             Add_Error (Table.States (364));
-            Set_Minimal_Action (Table.States (364).Minimal_Complete_Actions, 
((Reduce, 160, 2), (Reduce, 324, 2)));
+            Table.States (364).Minimal_Complete_Action := (Reduce, 160, 2);
             Table.States (365).Productions := WisiToken.To_Vector ((1 => (152, 
0)));
             Add_Action (Table.States (365), 4, 1);
             Add_Action (Table.States (365), 5, 2);
@@ -4669,25 +4632,25 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (365), 303, 101);
             Add_Goto (Table.States (365), 306, 363);
             Add_Goto (Table.States (365), 323, 114);
-            Set_Minimal_Action (Table.States (365).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (365).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (366).Productions := WisiToken.To_Vector ((1 => (323, 
0)));
             Add_Action (Table.States (366), 18, 4);
             Add_Error (Table.States (366));
             Add_Goto (Table.States (366), 160, 532);
             Add_Goto (Table.States (366), 161, 533);
-            Set_Minimal_Action (Table.States (366).Minimal_Complete_Actions, 
(1 => (Shift, 18, 4)));
+            Table.States (366).Minimal_Complete_Action := (Shift, 18, 4);
             Table.States (367).Productions := WisiToken.To_Vector (((178, 1), 
(324, 1)));
             Add_Action (Table.States (367), 22, Reduce, (178, 1), 2, null, 
null);
             Add_Action (Table.States (367), 43, Reduce, (178, 1), 2, null, 
null);
             Add_Action (Table.States (367), 68, Reduce, (324, 1), 2, null, 
null);
             Add_Error (Table.States (367));
-            Set_Minimal_Action (Table.States (367).Minimal_Complete_Actions, 
((Reduce, 178, 2), (Reduce, 324, 2)));
+            Table.States (367).Minimal_Complete_Action := (Reduce, 178, 2);
             Table.States (368).Productions := WisiToken.To_Vector (((178, 0), 
(324, 0)));
             Add_Action (Table.States (368), 22, Reduce, (178, 0), 2, null, 
null);
             Add_Action (Table.States (368), 43, Reduce, (178, 0), 2, null, 
null);
             Add_Action (Table.States (368), 68, Reduce, (324, 0), 2, null, 
null);
             Add_Error (Table.States (368));
-            Set_Minimal_Action (Table.States (368).Minimal_Complete_Actions, 
((Reduce, 178, 2), (Reduce, 324, 2)));
+            Table.States (368).Minimal_Complete_Action := (Reduce, 178, 2);
             Table.States (369).Productions := WisiToken.To_Vector ((1 => (296, 
0)));
             Add_Action (Table.States (369), 4, 1);
             Add_Action (Table.States (369), 18, 4);
@@ -4698,7 +4661,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (369), 160, 202);
             Add_Goto (Table.States (369), 161, 533);
             Add_Goto (Table.States (369), 295, 534);
-            Set_Minimal_Action (Table.States (369).Minimal_Complete_Actions, 
(1 => (Shift, 67, 199)));
+            Table.States (369).Minimal_Complete_Action := (Shift, 67, 199);
             Table.States (370).Productions := WisiToken.To_Vector ((1 => (294, 
0)));
             Add_Action (Table.States (370), 4, 1);
             Add_Action (Table.States (370), 5, 2);
@@ -4755,15 +4718,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (370), 303, 101);
             Add_Goto (Table.States (370), 306, 363);
             Add_Goto (Table.States (370), 323, 114);
-            Set_Minimal_Action (Table.States (370).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (370).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (371).Productions := WisiToken.To_Vector ((1 => (294, 
1)));
             Add_Action (Table.States (371), 61, 536);
             Add_Error (Table.States (371));
-            Set_Minimal_Action (Table.States (371).Minimal_Complete_Actions, 
(1 => (Shift, 61, 536)));
+            Table.States (371).Minimal_Complete_Action := (Shift, 61, 536);
             Table.States (372).Productions := WisiToken.To_Vector ((1 => (126, 
0)));
             Add_Action (Table.States (372), 5, 537);
             Add_Error (Table.States (372));
-            Set_Minimal_Action (Table.States (372).Minimal_Complete_Actions, 
(1 => (Shift, 5, 537)));
+            Table.States (372).Minimal_Complete_Action := (Shift, 5, 537);
             Table.States (373).Productions := WisiToken.To_Vector ((1 => (313, 
0)));
             Add_Action (Table.States (373), 40, 483);
             Add_Action (Table.States (373), 104, 119);
@@ -4775,13 +4738,13 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (373), 272, 92);
             Add_Goto (Table.States (373), 293, 97);
             Add_Goto (Table.States (373), 314, 538);
-            Set_Minimal_Action (Table.States (373).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (373).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (374).Productions := WisiToken.To_Vector (((316, 0), 
(317, 0)));
             Add_Action (Table.States (374), 35, 539, (122, 1), 0, null, null);
             Add_Action (Table.States (374), 74, 337);
             Add_Error (Table.States (374));
             Add_Goto (Table.States (374), 122, 540);
-            Set_Minimal_Action (Table.States (374).Minimal_Complete_Actions, 
((Shift, 35, 539), (Reduce, 122, 0)));
+            Table.States (374).Minimal_Complete_Action := (Shift, 35, 539);
             Table.States (375).Productions := WisiToken.To_Vector (((319, 0), 
(319, 1), (319, 2)));
             Add_Action (Table.States (375), 35, Reduce, (169, 2), 0, null, 
null);
             Add_Action (Table.States (375), 74, Reduce, (169, 2), 0, null, 
null);
@@ -4789,12 +4752,12 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (375), 96, Reduce, (169, 2), 0, null, 
null);
             Add_Error (Table.States (375));
             Add_Goto (Table.States (375), 169, 541);
-            Set_Minimal_Action (Table.States (375).Minimal_Complete_Actions, 
(1 => (Reduce, 169, 0)));
+            Table.States (375).Minimal_Complete_Action := (Reduce, 169, 0);
             Table.States (376).Productions := WisiToken.To_Vector (((305, 0), 
(305, 1), (305, 2)));
             Add_Action (Table.States (376), 35, 542);
             Add_Action (Table.States (376), 96, 543);
             Add_Error (Table.States (376));
-            Set_Minimal_Action (Table.States (376).Minimal_Complete_Actions, 
((Shift, 35, 542), (Shift, 96, 543)));
+            Table.States (376).Minimal_Complete_Action := (Shift, 96, 543);
             Table.States (377).Productions := WisiToken.To_Vector (((169, 0), 
(169, 1)));
             Add_Action (Table.States (377), 77, Reduce, (170, 4), 0, null, 
null);
             Add_Action (Table.States (377), 80, 544);
@@ -4804,12 +4767,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (377), 170, 545);
             Add_Goto (Table.States (377), 171, 546);
             Add_Goto (Table.States (377), 219, 547);
-            Set_Minimal_Action (Table.States (377).Minimal_Complete_Actions, 
((Shift, 80, 544), (Reduce, 171, 0)));
+            Table.States (377).Minimal_Complete_Action := (Reduce, 171, 0);
             Table.States (378).Productions := WisiToken.To_Vector (((206, 0), 
(223, 0), (223, 1), (259, 0), (260, 0)));
             Add_Action (Table.States (378), 35, 548);
             Add_Action (Table.States (378), 96, 549);
             Add_Error (Table.States (378));
-            Set_Minimal_Action (Table.States (378).Minimal_Complete_Actions, 
((Shift, 35, 548), (Shift, 96, 549)));
+            Table.States (378).Minimal_Complete_Action := (Shift, 96, 549);
             Table.States (379).Productions := WisiToken.To_Vector ((1 => (331, 
0)));
             Add_Action (Table.States (379), 104, 119);
             Add_Action (Table.States (379), 105, 33);
@@ -4820,12 +4783,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (379), 239, 219);
             Add_Goto (Table.States (379), 272, 92);
             Add_Goto (Table.States (379), 293, 97);
-            Set_Minimal_Action (Table.States (379).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (379).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (380).Productions := WisiToken.To_Vector (((238, 0), 
(331, 1)));
             Add_Action (Table.States (380), 83, 381);
             Add_Action (Table.States (380), 96, 551);
             Add_Error (Table.States (380));
-            Set_Minimal_Action (Table.States (380).Minimal_Complete_Actions, 
(1 => (Shift, 96, 551)));
+            Table.States (380).Minimal_Complete_Action := (Shift, 96, 551);
             Table.States (381).Productions := WisiToken.To_Vector ((1 => (238, 
0)));
             Add_Action (Table.States (381), 104, 119);
             Add_Action (Table.States (381), 105, 33);
@@ -4835,34 +4798,34 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (381), 239, 552);
             Add_Goto (Table.States (381), 272, 92);
             Add_Goto (Table.States (381), 293, 97);
-            Set_Minimal_Action (Table.States (381).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (381).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (382).Productions := WisiToken.To_Vector ((1 => (331, 
2)));
             Add_Action (Table.States (382), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (331, 2), 3,
             use_clause_2'Access, null);
-            Set_Minimal_Action (Table.States (382).Minimal_Complete_Actions, 
(1 => (Reduce, 331, 3)));
+            Table.States (382).Minimal_Complete_Action := (Reduce, 331, 3);
             Table.States (383).Productions := WisiToken.To_Vector ((1 => (332, 
3)));
             Add_Action (Table.States (383), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
             48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (332, 3), 3,
             with_clause_3'Access, null);
-            Set_Minimal_Action (Table.States (383).Minimal_Complete_Actions, 
(1 => (Reduce, 332, 3)));
+            Table.States (383).Minimal_Complete_Action := (Reduce, 332, 3);
             Table.States (384).Productions := WisiToken.To_Vector ((1 => (217, 
0)));
             Add_Action (Table.States (384), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (217, 0), 3, goto_label_0'Access, null);
-            Set_Minimal_Action (Table.States (384).Minimal_Complete_Actions, 
(1 => (Reduce, 217, 3)));
+            Table.States (384).Minimal_Complete_Action := (Reduce, 217, 3);
             Table.States (385).Productions := WisiToken.To_Vector ((1 => (245, 
2)));
             Add_Action (Table.States (385), 56, 553);
             Add_Error (Table.States (385));
-            Set_Minimal_Action (Table.States (385).Minimal_Complete_Actions, 
(1 => (Shift, 56, 553)));
+            Table.States (385).Minimal_Complete_Action := (Shift, 56, 553);
             Table.States (386).Productions := WisiToken.To_Vector ((1 => (241, 
0)));
             Add_Action (Table.States (386), 41, 554);
             Add_Error (Table.States (386));
-            Set_Minimal_Action (Table.States (386).Minimal_Complete_Actions, 
(1 => (Shift, 41, 554)));
+            Table.States (386).Minimal_Complete_Action := (Shift, 41, 554);
             Table.States (387).Productions := WisiToken.To_Vector ((1 => (245, 
1)));
             Add_Action (Table.States (387), 56, 555);
             Add_Error (Table.States (387));
-            Set_Minimal_Action (Table.States (387).Minimal_Complete_Actions, 
(1 => (Shift, 56, 555)));
+            Table.States (387).Minimal_Complete_Action := (Shift, 56, 555);
             Table.States (388).Productions := WisiToken.To_Vector (((114, 0), 
(114, 1), (114, 2), (245, 0)));
             Add_Action (Table.States (388), 7, 556);
             Add_Action (Table.States (388), 104, 119);
@@ -4873,20 +4836,20 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (388), 239, 557);
             Add_Goto (Table.States (388), 272, 92);
             Add_Goto (Table.States (388), 293, 97);
-            Set_Minimal_Action (Table.States (388).Minimal_Complete_Actions, 
((Shift, 7, 556), (Shift, 105, 33)));
+            Table.States (388).Minimal_Complete_Action := (Shift, 7, 556);
             Table.States (389).Productions := WisiToken.To_Vector ((1 => (133, 
1)));
             Add_Action (Table.States (389), 24, 558);
             Add_Error (Table.States (389));
-            Set_Minimal_Action (Table.States (389).Minimal_Complete_Actions, 
(1 => (Shift, 24, 558)));
+            Table.States (389).Minimal_Complete_Action := (Shift, 24, 558);
             Table.States (390).Productions := WisiToken.To_Vector (((218, 0), 
(218, 1)));
             Add_Action (Table.States (390), 24, Reduce, (218, 1), 1, null, 
null);
             Add_Action (Table.States (390), 26, 559);
             Add_Error (Table.States (390));
-            Set_Minimal_Action (Table.States (390).Minimal_Complete_Actions, 
(1 => (Reduce, 218, 1)));
+            Table.States (390).Minimal_Complete_Action := (Reduce, 218, 1);
             Table.States (391).Productions := WisiToken.To_Vector ((1 => (158, 
2)));
             Add_Action (Table.States (391), (13, 24, 25, 28, 29, 30, 40, 46, 
47, 48, 49, 50, 51, 63, 66, 69, 71, 104),
             (158, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (391).Minimal_Complete_Actions, 
(1 => (Reduce, 158, 1)));
+            Table.States (391).Minimal_Complete_Action := (Reduce, 158, 1);
             Table.States (392).Productions := WisiToken.To_Vector (((158, 0), 
(158, 1), (159, 0)));
             Add_Action (Table.States (392), 13, Reduce, (159, 0), 1, null, 
null);
             Add_Action (Table.States (392), 24, Reduce, (159, 0), 1, null, 
null);
@@ -4958,27 +4921,26 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (392), 319, 113);
             Add_Goto (Table.States (392), 325, 115);
             Add_Goto (Table.States (392), 331, 116);
-            Set_Minimal_Action (Table.States (392).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 1)));
+            Table.States (392).Minimal_Complete_Action := (Reduce, 159, 1);
             Table.States (393).Productions := WisiToken.To_Vector ((1 => (133, 
0)));
             Add_Action (Table.States (393), 13, 562);
             Add_Error (Table.States (393));
-            Set_Minimal_Action (Table.States (393).Minimal_Complete_Actions, 
(1 => (Shift, 13, 562)));
+            Table.States (393).Minimal_Complete_Action := (Shift, 13, 562);
             Table.States (394).Productions := WisiToken.To_Vector ((1 => (158, 
3)));
             Add_Action (Table.States (394), (13, 24, 25, 28, 29, 30, 40, 46, 
47, 48, 49, 50, 51, 63, 66, 69, 71, 104),
             (158, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (394).Minimal_Complete_Actions, 
(1 => (Reduce, 158, 1)));
+            Table.States (394).Minimal_Complete_Action := (Reduce, 158, 1);
             Table.States (395).Productions := WisiToken.To_Vector (((230, 0), 
(230, 1), (230, 2), (230, 3), (230, 4),
             (230, 5)));
             Add_Action (Table.States (395), 33, 311);
             Add_Action (Table.States (395), 42, 312);
             Add_Action (Table.States (395), 81, 313);
             Add_Error (Table.States (395));
-            Set_Minimal_Action (Table.States (395).Minimal_Complete_Actions, 
((Shift, 33, 311), (Shift, 42, 312),
-            (Shift, 81, 313)));
+            Table.States (395).Minimal_Complete_Action := (Shift, 42, 312);
             Table.States (396).Productions := WisiToken.To_Vector ((1 => (232, 
1)));
             Add_Action (Table.States (396), 24, 563);
             Add_Error (Table.States (396));
-            Set_Minimal_Action (Table.States (396).Minimal_Complete_Actions, 
(1 => (Shift, 24, 563)));
+            Table.States (396).Minimal_Complete_Action := (Shift, 24, 563);
             Table.States (397).Productions := WisiToken.To_Vector ((1 => (232, 
0)));
             Add_Action (Table.States (397), 4, 1);
             Add_Action (Table.States (397), 5, 2);
@@ -5035,7 +4997,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (397), 303, 101);
             Add_Goto (Table.States (397), 306, 363);
             Add_Goto (Table.States (397), 323, 114);
-            Set_Minimal_Action (Table.States (397).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (397).Minimal_Complete_Action := (Reduce, 300, 0);
          end Subr_7;
          procedure Subr_8
          is begin
@@ -5051,29 +5013,28 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (398), 115, 241);
             Add_Goto (Table.States (398), 122, 338);
             Add_Goto (Table.States (398), 322, 242);
-            Set_Minimal_Action (Table.States (398).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (398).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (399).Productions := WisiToken.To_Vector ((1 => (214, 
0)));
             Add_Action (Table.States (399), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (214, 0), 3,
             generic_package_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (399).Minimal_Complete_Actions, 
(1 => (Reduce, 214, 3)));
+            Table.States (399).Minimal_Complete_Action := (Reduce, 214, 3);
             Table.States (400).Productions := WisiToken.To_Vector ((1 => (216, 
0)));
             Add_Action (Table.States (400), 96, 565);
             Add_Error (Table.States (400));
-            Set_Minimal_Action (Table.States (400).Minimal_Complete_Actions, 
(1 => (Shift, 96, 565)));
+            Table.States (400).Minimal_Complete_Action := (Shift, 96, 565);
             Table.States (401).Productions := WisiToken.To_Vector ((1 => (118, 
0)));
             Add_Action (Table.States (401), (7, 11, 16, 21, 33, 40, 45, 74, 
77, 82, 96, 104, 105, 106), (118, 0), 1,
             null, null);
-            Set_Minimal_Action (Table.States (401).Minimal_Complete_Actions, 
(1 => (Reduce, 118, 1)));
+            Table.States (401).Minimal_Complete_Action := (Reduce, 118, 1);
             Table.States (402).Productions := WisiToken.To_Vector ((1 => (157, 
9)));
             Add_Action (Table.States (402), 82, 566);
             Add_Error (Table.States (402));
-            Set_Minimal_Action (Table.States (402).Minimal_Complete_Actions, 
(1 => (Shift, 82, 566)));
+            Table.States (402).Minimal_Complete_Action := (Shift, 82, 566);
             Table.States (403).Productions := WisiToken.To_Vector ((1 => (186, 
0)));
             Add_Action (Table.States (403), 96, 567);
             Add_Error (Table.States (403));
-            Set_Minimal_Action (Table.States (403).Minimal_Complete_Actions, 
(1 => (Shift, 96, 567)));
+            Table.States (403).Minimal_Complete_Action := (Shift, 96, 567);
             Table.States (404).Productions := WisiToken.To_Vector (((244, 0), 
(244, 1), (244, 2), (244, 3), (244, 4),
             (244, 5)));
             Add_Action (Table.States (404), 7, Reduce, (154, 1), 0, null, 
null);
@@ -5088,19 +5049,19 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (404), 106, Reduce, (154, 1), 0, null, 
null);
             Add_Error (Table.States (404));
             Add_Goto (Table.States (404), 154, 569);
-            Set_Minimal_Action (Table.States (404).Minimal_Complete_Actions, 
(1 => (Reduce, 154, 0)));
+            Table.States (404).Minimal_Complete_Action := (Reduce, 154, 0);
             Table.States (405).Productions := WisiToken.To_Vector ((1 => (219, 
0)));
             Add_Action (Table.States (405), (81, 83), (219, 0), 3, 
identifier_list_0'Access, null);
-            Set_Minimal_Action (Table.States (405).Minimal_Complete_Actions, 
(1 => (Reduce, 219, 3)));
+            Table.States (405).Minimal_Complete_Action := (Reduce, 219, 3);
             Table.States (406).Productions := WisiToken.To_Vector (((115, 0), 
(125, 0)));
             Add_Action (Table.States (406), 77, 570);
             Add_Action (Table.States (406), 83, 443);
             Add_Error (Table.States (406));
-            Set_Minimal_Action (Table.States (406).Minimal_Complete_Actions, 
(1 => (Shift, 77, 570)));
+            Table.States (406).Minimal_Complete_Action := (Shift, 77, 570);
             Table.States (407).Productions := WisiToken.To_Vector ((1 => (115, 
1)));
             Add_Action (Table.States (407), 77, 571);
             Add_Error (Table.States (407));
-            Set_Minimal_Action (Table.States (407).Minimal_Complete_Actions, 
(1 => (Shift, 77, 571)));
+            Table.States (407).Minimal_Complete_Action := (Shift, 77, 571);
             Table.States (408).Productions := WisiToken.To_Vector (((124, 4), 
(165, 0)));
             Add_Action (Table.States (408), 35, Reduce, (124, 4), 1, 
association_opt_4'Access, null);
             Add_Action (Table.States (408), 77, Reduce, (124, 4), 1, 
association_opt_4'Access, null);
@@ -5109,78 +5070,78 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (408), 87, Reduce, (165, 0), 1, null, 
null);
             Add_Action (Table.States (408), 96, Reduce, (124, 4), 1, 
association_opt_4'Access, null);
             Add_Error (Table.States (408));
-            Set_Minimal_Action (Table.States (408).Minimal_Complete_Actions, 
((Reduce, 124, 1), (Reduce, 165, 1)));
+            Table.States (408).Minimal_Complete_Action := (Reduce, 124, 1);
             Table.States (409).Productions := WisiToken.To_Vector (((165, 2), 
(278, 1)));
             Add_Action (Table.States (409), 77, Reduce, (278, 1), 1, null, 
null);
             Add_Action (Table.States (409), 79, Reduce, (165, 2), 1, null, 
null);
             Add_Action (Table.States (409), 83, Reduce, (278, 1), 1, null, 
null);
             Add_Action (Table.States (409), 87, Reduce, (165, 2), 1, null, 
null);
             Add_Error (Table.States (409));
-            Set_Minimal_Action (Table.States (409).Minimal_Complete_Actions, 
((Reduce, 165, 1), (Reduce, 278, 1)));
+            Table.States (409).Minimal_Complete_Action := (Reduce, 165, 1);
             Table.States (410).Productions := WisiToken.To_Vector (((239, 0), 
(278, 0)));
             Add_Action (Table.States (410), 77, 572);
             Add_Action (Table.States (410), 83, 573);
             Add_Error (Table.States (410));
-            Set_Minimal_Action (Table.States (410).Minimal_Complete_Actions, 
(1 => (Shift, 77, 572)));
+            Table.States (410).Minimal_Complete_Action := (Shift, 77, 572);
             Table.States (411).Productions := WisiToken.To_Vector ((1 => (123, 
0)));
             Add_Action (Table.States (411), 96, 574);
             Add_Error (Table.States (411));
-            Set_Minimal_Action (Table.States (411).Minimal_Complete_Actions, 
(1 => (Shift, 96, 574)));
+            Table.States (411).Minimal_Complete_Action := (Shift, 96, 574);
             Table.States (412).Productions := WisiToken.To_Vector ((1 => (293, 
3)));
             Add_Action (Table.States (412), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (293, 3), 3,
             selected_component_3'Access, null);
-            Set_Minimal_Action (Table.States (412).Minimal_Complete_Actions, 
(1 => (Reduce, 293, 3)));
+            Table.States (412).Minimal_Complete_Action := (Reduce, 293, 3);
             Table.States (413).Productions := WisiToken.To_Vector ((1 => (293, 
0)));
             Add_Action (Table.States (413), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (293, 0), 3,
             selected_component_0'Access, selected_component_0_check'Access);
-            Set_Minimal_Action (Table.States (413).Minimal_Complete_Actions, 
(1 => (Reduce, 293, 3)));
+            Table.States (413).Minimal_Complete_Action := (Reduce, 293, 3);
             Table.States (414).Productions := WisiToken.To_Vector ((1 => (293, 
2)));
             Add_Action (Table.States (414), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (293, 2), 3,
             selected_component_2'Access, selected_component_2_check'Access);
-            Set_Minimal_Action (Table.States (414).Minimal_Complete_Actions, 
(1 => (Reduce, 293, 3)));
+            Table.States (414).Minimal_Complete_Action := (Reduce, 293, 3);
             Table.States (415).Productions := WisiToken.To_Vector ((1 => (293, 
1)));
             Add_Action (Table.States (415), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (293, 1), 3,
             selected_component_1'Access, null);
-            Set_Minimal_Action (Table.States (415).Minimal_Complete_Actions, 
(1 => (Reduce, 293, 3)));
+            Table.States (415).Minimal_Complete_Action := (Reduce, 293, 3);
             Table.States (416).Productions := WisiToken.To_Vector ((1 => (129, 
1)));
             Add_Action (Table.States (416), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (129, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (416).Minimal_Complete_Actions, 
(1 => (Reduce, 129, 1)));
+            Table.States (416).Minimal_Complete_Action := (Reduce, 129, 1);
             Table.States (417).Productions := WisiToken.To_Vector ((1 => (129, 
2)));
             Add_Action (Table.States (417), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (129, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (417).Minimal_Complete_Actions, 
(1 => (Reduce, 129, 1)));
+            Table.States (417).Minimal_Complete_Action := (Reduce, 129, 1);
             Table.States (418).Productions := WisiToken.To_Vector ((1 => (129, 
3)));
             Add_Action (Table.States (418), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (129, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (418).Minimal_Complete_Actions, 
(1 => (Reduce, 129, 1)));
+            Table.States (418).Minimal_Complete_Action := (Reduce, 129, 1);
             Table.States (419).Productions := WisiToken.To_Vector ((1 => (129, 
4)));
             Add_Action (Table.States (419), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (129, 4), 1, null, null);
-            Set_Minimal_Action (Table.States (419).Minimal_Complete_Actions, 
(1 => (Reduce, 129, 1)));
+            Table.States (419).Minimal_Complete_Action := (Reduce, 129, 1);
             Table.States (420).Productions := WisiToken.To_Vector ((1 => (272, 
0)));
             Add_Action (Table.States (420), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (272, 0), 3,
             qualified_expression_0'Access, null);
-            Set_Minimal_Action (Table.States (420).Minimal_Complete_Actions, 
(1 => (Reduce, 272, 3)));
+            Table.States (420).Minimal_Complete_Action := (Reduce, 272, 3);
             Table.States (421).Productions := WisiToken.To_Vector ((1 => (128, 
0)));
             Add_Action (Table.States (421), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (128, 0), 3, null, null);
-            Set_Minimal_Action (Table.States (421).Minimal_Complete_Actions, 
(1 => (Reduce, 128, 3)));
+            Table.States (421).Minimal_Complete_Action := (Reduce, 128, 3);
             Table.States (422).Productions := WisiToken.To_Vector (((128, 0), 
(129, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (422), 4, Reduce, (129, 0), 1, null, 
null);
@@ -5249,8 +5210,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (422));
             Add_Goto (Table.States (422), 115, 241);
             Add_Goto (Table.States (422), 322, 242);
-            Set_Minimal_Action (Table.States (422).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 129, 1)));
+            Table.States (422).Minimal_Complete_Action := (Reduce, 129, 1);
             Table.States (423).Productions := WisiToken.To_Vector (((179, 0), 
(179, 1)));
             Add_Action (Table.States (423), 74, Reduce, (253, 1), 0, null, 
null);
             Add_Action (Table.States (423), 76, 575);
@@ -5258,7 +5218,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (423));
             Add_Goto (Table.States (423), 199, 344);
             Add_Goto (Table.States (423), 253, 576);
-            Set_Minimal_Action (Table.States (423).Minimal_Complete_Actions, 
((Shift, 76, 575), (Reduce, 253, 0)));
+            Table.States (423).Minimal_Complete_Action := (Reduce, 253, 0);
             Table.States (424).Productions := WisiToken.To_Vector (((128, 0), 
(207, 0), (213, 2), (239, 0), (239, 1),
             (272, 0), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (424), 35, 577);
@@ -5273,8 +5233,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (424), 252, 320);
             Add_Goto (Table.States (424), 291, 321);
             Add_Goto (Table.States (424), 322, 242);
-            Set_Minimal_Action (Table.States (424).Minimal_Complete_Actions, 
((Shift, 35, 577), (Shift, 58, 317),
-            (Shift, 84, 237), (Shift, 102, 240)));
+            Table.States (424).Minimal_Complete_Action := (Shift, 58, 317);
             Table.States (425).Productions := WisiToken.To_Vector (((128, 0), 
(213, 1), (239, 0), (239, 1), (262, 0),
             (272, 0), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (425), 35, 578, (253, 1), 0, null, null);
@@ -5290,22 +5249,21 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (425), 199, 344);
             Add_Goto (Table.States (425), 253, 345);
             Add_Goto (Table.States (425), 322, 242);
-            Set_Minimal_Action (Table.States (425).Minimal_Complete_Actions, 
((Shift, 35, 578), (Shift, 84, 237),
-            (Shift, 102, 240), (Reduce, 253, 0)));
+            Table.States (425).Minimal_Complete_Action := (Reduce, 253, 0);
             Table.States (426).Productions := WisiToken.To_Vector ((1 => (193, 
0)));
             Add_Action (Table.States (426), 76, 579);
             Add_Error (Table.States (426));
             Add_Goto (Table.States (426), 256, 580);
-            Set_Minimal_Action (Table.States (426).Minimal_Complete_Actions, 
(1 => (Shift, 76, 579)));
+            Table.States (426).Minimal_Complete_Action := (Shift, 76, 579);
             Table.States (427).Productions := WisiToken.To_Vector ((1 => (243, 
0)));
             Add_Action (Table.States (427), 41, 581);
             Add_Error (Table.States (427));
-            Set_Minimal_Action (Table.States (427).Minimal_Complete_Actions, 
(1 => (Shift, 41, 581)));
+            Table.States (427).Minimal_Complete_Action := (Shift, 41, 581);
             Table.States (428).Productions := WisiToken.To_Vector (((112, 0), 
(308, 0)));
             Add_Action (Table.States (428), 6, 582);
             Add_Action (Table.States (428), 60, 583);
             Add_Error (Table.States (428));
-            Set_Minimal_Action (Table.States (428).Minimal_Complete_Actions, 
((Shift, 6, 582), (Shift, 60, 583)));
+            Table.States (428).Minimal_Complete_Action := (Shift, 6, 582);
             Table.States (429).Productions := WisiToken.To_Vector ((1 => (311, 
0)));
             Add_Action (Table.States (429), 104, 119);
             Add_Action (Table.States (429), 105, 33);
@@ -5315,12 +5273,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (429), 239, 584);
             Add_Goto (Table.States (429), 272, 92);
             Add_Goto (Table.States (429), 293, 97);
-            Set_Minimal_Action (Table.States (429).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (429).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (430).Productions := WisiToken.To_Vector (((307, 0), 
(309, 0)));
             Add_Action (Table.States (430), 35, 585);
             Add_Action (Table.States (430), 96, 586);
             Add_Error (Table.States (430));
-            Set_Minimal_Action (Table.States (430).Minimal_Complete_Actions, 
((Shift, 35, 585), (Shift, 96, 586)));
+            Table.States (430).Minimal_Complete_Action := (Shift, 96, 586);
             Table.States (431).Productions := WisiToken.To_Vector ((1 => (199, 
0)));
             Add_Action (Table.States (431), 77, Reduce, (254, 4), 0, null, 
null);
             Add_Action (Table.States (431), 96, Reduce, (254, 4), 0, null, 
null);
@@ -5329,12 +5287,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (431), 219, 493);
             Add_Goto (Table.States (431), 254, 494);
             Add_Goto (Table.States (431), 255, 495);
-            Set_Minimal_Action (Table.States (431).Minimal_Complete_Actions, 
(1 => (Reduce, 255, 0)));
+            Table.States (431).Minimal_Complete_Action := (Reduce, 255, 0);
             Table.States (432).Productions := WisiToken.To_Vector (((113, 0), 
(113, 1)));
             Add_Action (Table.States (432), 21, 587);
             Add_Action (Table.States (432), 96, 588);
             Add_Error (Table.States (432));
-            Set_Minimal_Action (Table.States (432).Minimal_Complete_Actions, 
((Shift, 21, 587), (Shift, 96, 588)));
+            Table.States (432).Minimal_Complete_Action := (Shift, 96, 588);
             Table.States (433).Productions := WisiToken.To_Vector ((1 => (275, 
0)));
             Add_Action (Table.States (433), 3, 121);
             Add_Action (Table.States (433), 10, Reduce, (192, 1), 0, null, 
null);
@@ -5386,26 +5344,26 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (433), 320, 144);
             Add_Goto (Table.States (433), 321, 145);
             Add_Goto (Table.States (433), 330, 146);
-            Set_Minimal_Action (Table.States (433).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (433).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (434).Productions := WisiToken.To_Vector ((1 => (136, 
0)));
             Add_Action (Table.States (434), 35, 590);
             Add_Error (Table.States (434));
-            Set_Minimal_Action (Table.States (434).Minimal_Complete_Actions, 
(1 => (Shift, 35, 590)));
+            Table.States (434).Minimal_Complete_Action := (Shift, 35, 590);
             Table.States (435).Productions := WisiToken.To_Vector ((1 => (274, 
0)));
             Add_Action (Table.States (435), (1 =>  104), (274, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (435).Minimal_Complete_Actions, 
(1 => (Reduce, 274, 1)));
+            Table.States (435).Minimal_Complete_Action := (Reduce, 274, 1);
             Table.States (436).Productions := WisiToken.To_Vector ((1 => (274, 
1)));
             Add_Action (Table.States (436), (1 =>  104), (274, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (436).Minimal_Complete_Actions, 
(1 => (Reduce, 274, 1)));
+            Table.States (436).Minimal_Complete_Action := (Reduce, 274, 1);
             Table.States (437).Productions := WisiToken.To_Vector ((1 => (273, 
0)));
             Add_Action (Table.States (437), 104, 395);
             Add_Error (Table.States (437));
             Add_Goto (Table.States (437), 230, 591);
-            Set_Minimal_Action (Table.States (437).Minimal_Complete_Actions, 
(1 => (Shift, 104, 395)));
+            Table.States (437).Minimal_Complete_Action := (Shift, 104, 395);
             Table.States (438).Productions := WisiToken.To_Vector (((221, 0), 
(221, 1), (221, 2), (221, 3)));
             Add_Action (Table.States (438), 68, 592);
             Add_Error (Table.States (438));
-            Set_Minimal_Action (Table.States (438).Minimal_Complete_Actions, 
(1 => (Shift, 68, 592)));
+            Table.States (438).Minimal_Complete_Action := (Shift, 68, 592);
             Table.States (439).Productions := WisiToken.To_Vector (((165, 1), 
(258, 1)));
             Add_Action (Table.States (439), 10, Reduce, (258, 1), 1, null, 
null);
             Add_Action (Table.States (439), 33, Reduce, (258, 1), 1, null, 
null);
@@ -5441,11 +5399,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (439), 239, 593);
             Add_Goto (Table.States (439), 272, 92);
             Add_Goto (Table.States (439), 293, 97);
-            Set_Minimal_Action (Table.States (439).Minimal_Complete_Actions, 
(1 => (Reduce, 258, 1)));
+            Table.States (439).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (440).Productions := WisiToken.To_Vector ((1 => (117, 
2)));
             Add_Action (Table.States (440), 77, 594);
             Add_Error (Table.States (440));
-            Set_Minimal_Action (Table.States (440).Minimal_Complete_Actions, 
(1 => (Shift, 77, 594)));
+            Table.States (440).Minimal_Complete_Action := (Shift, 77, 594);
             Table.States (441).Productions := WisiToken.To_Vector (((124, 0), 
(124, 1)));
             Add_Action (Table.States (441), 3, 121);
             Add_Action (Table.States (441), 35, Reduce, (192, 1), 0, null, 
null);
@@ -5485,13 +5443,13 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (441), 320, 144);
             Add_Goto (Table.States (441), 321, 145);
             Add_Goto (Table.States (441), 330, 146);
-            Set_Minimal_Action (Table.States (441).Minimal_Complete_Actions, 
((Shift, 80, 595), (Reduce, 192, 0)));
+            Table.States (441).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (442).Productions := WisiToken.To_Vector ((1 => (117, 
4)));
             Add_Action (Table.States (442), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (117, 4), 3, aggregate_4'Access,
             null);
-            Set_Minimal_Action (Table.States (442).Minimal_Complete_Actions, 
(1 => (Reduce, 117, 3)));
+            Table.States (442).Minimal_Complete_Action := (Reduce, 117, 3);
             Table.States (443).Productions := WisiToken.To_Vector ((1 => (125, 
0)));
             Add_Action (Table.States (443), 3, 121);
             Add_Action (Table.States (443), 35, Reduce, (124, 5), 0, null, 
null);
@@ -5536,13 +5494,13 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (443), 320, 144);
             Add_Goto (Table.States (443), 321, 145);
             Add_Goto (Table.States (443), 330, 146);
-            Set_Minimal_Action (Table.States (443).Minimal_Complete_Actions, 
(1 => (Reduce, 124, 0)));
+            Table.States (443).Minimal_Complete_Action := (Reduce, 124, 0);
             Table.States (444).Productions := WisiToken.To_Vector ((1 => (117, 
3)));
             Add_Action (Table.States (444), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (117, 3), 3, aggregate_3'Access,
             null);
-            Set_Minimal_Action (Table.States (444).Minimal_Complete_Actions, 
(1 => (Reduce, 117, 3)));
+            Table.States (444).Minimal_Complete_Action := (Reduce, 117, 3);
             Table.States (445).Productions := WisiToken.To_Vector ((1 => (166, 
0)));
             Add_Action (Table.States (445), 3, 121);
             Add_Action (Table.States (445), 39, 122);
@@ -5579,7 +5537,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (445), 320, 144);
             Add_Goto (Table.States (445), 321, 145);
             Add_Goto (Table.States (445), 330, 146);
-            Set_Minimal_Action (Table.States (445).Minimal_Complete_Actions, 
(1 => (Shift, 44, 263)));
+            Table.States (445).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (446).Productions := WisiToken.To_Vector (((124, 2), 
(124, 3)));
             Add_Action (Table.States (446), 3, 121);
             Add_Action (Table.States (446), 35, Reduce, (192, 1), 0, null, 
null);
@@ -5619,7 +5577,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (446), 320, 144);
             Add_Goto (Table.States (446), 321, 145);
             Add_Goto (Table.States (446), 330, 146);
-            Set_Minimal_Action (Table.States (446).Minimal_Complete_Actions, 
((Shift, 80, 600), (Reduce, 192, 0)));
+            Table.States (446).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (447).Productions := WisiToken.To_Vector (((117, 0), 
(117, 1)));
             Add_Action (Table.States (447), 3, 121);
             Add_Action (Table.States (447), 39, 122);
@@ -5663,7 +5621,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (447), 320, 144);
             Add_Goto (Table.States (447), 321, 145);
             Add_Goto (Table.States (447), 330, 146);
-            Set_Minimal_Action (Table.States (447).Minimal_Complete_Actions, 
((Shift, 41, 602), (Reduce, 125, 0)));
+            Table.States (447).Minimal_Complete_Action := (Reduce, 125, 0);
             Table.States (448).Productions := WisiToken.To_Vector (((128, 0), 
(272, 0), (277, 0), (277, 1)));
             Add_Action (Table.States (448), 7, 416);
             Add_Action (Table.States (448), 19, 417);
@@ -5681,8 +5639,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (448), 239, 422);
             Add_Goto (Table.States (448), 272, 92);
             Add_Goto (Table.States (448), 293, 97);
-            Set_Minimal_Action (Table.States (448).Minimal_Complete_Actions, 
((Shift, 38, 419), (Shift, 53, 604),
-            (Shift, 76, 126)));
+            Table.States (448).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (449).Productions := WisiToken.To_Vector ((1 => (277, 
2)));
             Add_Action (Table.States (449), 3, 121);
             Add_Action (Table.States (449), 39, 122);
@@ -5707,7 +5664,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (449), 320, 144);
             Add_Goto (Table.States (449), 321, 145);
             Add_Goto (Table.States (449), 330, 146);
-            Set_Minimal_Action (Table.States (449).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (449).Minimal_Complete_Action := (Shift, 103, 129);
          end Subr_8;
          procedure Subr_9
          is begin
@@ -5750,24 +5707,24 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (450), 320, 144);
             Add_Goto (Table.States (450), 321, 145);
             Add_Goto (Table.States (450), 330, 146);
-            Set_Minimal_Action (Table.States (450).Minimal_Complete_Actions, 
(1 => (Reduce, 166, 0)));
+            Table.States (450).Minimal_Complete_Action := (Reduce, 166, 0);
             Table.States (451).Productions := WisiToken.To_Vector ((1 => (141, 
1)));
             Add_Action (Table.States (451), (24, 72), (141, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (451).Minimal_Complete_Actions, 
(1 => (Reduce, 141, 1)));
+            Table.States (451).Minimal_Complete_Action := (Reduce, 141, 1);
             Table.States (452).Productions := WisiToken.To_Vector (((139, 0), 
(141, 0)));
             Add_Action (Table.States (452), 24, 607);
             Add_Action (Table.States (452), 72, 450);
             Add_Error (Table.States (452));
             Add_Goto (Table.States (452), 140, 608);
-            Set_Minimal_Action (Table.States (452).Minimal_Complete_Actions, 
(1 => (Shift, 24, 607)));
+            Table.States (452).Minimal_Complete_Action := (Shift, 24, 607);
             Table.States (453).Productions := WisiToken.To_Vector ((1 => (197, 
0)));
             Add_Action (Table.States (453), (10, 20, 21, 22, 23, 33, 35, 37, 
38, 40, 42, 43, 53, 55, 68, 74, 75, 77,
             78, 79, 82, 83, 85, 86, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 
99), (197, 0), 3, null, null);
-            Set_Minimal_Action (Table.States (453).Minimal_Complete_Actions, 
(1 => (Reduce, 197, 3)));
+            Table.States (453).Minimal_Complete_Action := (Reduce, 197, 3);
             Table.States (454).Productions := WisiToken.To_Vector ((1 => (282, 
0)));
             Add_Action (Table.States (454), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (282,
             0), 3, null, null);
-            Set_Minimal_Action (Table.States (454).Minimal_Complete_Actions, 
(1 => (Reduce, 282, 3)));
+            Table.States (454).Minimal_Complete_Action := (Reduce, 282, 3);
             Table.States (455).Productions := WisiToken.To_Vector ((1 => (283, 
0)));
             Add_Action (Table.States (455), 3, 121);
             Add_Action (Table.States (455), 39, 122);
@@ -5795,11 +5752,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (455), 320, 144);
             Add_Goto (Table.States (455), 321, 145);
             Add_Goto (Table.States (455), 330, 146);
-            Set_Minimal_Action (Table.States (455).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (455).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (456).Productions := WisiToken.To_Vector ((1 => (284, 
0)));
             Add_Action (Table.States (456), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (284,
             0), 3, null, null);
-            Set_Minimal_Action (Table.States (456).Minimal_Complete_Actions, 
(1 => (Reduce, 284, 3)));
+            Table.States (456).Minimal_Complete_Action := (Reduce, 284, 3);
             Table.States (457).Productions := WisiToken.To_Vector ((1 => (285, 
0)));
             Add_Action (Table.States (457), 3, 121);
             Add_Action (Table.States (457), 39, 122);
@@ -5827,11 +5784,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (457), 320, 144);
             Add_Goto (Table.States (457), 321, 145);
             Add_Goto (Table.States (457), 330, 146);
-            Set_Minimal_Action (Table.States (457).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (457).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (458).Productions := WisiToken.To_Vector ((1 => (286, 
0)));
             Add_Action (Table.States (458), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (286,
             0), 3, null, null);
-            Set_Minimal_Action (Table.States (458).Minimal_Complete_Actions, 
(1 => (Reduce, 286, 3)));
+            Table.States (458).Minimal_Complete_Action := (Reduce, 286, 3);
             Table.States (459).Productions := WisiToken.To_Vector ((1 => (283, 
1)));
             Add_Action (Table.States (459), 3, 121);
             Add_Action (Table.States (459), 39, 122);
@@ -5859,11 +5816,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (459), 320, 144);
             Add_Goto (Table.States (459), 321, 145);
             Add_Goto (Table.States (459), 330, 146);
-            Set_Minimal_Action (Table.States (459).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (459).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (460).Productions := WisiToken.To_Vector ((1 => (282, 
1)));
             Add_Action (Table.States (460), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (282,
             1), 3, null, null);
-            Set_Minimal_Action (Table.States (460).Minimal_Complete_Actions, 
(1 => (Reduce, 282, 3)));
+            Table.States (460).Minimal_Complete_Action := (Reduce, 282, 3);
             Table.States (461).Productions := WisiToken.To_Vector ((1 => (285, 
1)));
             Add_Action (Table.States (461), 3, 121);
             Add_Action (Table.States (461), 39, 122);
@@ -5891,15 +5848,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (461), 320, 144);
             Add_Goto (Table.States (461), 321, 145);
             Add_Goto (Table.States (461), 330, 146);
-            Set_Minimal_Action (Table.States (461).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (461).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (462).Productions := WisiToken.To_Vector ((1 => (284, 
1)));
             Add_Action (Table.States (462), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (284,
             1), 3, null, null);
-            Set_Minimal_Action (Table.States (462).Minimal_Complete_Actions, 
(1 => (Reduce, 284, 3)));
+            Table.States (462).Minimal_Complete_Action := (Reduce, 284, 3);
             Table.States (463).Productions := WisiToken.To_Vector ((1 => (286, 
1)));
             Add_Action (Table.States (463), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (286,
             1), 3, null, null);
-            Set_Minimal_Action (Table.States (463).Minimal_Complete_Actions, 
(1 => (Reduce, 286, 3)));
+            Table.States (463).Minimal_Complete_Action := (Reduce, 286, 3);
             Table.States (464).Productions := WisiToken.To_Vector (((233, 0), 
(287, 1)));
             Add_Action (Table.States (464), 10, Reduce, (287, 1), 3, null, 
null);
             Add_Action (Table.States (464), 20, Reduce, (287, 1), 3, null, 
null);
@@ -5919,15 +5876,15 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (464), 87, Reduce, (287, 1), 3, null, 
null);
             Add_Action (Table.States (464), 96, Reduce, (287, 1), 3, null, 
null);
             Add_Error (Table.States (464));
-            Set_Minimal_Action (Table.States (464).Minimal_Complete_Actions, 
(1 => (Reduce, 287, 3)));
+            Table.States (464).Minimal_Complete_Action := (Reduce, 287, 3);
             Table.States (465).Productions := WisiToken.To_Vector ((1 => (233, 
1)));
             Add_Action (Table.States (465), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (233,
             1), 1, null, null);
-            Set_Minimal_Action (Table.States (465).Minimal_Complete_Actions, 
(1 => (Reduce, 233, 1)));
+            Table.States (465).Minimal_Complete_Action := (Reduce, 233, 1);
             Table.States (466).Productions := WisiToken.To_Vector ((1 => (234, 
1)));
             Add_Action (Table.States (466), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (234,
             1), 1, null, null);
-            Set_Minimal_Action (Table.States (466).Minimal_Complete_Actions, 
(1 => (Reduce, 234, 1)));
+            Table.States (466).Minimal_Complete_Action := (Reduce, 234, 1);
             Table.States (467).Productions := WisiToken.To_Vector (((234, 0), 
(277, 2)));
             Add_Action (Table.States (467), 10, Reduce, (234, 0), 1, null, 
null);
             Add_Action (Table.States (467), 20, Reduce, (234, 0), 1, null, 
null);
@@ -5948,7 +5905,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (467), 87, Reduce, (234, 0), 1, null, 
null);
             Add_Action (Table.States (467), 96, Reduce, (234, 0), 1, null, 
null);
             Add_Error (Table.States (467));
-            Set_Minimal_Action (Table.States (467).Minimal_Complete_Actions, 
((Shift, 85, 449), (Reduce, 234, 1)));
+            Table.States (467).Minimal_Complete_Action := (Reduce, 234, 1);
             Table.States (468).Productions := WisiToken.To_Vector ((1 => (287, 
0)));
             Add_Action (Table.States (468), 3, 121);
             Add_Action (Table.States (468), 39, 122);
@@ -5976,15 +5933,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (468), 320, 144);
             Add_Goto (Table.States (468), 321, 145);
             Add_Goto (Table.States (468), 330, 146);
-            Set_Minimal_Action (Table.States (468).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (468).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (469).Productions := WisiToken.To_Vector ((1 => (287, 
2)));
             Add_Action (Table.States (469), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (287,
             2), 3, null, null);
-            Set_Minimal_Action (Table.States (469).Minimal_Complete_Actions, 
(1 => (Reduce, 287, 3)));
+            Table.States (469).Minimal_Complete_Action := (Reduce, 287, 3);
             Table.States (470).Productions := WisiToken.To_Vector ((1 => (320, 
0)));
             Add_Action (Table.States (470), (10, 20, 21, 22, 23, 33, 35, 37, 
38, 40, 42, 43, 53, 55, 68, 74, 75, 77,
             78, 79, 82, 83, 85, 86, 87, 88, 89, 91, 92, 94, 95, 96, 97, 98, 
99), (320, 0), 3, null, null);
-            Set_Minimal_Action (Table.States (470).Minimal_Complete_Actions, 
(1 => (Reduce, 320, 3)));
+            Table.States (470).Minimal_Complete_Action := (Reduce, 320, 3);
             Table.States (471).Productions := WisiToken.To_Vector (((320, 0), 
(321, 0)));
             Add_Action (Table.States (471), 10, Reduce, (321, 0), 3, null, 
null);
             Add_Action (Table.States (471), 20, Reduce, (321, 0), 3, null, 
null);
@@ -6023,16 +5980,16 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (471), 99, 300);
             Add_Error (Table.States (471));
             Add_Goto (Table.States (471), 237, 301);
-            Set_Minimal_Action (Table.States (471).Minimal_Complete_Actions, 
(1 => (Reduce, 321, 3)));
+            Table.States (471).Minimal_Complete_Action := (Reduce, 321, 3);
             Table.States (472).Productions := WisiToken.To_Vector ((1 => (161, 
0)));
             Add_Action (Table.States (472), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (161, 0), 4, delay_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (472).Minimal_Complete_Actions, 
(1 => (Reduce, 161, 4)));
+            Table.States (472).Minimal_Complete_Action := (Reduce, 161, 4);
             Table.States (473).Productions := WisiToken.To_Vector ((1 => (190, 
0)));
             Add_Action (Table.States (473), 96, 615);
             Add_Error (Table.States (473));
-            Set_Minimal_Action (Table.States (473).Minimal_Complete_Actions, 
(1 => (Shift, 96, 615)));
+            Table.States (473).Minimal_Complete_Action := (Shift, 96, 615);
             Table.States (474).Productions := WisiToken.To_Vector (((197, 3), 
(314, 0), (314, 1)));
             Add_Action (Table.States (474), 39, 122);
             Add_Action (Table.States (474), 41, 616);
@@ -6048,7 +6005,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (474), 258, 256);
             Add_Goto (Table.States (474), 272, 92);
             Add_Goto (Table.States (474), 293, 97);
-            Set_Minimal_Action (Table.States (474).Minimal_Complete_Actions, 
((Shift, 41, 616), (Shift, 105, 33)));
+            Table.States (474).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (475).Productions := WisiToken.To_Vector ((1 => (230, 
2)));
             Add_Action (Table.States (475), 3, 121);
             Add_Action (Table.States (475), 39, 122);
@@ -6076,10 +6033,10 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (475), 320, 144);
             Add_Goto (Table.States (475), 321, 145);
             Add_Goto (Table.States (475), 330, 146);
-            Set_Minimal_Action (Table.States (475).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (475).Minimal_Complete_Action := (Shift, 40, 474);
             Table.States (476).Productions := WisiToken.To_Vector ((1 => (230, 
5)));
             Add_Action (Table.States (476), (37, 87), (230, 5), 3, 
iterator_specification_5'Access, null);
-            Set_Minimal_Action (Table.States (476).Minimal_Complete_Actions, 
(1 => (Reduce, 230, 3)));
+            Table.States (476).Minimal_Complete_Action := (Reduce, 230, 3);
             Table.States (477).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (258, 3), (272, 0),
             (277, 0), (277, 1), (293, 0), (293, 1), (293, 2), (293, 3), (314, 
2), (314, 3)));
             Add_Action (Table.States (477), 10, Reduce, (258, 3), 1, null, 
null);
@@ -6120,18 +6077,17 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (477), 155, 620);
             Add_Goto (Table.States (477), 224, 621);
             Add_Goto (Table.States (477), 322, 448);
-            Set_Minimal_Action (Table.States (477).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 258, 1), (Reduce, 314, 1)));
+            Table.States (477).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (478).Productions := WisiToken.To_Vector ((1 => (167, 
1)));
             Add_Action (Table.States (478), (37, 77, 83, 87), (167, 1), 1, 
null, null);
-            Set_Minimal_Action (Table.States (478).Minimal_Complete_Actions, 
(1 => (Reduce, 167, 1)));
+            Table.States (478).Minimal_Complete_Action := (Reduce, 167, 1);
             Table.States (479).Productions := WisiToken.To_Vector ((1 => (277, 
2)));
             Add_Action (Table.States (479), 85, 449);
             Add_Error (Table.States (479));
-            Set_Minimal_Action (Table.States (479).Minimal_Complete_Actions, 
(1 => (Shift, 85, 449)));
+            Table.States (479).Minimal_Complete_Action := (Shift, 85, 449);
             Table.States (480).Productions := WisiToken.To_Vector ((1 => (167, 
0)));
             Add_Action (Table.States (480), (37, 77, 83, 87), (167, 0), 1, 
null, null);
-            Set_Minimal_Action (Table.States (480).Minimal_Complete_Actions, 
(1 => (Reduce, 167, 1)));
+            Table.States (480).Minimal_Complete_Action := (Reduce, 167, 1);
             Table.States (481).Productions := WisiToken.To_Vector ((1 => (230, 
3)));
             Add_Action (Table.States (481), 104, 119);
             Add_Action (Table.States (481), 105, 33);
@@ -6141,7 +6097,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (481), 239, 622);
             Add_Goto (Table.States (481), 272, 92);
             Add_Goto (Table.States (481), 293, 97);
-            Set_Minimal_Action (Table.States (481).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (481).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (482).Productions := WisiToken.To_Vector (((128, 0), 
(230, 4), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (482), 37, Reduce, (230, 4), 3, null, 
null);
@@ -6153,12 +6109,11 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (482));
             Add_Goto (Table.States (482), 115, 241);
             Add_Goto (Table.States (482), 322, 242);
-            Set_Minimal_Action (Table.States (482).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 230, 3)));
+            Table.States (482).Minimal_Complete_Action := (Reduce, 230, 3);
             Table.States (483).Productions := WisiToken.To_Vector (((314, 0), 
(314, 1)));
             Add_Action (Table.States (483), 41, 623);
             Add_Error (Table.States (483));
-            Set_Minimal_Action (Table.States (483).Minimal_Complete_Actions, 
(1 => (Shift, 41, 623)));
+            Table.States (483).Minimal_Complete_Action := (Shift, 41, 623);
             Table.States (484).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (272, 0), (293, 0),
             (293, 1), (293, 2), (293, 3), (314, 2), (314, 3)));
             Add_Action (Table.States (484), 10, Reduce, (314, 3), 1, 
subtype_indication_3'Access, null);
@@ -6177,16 +6132,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (484), 155, 620);
             Add_Goto (Table.States (484), 224, 621);
             Add_Goto (Table.States (484), 322, 242);
-            Set_Minimal_Action (Table.States (484).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 314, 1)));
+            Table.States (484).Minimal_Complete_Action := (Reduce, 314, 1);
             Table.States (485).Productions := WisiToken.To_Vector (((230, 0), 
(230, 1)));
             Add_Action (Table.States (485), 42, 624);
             Add_Error (Table.States (485));
-            Set_Minimal_Action (Table.States (485).Minimal_Complete_Actions, 
(1 => (Shift, 42, 624)));
+            Table.States (485).Minimal_Complete_Action := (Shift, 42, 624);
             Table.States (486).Productions := WisiToken.To_Vector ((1 => (121, 
0)));
             Add_Action (Table.States (486), 96, 625);
             Add_Error (Table.States (486));
-            Set_Minimal_Action (Table.States (486).Minimal_Complete_Actions, 
(1 => (Shift, 96, 625)));
+            Table.States (486).Minimal_Complete_Action := (Shift, 96, 625);
             Table.States (487).Productions := WisiToken.To_Vector ((1 => (127, 
0)));
             Add_Action (Table.States (487), 3, 121);
             Add_Action (Table.States (487), 39, 122);
@@ -6222,20 +6176,20 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (487), 320, 144);
             Add_Goto (Table.States (487), 321, 145);
             Add_Goto (Table.States (487), 330, 146);
-            Set_Minimal_Action (Table.States (487).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (487).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (488).Productions := WisiToken.To_Vector ((1 => (281, 
0)));
             Add_Action (Table.States (488), 12, 627);
             Add_Action (Table.States (488), 104, Reduce, (235, 1), 0, null, 
null);
             Add_Error (Table.States (488));
             Add_Goto (Table.States (488), 235, 628);
-            Set_Minimal_Action (Table.States (488).Minimal_Complete_Actions, 
(1 => (Reduce, 235, 0)));
+            Table.States (488).Minimal_Complete_Action := (Reduce, 235, 0);
             Table.States (489).Productions := WisiToken.To_Vector ((1 => (182, 
0)));
             Add_Action (Table.States (489), 96, 629);
             Add_Error (Table.States (489));
-            Set_Minimal_Action (Table.States (489).Minimal_Complete_Actions, 
(1 => (Shift, 96, 629)));
+            Table.States (489).Minimal_Complete_Action := (Shift, 96, 629);
             Table.States (490).Productions := WisiToken.To_Vector ((1 => (291, 
1)));
             Add_Action (Table.States (490), (21, 35, 56, 74, 77, 82, 96), 
(291, 1), 2, result_profile_1'Access, null);
-            Set_Minimal_Action (Table.States (490).Minimal_Complete_Actions, 
(1 => (Reduce, 291, 2)));
+            Table.States (490).Minimal_Complete_Action := (Reduce, 291, 2);
             Table.States (491).Productions := WisiToken.To_Vector (((114, 0), 
(114, 1), (114, 2), (291, 0)));
             Add_Action (Table.States (491), 7, 556);
             Add_Action (Table.States (491), 21, Reduce, (240, 1), 0, null, 
null);
@@ -6254,7 +6208,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (491), 240, 631);
             Add_Goto (Table.States (491), 272, 92);
             Add_Goto (Table.States (491), 293, 97);
-            Set_Minimal_Action (Table.States (491).Minimal_Complete_Actions, 
((Shift, 7, 556), (Reduce, 240, 0)));
+            Table.States (491).Minimal_Complete_Action := (Reduce, 240, 0);
             Table.States (492).Productions := WisiToken.To_Vector (((219, 1), 
(239, 5)));
             Add_Action (Table.States (492), 10, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (492), 33, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
@@ -6288,24 +6242,24 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (492), 101, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (492), 102, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Error (Table.States (492));
-            Set_Minimal_Action (Table.States (492).Minimal_Complete_Actions, 
((Reduce, 219, 1), (Reduce, 239, 1)));
+            Table.States (492).Minimal_Complete_Action := (Reduce, 219, 1);
             Table.States (493).Productions := WisiToken.To_Vector (((219, 0), 
(254, 0), (254, 1), (254, 2), (254, 3)));
             Add_Action (Table.States (493), 81, 632);
             Add_Action (Table.States (493), 83, 234);
             Add_Error (Table.States (493));
-            Set_Minimal_Action (Table.States (493).Minimal_Complete_Actions, 
(1 => (Shift, 81, 632)));
+            Table.States (493).Minimal_Complete_Action := (Shift, 81, 632);
             Table.States (494).Productions := WisiToken.To_Vector ((1 => (255, 
1)));
             Add_Action (Table.States (494), (77, 96), (255, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (494).Minimal_Complete_Actions, 
(1 => (Reduce, 255, 1)));
+            Table.States (494).Minimal_Complete_Action := (Reduce, 255, 1);
             Table.States (495).Productions := WisiToken.To_Vector (((199, 0), 
(255, 0)));
             Add_Action (Table.States (495), 77, 633);
             Add_Action (Table.States (495), 96, 634);
             Add_Error (Table.States (495));
-            Set_Minimal_Action (Table.States (495).Minimal_Complete_Actions, 
(1 => (Shift, 77, 633)));
+            Table.States (495).Minimal_Complete_Action := (Shift, 77, 633);
             Table.States (496).Productions := WisiToken.To_Vector ((1 => (252, 
0)));
             Add_Action (Table.States (496), (21, 35, 56, 74, 77, 82, 96), 
(252, 0), 2,
             parameter_and_result_profile_0'Access, null);
-            Set_Minimal_Action (Table.States (496).Minimal_Complete_Actions, 
(1 => (Reduce, 252, 2)));
+            Table.States (496).Minimal_Complete_Action := (Reduce, 252, 2);
             Table.States (497).Productions := WisiToken.To_Vector ((1 => (215, 
2)));
             Add_Action (Table.States (497), 104, 119);
             Add_Action (Table.States (497), 105, 33);
@@ -6315,7 +6269,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (497), 239, 635);
             Add_Goto (Table.States (497), 272, 92);
             Add_Goto (Table.States (497), 293, 97);
-            Set_Minimal_Action (Table.States (497).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (497).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (498).Productions := WisiToken.To_Vector ((1 => (215, 
0)));
             Add_Action (Table.States (498), 104, 119);
             Add_Action (Table.States (498), 105, 33);
@@ -6325,7 +6279,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (498), 239, 636);
             Add_Goto (Table.States (498), 272, 92);
             Add_Goto (Table.States (498), 293, 97);
-            Set_Minimal_Action (Table.States (498).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (498).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (499).Productions := WisiToken.To_Vector ((1 => (215, 
1)));
             Add_Action (Table.States (499), 104, 119);
             Add_Action (Table.States (499), 105, 33);
@@ -6335,14 +6289,14 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (499), 239, 637);
             Add_Goto (Table.States (499), 272, 92);
             Add_Goto (Table.States (499), 293, 97);
-            Set_Minimal_Action (Table.States (499).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (499).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (500).Productions := WisiToken.To_Vector (((201, 0), 
(201, 1), (201, 2)));
             Add_Action (Table.States (500), 35, 638);
             Add_Action (Table.States (500), 74, 337);
             Add_Action (Table.States (500), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (500));
             Add_Goto (Table.States (500), 122, 639);
-            Set_Minimal_Action (Table.States (500).Minimal_Complete_Actions, 
((Shift, 35, 638), (Reduce, 122, 0)));
+            Table.States (500).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (501).Productions := WisiToken.To_Vector (((128, 0), 
(204, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (501), 35, 640);
@@ -6353,8 +6307,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (501));
             Add_Goto (Table.States (501), 115, 241);
             Add_Goto (Table.States (501), 322, 242);
-            Set_Minimal_Action (Table.States (501).Minimal_Complete_Actions, 
((Shift, 35, 640), (Shift, 84, 237),
-            (Shift, 102, 240)));
+            Table.States (501).Minimal_Complete_Action := (Shift, 35, 640);
             Table.States (502).Productions := WisiToken.To_Vector (((200, 0), 
(200, 1), (200, 2)));
             Add_Action (Table.States (502), 6, 641);
             Add_Action (Table.States (502), 41, 642);
@@ -6368,14 +6321,14 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (502), 272, 92);
             Add_Goto (Table.States (502), 293, 97);
             Add_Goto (Table.States (502), 310, 645);
-            Set_Minimal_Action (Table.States (502).Minimal_Complete_Actions, 
((Shift, 6, 641), (Shift, 41, 642)));
+            Table.States (502).Minimal_Complete_Action := (Shift, 104, 119);
          end Subr_9;
          procedure Subr_10
          is begin
             Table.States (503).Productions := WisiToken.To_Vector ((1 => (200, 
3)));
             Add_Action (Table.States (503), 96, 646);
             Add_Error (Table.States (503));
-            Set_Minimal_Action (Table.States (503).Minimal_Complete_Actions, 
(1 => (Shift, 96, 646)));
+            Table.States (503).Minimal_Complete_Action := (Shift, 96, 646);
             Table.States (504).Productions := WisiToken.To_Vector (((236, 0), 
(236, 1)));
             Add_Action (Table.States (504), 7, Reduce, (236, 0), 1, null, 
null);
             Add_Action (Table.States (504), 40, Reduce, (236, 0), 1, null, 
null);
@@ -6387,10 +6340,10 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (504), 105, Reduce, (236, 0), 1, null, 
null);
             Add_Action (Table.States (504), 106, Reduce, (236, 0), 1, null, 
null);
             Add_Error (Table.States (504));
-            Set_Minimal_Action (Table.States (504).Minimal_Complete_Actions, 
(1 => (Reduce, 236, 1)));
+            Table.States (504).Minimal_Complete_Action := (Reduce, 236, 1);
             Table.States (505).Productions := WisiToken.To_Vector ((1 => (236, 
2)));
             Add_Action (Table.States (505), (7, 40, 74, 82, 96, 104, 105, 
106), (236, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (505).Minimal_Complete_Actions, 
(1 => (Reduce, 236, 1)));
+            Table.States (505).Minimal_Complete_Action := (Reduce, 236, 1);
             Table.States (506).Productions := WisiToken.To_Vector (((198, 0), 
(198, 1), (198, 2), (198, 3)));
             Add_Action (Table.States (506), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (506), 40, 386);
@@ -6400,7 +6353,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (506));
             Add_Goto (Table.States (506), 114, 648);
             Add_Goto (Table.States (506), 241, 649);
-            Set_Minimal_Action (Table.States (506).Minimal_Complete_Actions, 
(1 => (Reduce, 241, 0)));
+            Table.States (506).Minimal_Complete_Action := (Reduce, 241, 0);
             Table.States (507).Productions := WisiToken.To_Vector (((222, 0), 
(222, 1), (222, 2), (222, 3)));
             Add_Action (Table.States (507), 22, 650);
             Add_Action (Table.States (507), 23, 651);
@@ -6408,26 +6361,25 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (507));
             Add_Goto (Table.States (507), 174, 653);
             Add_Goto (Table.States (507), 175, 654);
-            Set_Minimal_Action (Table.States (507).Minimal_Complete_Actions, 
((Shift, 22, 650), (Shift, 23, 651),
-            (Shift, 24, 652)));
+            Table.States (507).Minimal_Complete_Action := (Shift, 24, 652);
             Table.States (508).Productions := WisiToken.To_Vector (((238, 0), 
(332, 0)));
             Add_Action (Table.States (508), 83, 381);
             Add_Action (Table.States (508), 96, 655);
             Add_Error (Table.States (508));
-            Set_Minimal_Action (Table.States (508).Minimal_Complete_Actions, 
(1 => (Shift, 96, 655)));
+            Table.States (508).Minimal_Complete_Action := (Shift, 96, 655);
             Table.States (509).Productions := WisiToken.To_Vector ((1 => (332, 
1)));
             Add_Action (Table.States (509), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
             48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (332, 1), 4,
             with_clause_1'Access, null);
-            Set_Minimal_Action (Table.States (509).Minimal_Complete_Actions, 
(1 => (Reduce, 332, 4)));
+            Table.States (509).Minimal_Complete_Action := (Reduce, 332, 4);
             Table.States (510).Productions := WisiToken.To_Vector ((1 => (248, 
0)));
             Add_Action (Table.States (510), 60, 656);
             Add_Error (Table.States (510));
-            Set_Minimal_Action (Table.States (510).Minimal_Complete_Actions, 
(1 => (Shift, 60, 656)));
+            Table.States (510).Minimal_Complete_Action := (Shift, 60, 656);
             Table.States (511).Productions := WisiToken.To_Vector (((247, 0), 
(247, 1)));
             Add_Action (Table.States (511), 35, 657);
             Add_Error (Table.States (511));
-            Set_Minimal_Action (Table.States (511).Minimal_Complete_Actions, 
(1 => (Shift, 35, 657)));
+            Table.States (511).Minimal_Complete_Action := (Shift, 35, 657);
             Table.States (512).Productions := WisiToken.To_Vector ((1 => (213, 
0)));
             Add_Action (Table.States (512), 104, 119);
             Add_Action (Table.States (512), 105, 33);
@@ -6437,7 +6389,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (512), 239, 658);
             Add_Goto (Table.States (512), 272, 92);
             Add_Goto (Table.States (512), 293, 97);
-            Set_Minimal_Action (Table.States (512).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (512).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (513).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (250, 0), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (513), 74, 337);
@@ -6450,14 +6402,13 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (513), 115, 241);
             Add_Goto (Table.States (513), 122, 659);
             Add_Goto (Table.States (513), 322, 242);
-            Set_Minimal_Action (Table.States (513).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (513).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (514).Productions := WisiToken.To_Vector (((122, 0), 
(125, 0)));
             Add_Action (Table.States (514), 35, Reduce, (122, 0), 2, 
aspect_specification_opt_0'Access, null);
             Add_Action (Table.States (514), 83, 443);
             Add_Action (Table.States (514), 96, Reduce, (122, 0), 2, 
aspect_specification_opt_0'Access, null);
             Add_Error (Table.States (514));
-            Set_Minimal_Action (Table.States (514).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 2)));
+            Table.States (514).Minimal_Complete_Action := (Reduce, 122, 2);
             Table.States (515).Productions := WisiToken.To_Vector (((251, 0), 
(251, 1)));
             Add_Action (Table.States (515), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (515), 25, Reduce, (246, 2), 0, null, 
null);
@@ -6530,35 +6481,35 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (515), 319, 113);
             Add_Goto (Table.States (515), 325, 115);
             Add_Goto (Table.States (515), 331, 116);
-            Set_Minimal_Action (Table.States (515).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (515).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (516).Productions := WisiToken.To_Vector (((125, 0), 
(257, 0)));
             Add_Action (Table.States (516), 77, 661);
             Add_Action (Table.States (516), 83, 443);
             Add_Error (Table.States (516));
-            Set_Minimal_Action (Table.States (516).Minimal_Complete_Actions, 
(1 => (Shift, 77, 661)));
+            Table.States (516).Minimal_Complete_Action := (Shift, 77, 661);
             Table.States (517).Productions := WisiToken.To_Vector ((1 => (257, 
1)));
             Add_Action (Table.States (517), 77, 662);
             Add_Error (Table.States (517));
-            Set_Minimal_Action (Table.States (517).Minimal_Complete_Actions, 
(1 => (Shift, 77, 662)));
+            Table.States (517).Minimal_Complete_Action := (Shift, 77, 662);
             Table.States (518).Productions := WisiToken.To_Vector ((1 => (332, 
2)));
             Add_Action (Table.States (518), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
             48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (332, 2), 4,
             with_clause_2'Access, null);
-            Set_Minimal_Action (Table.States (518).Minimal_Complete_Actions, 
(1 => (Reduce, 332, 4)));
+            Table.States (518).Minimal_Complete_Action := (Reduce, 332, 4);
             Table.States (519).Productions := WisiToken.To_Vector ((1 => (265, 
0)));
             Add_Action (Table.States (519), 60, 663);
             Add_Error (Table.States (519));
-            Set_Minimal_Action (Table.States (519).Minimal_Complete_Actions, 
(1 => (Shift, 60, 663)));
+            Table.States (519).Minimal_Complete_Action := (Shift, 60, 663);
             Table.States (520).Productions := WisiToken.To_Vector ((1 => (264, 
0)));
             Add_Action (Table.States (520), 35, 664);
             Add_Error (Table.States (520));
-            Set_Minimal_Action (Table.States (520).Minimal_Complete_Actions, 
(1 => (Shift, 35, 664)));
+            Table.States (520).Minimal_Complete_Action := (Shift, 35, 664);
             Table.States (521).Productions := WisiToken.To_Vector (((271, 0), 
(271, 1)));
             Add_Action (Table.States (521), 35, Reduce, (122, 1), 0, null, 
null);
             Add_Action (Table.States (521), 74, 337);
             Add_Error (Table.States (521));
             Add_Goto (Table.States (521), 122, 665);
-            Set_Minimal_Action (Table.States (521).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (521).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (522).Productions := WisiToken.To_Vector (((304, 0), 
(304, 1)));
             Add_Action (Table.States (522), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (522), 25, Reduce, (246, 2), 0, null, 
null);
@@ -6633,15 +6584,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (522), 319, 113);
             Add_Goto (Table.States (522), 325, 115);
             Add_Goto (Table.States (522), 331, 116);
-            Set_Minimal_Action (Table.States (522).Minimal_Complete_Actions, 
((Shift, 39, 666), (Reduce, 159, 0)));
+            Table.States (522).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (523).Productions := WisiToken.To_Vector ((1 => (276, 
0)));
             Add_Action (Table.States (523), 96, 669);
             Add_Error (Table.States (523));
-            Set_Minimal_Action (Table.States (523).Minimal_Complete_Actions, 
(1 => (Shift, 96, 669)));
+            Table.States (523).Minimal_Complete_Action := (Shift, 96, 669);
             Table.States (524).Productions := WisiToken.To_Vector ((1 => (290, 
0)));
             Add_Action (Table.States (524), 96, 670);
             Add_Error (Table.States (524));
-            Set_Minimal_Action (Table.States (524).Minimal_Complete_Actions, 
(1 => (Shift, 96, 670)));
+            Table.States (524).Minimal_Complete_Action := (Shift, 96, 670);
             Table.States (525).Productions := WisiToken.To_Vector (((194, 0), 
(194, 1)));
             Add_Action (Table.States (525), 7, Reduce, (154, 1), 0, null, 
null);
             Add_Action (Table.States (525), 16, 568);
@@ -6654,11 +6605,11 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (525), 106, Reduce, (154, 1), 0, null, 
null);
             Add_Error (Table.States (525));
             Add_Goto (Table.States (525), 154, 671);
-            Set_Minimal_Action (Table.States (525).Minimal_Complete_Actions, 
(1 => (Reduce, 154, 0)));
+            Table.States (525).Minimal_Complete_Action := (Reduce, 154, 0);
             Table.States (526).Productions := WisiToken.To_Vector ((1 => (196, 
0)));
             Add_Action (Table.States (526), 24, 672);
             Add_Error (Table.States (526));
-            Set_Minimal_Action (Table.States (526).Minimal_Complete_Actions, 
(1 => (Shift, 24, 672)));
+            Table.States (526).Minimal_Complete_Action := (Shift, 24, 672);
             Table.States (527).Productions := WisiToken.To_Vector ((1 => (315, 
0)));
             Add_Action (Table.States (527), 29, Reduce, (246, 2), 0, null, 
null);
             Add_Action (Table.States (527), 40, 12);
@@ -6676,7 +6627,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (527), 264, 89);
             Add_Goto (Table.States (527), 307, 105);
             Add_Goto (Table.States (527), 316, 111);
-            Set_Minimal_Action (Table.States (527).Minimal_Complete_Actions, 
(1 => (Shift, 51, 674)));
+            Table.States (527).Minimal_Complete_Action := (Reduce, 246, 0);
             Table.States (528).Productions := WisiToken.To_Vector (((295, 0), 
(295, 1), (295, 2)));
             Add_Action (Table.States (528), 4, 1);
             Add_Action (Table.States (528), 18, 4);
@@ -6685,24 +6636,23 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (528), 113, 679);
             Add_Goto (Table.States (528), 160, 680);
             Add_Goto (Table.States (528), 161, 533);
-            Set_Minimal_Action (Table.States (528).Minimal_Complete_Actions, 
((Shift, 4, 1), (Shift, 18, 4), (Shift,
-            67, 678)));
+            Table.States (528).Minimal_Complete_Action := (Shift, 67, 678);
             Table.States (529).Productions := WisiToken.To_Vector ((1 => (131, 
0)));
             Add_Action (Table.States (529), (13, 17, 28, 37, 73), (131, 0), 2, 
block_label_0'Access,
             block_label_0_check'Access);
-            Set_Minimal_Action (Table.States (529).Minimal_Complete_Actions, 
(1 => (Reduce, 131, 2)));
+            Table.States (529).Minimal_Complete_Action := (Reduce, 131, 2);
             Table.States (530).Productions := WisiToken.To_Vector ((1 => (299, 
0)));
             Add_Action (Table.States (530), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
26, 27, 28, 31, 32, 37, 41, 43, 48, 52,
             57, 58, 61, 68, 72, 73, 93, 104, 105, 106), (299, 0), 2, null, 
null);
-            Set_Minimal_Action (Table.States (530).Minimal_Complete_Actions, 
(1 => (Reduce, 299, 2)));
+            Table.States (530).Minimal_Complete_Action := (Reduce, 299, 2);
             Table.States (531).Productions := WisiToken.To_Vector ((1 => (152, 
0)));
             Add_Action (Table.States (531), 24, 681);
             Add_Error (Table.States (531));
-            Set_Minimal_Action (Table.States (531).Minimal_Complete_Actions, 
(1 => (Shift, 24, 681)));
+            Table.States (531).Minimal_Complete_Action := (Shift, 24, 681);
             Table.States (532).Productions := WisiToken.To_Vector ((1 => (323, 
0)));
             Add_Action (Table.States (532), 24, 682);
             Add_Error (Table.States (532));
-            Set_Minimal_Action (Table.States (532).Minimal_Complete_Actions, 
(1 => (Shift, 24, 682)));
+            Table.States (532).Minimal_Complete_Action := (Shift, 24, 682);
             Table.States (533).Productions := WisiToken.To_Vector ((1 => (160, 
0)));
             Add_Action (Table.States (533), 4, 1);
             Add_Action (Table.States (533), 5, 2);
@@ -6761,18 +6711,18 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (533), 303, 101);
             Add_Goto (Table.States (533), 306, 363);
             Add_Goto (Table.States (533), 323, 114);
-            Set_Minimal_Action (Table.States (533).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (533).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (534).Productions := WisiToken.To_Vector ((1 => (296, 
0)));
             Add_Action (Table.States (534), (22, 24, 43), (296, 0), 3, 
select_alternative_list_0'Access, null);
-            Set_Minimal_Action (Table.States (534).Minimal_Complete_Actions, 
(1 => (Reduce, 296, 3)));
+            Table.States (534).Minimal_Complete_Action := (Reduce, 296, 3);
             Table.States (535).Productions := WisiToken.To_Vector ((1 => (294, 
0)));
             Add_Action (Table.States (535), 24, 684);
             Add_Error (Table.States (535));
-            Set_Minimal_Action (Table.States (535).Minimal_Complete_Actions, 
(1 => (Shift, 24, 684)));
+            Table.States (535).Minimal_Complete_Action := (Shift, 24, 684);
             Table.States (536).Productions := WisiToken.To_Vector ((1 => (294, 
1)));
             Add_Action (Table.States (536), 96, 685);
             Add_Error (Table.States (536));
-            Set_Minimal_Action (Table.States (536).Minimal_Complete_Actions, 
(1 => (Shift, 96, 685)));
+            Table.States (536).Minimal_Complete_Action := (Shift, 96, 685);
             Table.States (537).Productions := WisiToken.To_Vector ((1 => (126, 
0)));
             Add_Action (Table.States (537), 4, 1);
             Add_Action (Table.States (537), 5, 2);
@@ -6829,28 +6779,28 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (537), 303, 101);
             Add_Goto (Table.States (537), 306, 363);
             Add_Goto (Table.States (537), 323, 114);
-            Set_Minimal_Action (Table.States (537).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (537).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (538).Productions := WisiToken.To_Vector ((1 => (313, 
0)));
             Add_Action (Table.States (538), 74, 337);
             Add_Action (Table.States (538), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (538));
             Add_Goto (Table.States (538), 122, 687);
-            Set_Minimal_Action (Table.States (538).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (538).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (539).Productions := WisiToken.To_Vector ((1 => (317, 
0)));
             Add_Action (Table.States (539), 60, 688);
             Add_Error (Table.States (539));
-            Set_Minimal_Action (Table.States (539).Minimal_Complete_Actions, 
(1 => (Shift, 60, 688)));
+            Table.States (539).Minimal_Complete_Action := (Shift, 60, 688);
             Table.States (540).Productions := WisiToken.To_Vector ((1 => (316, 
0)));
             Add_Action (Table.States (540), 35, 689);
             Add_Error (Table.States (540));
-            Set_Minimal_Action (Table.States (540).Minimal_Complete_Actions, 
(1 => (Shift, 35, 689)));
+            Table.States (540).Minimal_Complete_Action := (Shift, 35, 689);
             Table.States (541).Productions := WisiToken.To_Vector (((319, 0), 
(319, 1), (319, 2)));
             Add_Action (Table.States (541), 35, Reduce, (122, 1), 0, null, 
null);
             Add_Action (Table.States (541), 74, 337);
             Add_Action (Table.States (541), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (541));
             Add_Goto (Table.States (541), 122, 690);
-            Set_Minimal_Action (Table.States (541).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (541).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (542).Productions := WisiToken.To_Vector (((305, 0), 
(305, 1)));
             Add_Action (Table.States (542), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (542), 25, Reduce, (246, 2), 0, null, 
null);
@@ -6925,29 +6875,29 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (542), 319, 113);
             Add_Goto (Table.States (542), 325, 115);
             Add_Goto (Table.States (542), 331, 116);
-            Set_Minimal_Action (Table.States (542).Minimal_Complete_Actions, 
((Shift, 39, 691), (Reduce, 318, 0)));
+            Table.States (542).Minimal_Complete_Action := (Reduce, 318, 0);
             Table.States (543).Productions := WisiToken.To_Vector ((1 => (305, 
2)));
             Add_Action (Table.States (543), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (305, 2), 4,
             single_task_declaration_2'Access, null);
-            Set_Minimal_Action (Table.States (543).Minimal_Complete_Actions, 
(1 => (Reduce, 305, 4)));
+            Table.States (543).Minimal_Complete_Action := (Reduce, 305, 4);
             Table.States (544).Productions := WisiToken.To_Vector ((1 => (169, 
0)));
             Add_Action (Table.States (544), 77, 694);
             Add_Error (Table.States (544));
-            Set_Minimal_Action (Table.States (544).Minimal_Complete_Actions, 
(1 => (Shift, 77, 694)));
+            Table.States (544).Minimal_Complete_Action := (Shift, 77, 694);
             Table.States (545).Productions := WisiToken.To_Vector ((1 => (171, 
1)));
             Add_Action (Table.States (545), (77, 96), (171, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (545).Minimal_Complete_Actions, 
(1 => (Reduce, 171, 1)));
+            Table.States (545).Minimal_Complete_Action := (Reduce, 171, 1);
             Table.States (546).Productions := WisiToken.To_Vector (((169, 1), 
(171, 0)));
             Add_Action (Table.States (546), 77, 695);
             Add_Action (Table.States (546), 96, 696);
             Add_Error (Table.States (546));
-            Set_Minimal_Action (Table.States (546).Minimal_Complete_Actions, 
(1 => (Shift, 77, 695)));
+            Table.States (546).Minimal_Complete_Action := (Shift, 77, 695);
             Table.States (547).Productions := WisiToken.To_Vector (((170, 0), 
(170, 1), (170, 2), (170, 3), (219, 0)));
             Add_Action (Table.States (547), 81, 697);
             Add_Action (Table.States (547), 83, 234);
             Add_Error (Table.States (547));
-            Set_Minimal_Action (Table.States (547).Minimal_Complete_Actions, 
(1 => (Shift, 81, 697)));
+            Table.States (547).Minimal_Complete_Action := (Shift, 81, 697);
             Table.States (548).Productions := WisiToken.To_Vector (((206, 0), 
(223, 0), (259, 0), (260, 0)));
             Add_Action (Table.States (548), 6, 698);
             Add_Action (Table.States (548), 7, Reduce, (241, 1), 0, null, 
null);
@@ -6979,23 +6929,22 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (548), 228, 720);
             Add_Goto (Table.States (548), 241, 721);
             Add_Goto (Table.States (548), 326, 722);
-            Set_Minimal_Action (Table.States (548).Minimal_Complete_Actions, 
((Shift, 34, 702), (Shift, 65, 710),
-            (Reduce, 109, 0), (Reduce, 111, 0)));
+            Table.States (548).Minimal_Complete_Action := (Shift, 38, 704);
             Table.States (549).Productions := WisiToken.To_Vector ((1 => (223, 
1)));
             Add_Action (Table.States (549), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (223, 1), 4,
             incomplete_type_declaration_1'Access, null);
-            Set_Minimal_Action (Table.States (549).Minimal_Complete_Actions, 
(1 => (Reduce, 223, 4)));
+            Table.States (549).Minimal_Complete_Action := (Reduce, 223, 4);
             Table.States (550).Productions := WisiToken.To_Vector (((238, 0), 
(331, 0)));
             Add_Action (Table.States (550), 83, 381);
             Add_Action (Table.States (550), 96, 723);
             Add_Error (Table.States (550));
-            Set_Minimal_Action (Table.States (550).Minimal_Complete_Actions, 
(1 => (Shift, 96, 723)));
+            Table.States (550).Minimal_Complete_Action := (Shift, 96, 723);
             Table.States (551).Productions := WisiToken.To_Vector ((1 => (331, 
1)));
             Add_Action (Table.States (551), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (331, 1), 4,
             use_clause_1'Access, null);
-            Set_Minimal_Action (Table.States (551).Minimal_Complete_Actions, 
(1 => (Reduce, 331, 4)));
+            Table.States (551).Minimal_Complete_Action := (Reduce, 331, 4);
             Table.States (552).Productions := WisiToken.To_Vector (((128, 0), 
(238, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (552), 76, 235);
@@ -7007,8 +6956,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (552));
             Add_Goto (Table.States (552), 115, 241);
             Add_Goto (Table.States (552), 322, 242);
-            Set_Minimal_Action (Table.States (552).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 238, 3)));
+            Table.States (552).Minimal_Complete_Action := (Reduce, 238, 3);
             Table.States (553).Productions := WisiToken.To_Vector ((1 => (245, 
2)));
             Add_Action (Table.States (553), 104, 119);
             Add_Action (Table.States (553), 105, 33);
@@ -7018,10 +6966,10 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (553), 239, 724);
             Add_Goto (Table.States (553), 272, 92);
             Add_Goto (Table.States (553), 293, 97);
-            Set_Minimal_Action (Table.States (553).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (553).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (554).Productions := WisiToken.To_Vector ((1 => (241, 
0)));
             Add_Action (Table.States (554), (7, 21, 35, 56, 74, 77, 82, 96, 
104, 105, 106), (241, 0), 2, null, null);
-            Set_Minimal_Action (Table.States (554).Minimal_Complete_Actions, 
(1 => (Reduce, 241, 2)));
+            Table.States (554).Minimal_Complete_Action := (Reduce, 241, 2);
             Table.States (555).Productions := WisiToken.To_Vector ((1 => (245, 
1)));
             Add_Action (Table.States (555), 104, 119);
             Add_Action (Table.States (555), 105, 33);
@@ -7031,7 +6979,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (555), 239, 725);
             Add_Goto (Table.States (555), 272, 92);
             Add_Goto (Table.States (555), 293, 97);
-            Set_Minimal_Action (Table.States (555).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (555).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (556).Productions := WisiToken.To_Vector (((114, 0), 
(114, 1), (114, 2)));
             Add_Action (Table.States (556), 9, 726);
             Add_Action (Table.States (556), 16, 727);
@@ -7044,7 +6992,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (556));
             Add_Goto (Table.States (556), 208, 729);
             Add_Goto (Table.States (556), 270, 730);
-            Set_Minimal_Action (Table.States (556).Minimal_Complete_Actions, 
((Reduce, 208, 0), (Reduce, 270, 0)));
+            Table.States (556).Minimal_Complete_Action := (Reduce, 270, 0);
             Table.States (557).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (245, 0), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (557), 56, 731);
@@ -7055,14 +7003,13 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (557));
             Add_Goto (Table.States (557), 115, 241);
             Add_Goto (Table.States (557), 322, 242);
-            Set_Minimal_Action (Table.States (557).Minimal_Complete_Actions, 
((Shift, 56, 731), (Shift, 84, 237),
-            (Shift, 102, 240)));
+            Table.States (557).Minimal_Complete_Action := (Shift, 56, 731);
             Table.States (558).Productions := WisiToken.To_Vector ((1 => (133, 
1)));
             Add_Action (Table.States (558), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (558), 104, 149);
             Add_Error (Table.States (558));
             Add_Goto (Table.States (558), 220, 732);
-            Set_Minimal_Action (Table.States (558).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (558).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (559).Productions := WisiToken.To_Vector ((1 => (218, 
0)));
             Add_Action (Table.States (559), 24, Reduce, (189, 1), 0, null, 
null);
             Add_Action (Table.States (559), 48, 16);
@@ -7072,18 +7019,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (559), 188, 735);
             Add_Goto (Table.States (559), 189, 736);
             Add_Goto (Table.States (559), 257, 737);
-            Set_Minimal_Action (Table.States (559).Minimal_Complete_Actions, 
(1 => (Reduce, 189, 0)));
+            Table.States (559).Minimal_Complete_Action := (Reduce, 189, 0);
             Table.States (560).Productions := WisiToken.To_Vector ((1 => (158, 
0)));
             Add_Action (Table.States (560), (13, 24, 25, 28, 29, 30, 40, 46, 
47, 48, 49, 50, 51, 63, 66, 69, 71, 104),
             (158, 0), 2, null, null);
-            Set_Minimal_Action (Table.States (560).Minimal_Complete_Actions, 
(1 => (Reduce, 158, 2)));
+            Table.States (560).Minimal_Complete_Action := (Reduce, 158, 2);
             Table.States (561).Productions := WisiToken.To_Vector ((1 => (158, 
1)));
             Add_Action (Table.States (561), (13, 24, 25, 28, 29, 30, 40, 46, 
47, 48, 49, 50, 51, 63, 66, 69, 71, 104),
             (158, 1), 2, null, null);
-            Set_Minimal_Action (Table.States (561).Minimal_Complete_Actions, 
(1 => (Reduce, 158, 2)));
-         end Subr_10;
-         procedure Subr_11
-         is begin
+            Table.States (561).Minimal_Complete_Action := (Reduce, 158, 2);
             Table.States (562).Productions := WisiToken.To_Vector ((1 => (133, 
0)));
             Add_Action (Table.States (562), 4, 1);
             Add_Action (Table.States (562), 5, 2);
@@ -7142,20 +7086,23 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (562), 303, 101);
             Add_Goto (Table.States (562), 306, 363);
             Add_Goto (Table.States (562), 323, 114);
-            Set_Minimal_Action (Table.States (562).Minimal_Complete_Actions, 
(1 => (Reduce, 218, 0)));
+            Table.States (562).Minimal_Complete_Action := (Reduce, 218, 0);
+         end Subr_10;
+         procedure Subr_11
+         is begin
             Table.States (563).Productions := WisiToken.To_Vector ((1 => (232, 
1)));
             Add_Action (Table.States (563), 37, 739);
             Add_Error (Table.States (563));
-            Set_Minimal_Action (Table.States (563).Minimal_Complete_Actions, 
(1 => (Shift, 37, 739)));
+            Table.States (563).Minimal_Complete_Action := (Shift, 37, 739);
             Table.States (564).Productions := WisiToken.To_Vector ((1 => (232, 
0)));
             Add_Action (Table.States (564), 24, 740);
             Add_Error (Table.States (564));
-            Set_Minimal_Action (Table.States (564).Minimal_Complete_Actions, 
(1 => (Shift, 24, 740)));
+            Table.States (564).Minimal_Complete_Action := (Shift, 24, 740);
             Table.States (565).Productions := WisiToken.To_Vector ((1 => (216, 
0)));
             Add_Action (Table.States (565), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (216, 0), 4,
             generic_subprogram_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (565).Minimal_Complete_Actions, 
(1 => (Reduce, 216, 4)));
+            Table.States (565).Minimal_Complete_Action := (Reduce, 216, 4);
             Table.States (566).Productions := WisiToken.To_Vector ((1 => (157, 
9)));
             Add_Action (Table.States (566), 3, 121);
             Add_Action (Table.States (566), 39, 122);
@@ -7191,15 +7138,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (566), 320, 144);
             Add_Goto (Table.States (566), 321, 145);
             Add_Goto (Table.States (566), 330, 146);
-            Set_Minimal_Action (Table.States (566).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (566).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (567).Productions := WisiToken.To_Vector ((1 => (186, 
0)));
             Add_Action (Table.States (567), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (186, 0), 4,
             exception_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (567).Minimal_Complete_Actions, 
(1 => (Reduce, 186, 4)));
+            Table.States (567).Minimal_Complete_Action := (Reduce, 186, 4);
             Table.States (568).Productions := WisiToken.To_Vector ((1 => (154, 
0)));
             Add_Action (Table.States (568), (7, 11, 21, 40, 74, 82, 96, 104, 
105, 106), (154, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (568).Minimal_Complete_Actions, 
(1 => (Reduce, 154, 1)));
+            Table.States (568).Minimal_Complete_Action := (Reduce, 154, 1);
             Table.States (569).Productions := WisiToken.To_Vector (((244, 0), 
(244, 1), (244, 2), (244, 3), (244, 4),
             (244, 5)));
             Add_Action (Table.States (569), 7, Reduce, (241, 1), 0, null, 
null);
@@ -7217,26 +7164,25 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (569), 272, 92);
             Add_Goto (Table.States (569), 293, 97);
             Add_Goto (Table.States (569), 314, 745);
-            Set_Minimal_Action (Table.States (569).Minimal_Complete_Actions, 
((Shift, 11, 699), (Shift, 105, 33),
-            (Reduce, 241, 0)));
+            Table.States (569).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (570).Productions := WisiToken.To_Vector ((1 => (115, 
0)));
             Add_Action (Table.States (570), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (115, 0), 3,
             actual_parameter_part_0'Access, null);
-            Set_Minimal_Action (Table.States (570).Minimal_Complete_Actions, 
(1 => (Reduce, 115, 3)));
+            Table.States (570).Minimal_Complete_Action := (Reduce, 115, 3);
             Table.States (571).Productions := WisiToken.To_Vector ((1 => (115, 
1)));
             Add_Action (Table.States (571), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (115, 1), 3,
             actual_parameter_part_1'Access, null);
-            Set_Minimal_Action (Table.States (571).Minimal_Complete_Actions, 
(1 => (Reduce, 115, 3)));
+            Table.States (571).Minimal_Complete_Action := (Reduce, 115, 3);
             Table.States (572).Productions := WisiToken.To_Vector ((1 => (239, 
0)));
             Add_Action (Table.States (572), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (239, 0), 4, name_0'Access,
             null);
-            Set_Minimal_Action (Table.States (572).Minimal_Complete_Actions, 
(1 => (Reduce, 239, 4)));
+            Table.States (572).Minimal_Complete_Action := (Reduce, 239, 4);
             Table.States (573).Productions := WisiToken.To_Vector ((1 => (278, 
0)));
             Add_Action (Table.States (573), 3, 121);
             Add_Action (Table.States (573), 39, 122);
@@ -7262,12 +7208,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (573), 320, 144);
             Add_Goto (Table.States (573), 321, 145);
             Add_Goto (Table.States (573), 330, 146);
-            Set_Minimal_Action (Table.States (573).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (573).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (574).Productions := WisiToken.To_Vector ((1 => (123, 
0)));
             Add_Action (Table.States (574), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (123, 0), 4, assignment_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (574).Minimal_Complete_Actions, 
(1 => (Reduce, 123, 4)));
+            Table.States (574).Minimal_Complete_Action := (Reduce, 123, 4);
             Table.States (575).Productions := WisiToken.To_Vector (((179, 0), 
(199, 0)));
             Add_Action (Table.States (575), 3, 121);
             Add_Action (Table.States (575), 39, 122);
@@ -7300,21 +7246,21 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (575), 320, 144);
             Add_Goto (Table.States (575), 321, 145);
             Add_Goto (Table.States (575), 330, 146);
-            Set_Minimal_Action (Table.States (575).Minimal_Complete_Actions, 
((Shift, 105, 33), (Reduce, 255, 0)));
+            Table.States (575).Minimal_Complete_Action := (Reduce, 255, 0);
             Table.States (576).Productions := WisiToken.To_Vector ((1 => (179, 
1)));
             Add_Action (Table.States (576), 74, 337);
             Add_Action (Table.States (576), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (576));
             Add_Goto (Table.States (576), 122, 748);
-            Set_Minimal_Action (Table.States (576).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (576).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (577).Productions := WisiToken.To_Vector ((1 => (213, 
2)));
             Add_Action (Table.States (577), 39, 749);
             Add_Error (Table.States (577));
-            Set_Minimal_Action (Table.States (577).Minimal_Complete_Actions, 
(1 => (Shift, 39, 749)));
+            Table.States (577).Minimal_Complete_Action := (Shift, 39, 749);
             Table.States (578).Productions := WisiToken.To_Vector ((1 => (213, 
1)));
             Add_Action (Table.States (578), 39, 750);
             Add_Error (Table.States (578));
-            Set_Minimal_Action (Table.States (578).Minimal_Complete_Actions, 
(1 => (Shift, 39, 750)));
+            Table.States (578).Minimal_Complete_Action := (Shift, 39, 750);
             Table.States (579).Productions := WisiToken.To_Vector (((256, 0), 
(256, 1), (256, 2)));
             Add_Action (Table.States (579), 3, 121);
             Add_Action (Table.States (579), 15, 258);
@@ -7366,32 +7312,31 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (579), 320, 144);
             Add_Goto (Table.States (579), 321, 145);
             Add_Goto (Table.States (579), 330, 146);
-            Set_Minimal_Action (Table.States (579).Minimal_Complete_Actions, 
((Shift, 32, 260), (Reduce, 125, 0),
-            (Reduce, 192, 0)));
+            Table.States (579).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (580).Productions := WisiToken.To_Vector ((1 => (193, 
0)));
             Add_Action (Table.States (580), 74, 337);
             Add_Action (Table.States (580), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (580));
             Add_Goto (Table.States (580), 122, 754);
-            Set_Minimal_Action (Table.States (580).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (580).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (581).Productions := WisiToken.To_Vector ((1 => (243, 
0)));
             Add_Action (Table.States (581), 74, 337);
             Add_Action (Table.States (581), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (581));
             Add_Goto (Table.States (581), 122, 755);
-            Set_Minimal_Action (Table.States (581).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (581).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (582).Productions := WisiToken.To_Vector ((1 => (112, 
0)));
             Add_Action (Table.States (582), 74, 337);
             Add_Action (Table.States (582), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (582));
             Add_Goto (Table.States (582), 122, 756);
-            Set_Minimal_Action (Table.States (582).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (582).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (583).Productions := WisiToken.To_Vector ((1 => (308, 
0)));
             Add_Action (Table.States (583), 74, 337);
             Add_Action (Table.States (583), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (583));
             Add_Goto (Table.States (583), 122, 757);
-            Set_Minimal_Action (Table.States (583).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (583).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (584).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (272, 0), (293, 0),
             (293, 1), (293, 2), (293, 3), (311, 0)));
             Add_Action (Table.States (584), 74, 337);
@@ -7404,8 +7349,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (584), 115, 241);
             Add_Goto (Table.States (584), 122, 758);
             Add_Goto (Table.States (584), 322, 242);
-            Set_Minimal_Action (Table.States (584).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (584).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (585).Productions := WisiToken.To_Vector ((1 => (307, 
0)));
             Add_Action (Table.States (585), 13, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (585), 25, Reduce, (246, 2), 0, null, 
null);
@@ -7477,12 +7421,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (585), 319, 113);
             Add_Goto (Table.States (585), 325, 115);
             Add_Goto (Table.States (585), 331, 116);
-            Set_Minimal_Action (Table.States (585).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (585).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (586).Productions := WisiToken.To_Vector ((1 => (309, 
0)));
             Add_Action (Table.States (586), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (309, 0), 4,
             subprogram_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (586).Minimal_Complete_Actions, 
(1 => (Reduce, 309, 4)));
+            Table.States (586).Minimal_Complete_Action := (Reduce, 309, 4);
             Table.States (587).Productions := WisiToken.To_Vector ((1 => (113, 
0)));
             Add_Action (Table.States (587), 4, 1);
             Add_Action (Table.States (587), 5, 2);
@@ -7541,26 +7485,26 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (587), 303, 101);
             Add_Goto (Table.States (587), 306, 363);
             Add_Goto (Table.States (587), 323, 114);
-            Set_Minimal_Action (Table.States (587).Minimal_Complete_Actions, 
(1 => (Reduce, 218, 0)));
+            Table.States (587).Minimal_Complete_Action := (Reduce, 218, 0);
             Table.States (588).Productions := WisiToken.To_Vector ((1 => (113, 
1)));
             Add_Action (Table.States (588), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (113, 1), 5, accept_statement_1'Access, null);
-            Set_Minimal_Action (Table.States (588).Minimal_Complete_Actions, 
(1 => (Reduce, 113, 5)));
+            Table.States (588).Minimal_Complete_Action := (Reduce, 113, 5);
             Table.States (589).Productions := WisiToken.To_Vector ((1 => (275, 
0)));
             Add_Action (Table.States (589), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (275,
             0), 4, raise_expression_0'Access, null);
-            Set_Minimal_Action (Table.States (589).Minimal_Complete_Actions, 
(1 => (Reduce, 275, 4)));
+            Table.States (589).Minimal_Complete_Action := (Reduce, 275, 4);
             Table.States (590).Productions := WisiToken.To_Vector ((1 => (136, 
0)));
             Add_Action (Table.States (590), 72, 761);
             Add_Error (Table.States (590));
             Add_Goto (Table.States (590), 137, 762);
             Add_Goto (Table.States (590), 138, 763);
-            Set_Minimal_Action (Table.States (590).Minimal_Complete_Actions, 
(1 => (Shift, 72, 761)));
+            Table.States (590).Minimal_Complete_Action := (Shift, 72, 761);
             Table.States (591).Productions := WisiToken.To_Vector ((1 => (273, 
0)));
             Add_Action (Table.States (591), 87, 764);
             Add_Error (Table.States (591));
-            Set_Minimal_Action (Table.States (591).Minimal_Complete_Actions, 
(1 => (Shift, 87, 764)));
+            Table.States (591).Minimal_Complete_Action := (Shift, 87, 764);
             Table.States (592).Productions := WisiToken.To_Vector (((221, 0), 
(221, 1), (221, 2), (221, 3)));
             Add_Action (Table.States (592), 3, 121);
             Add_Action (Table.States (592), 22, Reduce, (192, 1), 0, null, 
null);
@@ -7598,7 +7542,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (592), 320, 144);
             Add_Goto (Table.States (592), 321, 145);
             Add_Goto (Table.States (592), 330, 146);
-            Set_Minimal_Action (Table.States (592).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (592).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (593).Productions := WisiToken.To_Vector (((128, 0), 
(165, 1), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (593), 76, 235);
@@ -7610,34 +7554,33 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (593));
             Add_Goto (Table.States (593), 115, 241);
             Add_Goto (Table.States (593), 322, 242);
-            Set_Minimal_Action (Table.States (593).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 165, 3)));
+            Table.States (593).Minimal_Complete_Action := (Reduce, 165, 3);
             Table.States (594).Productions := WisiToken.To_Vector ((1 => (117, 
2)));
             Add_Action (Table.States (594), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (117, 2), 4, null, null);
-            Set_Minimal_Action (Table.States (594).Minimal_Complete_Actions, 
(1 => (Reduce, 117, 4)));
+            Table.States (594).Minimal_Complete_Action := (Reduce, 117, 4);
             Table.States (595).Productions := WisiToken.To_Vector ((1 => (124, 
1)));
             Add_Action (Table.States (595), (35, 77, 83, 96), (124, 1), 3, 
null, null);
-            Set_Minimal_Action (Table.States (595).Minimal_Complete_Actions, 
(1 => (Reduce, 124, 3)));
+            Table.States (595).Minimal_Complete_Action := (Reduce, 124, 3);
             Table.States (596).Productions := WisiToken.To_Vector ((1 => (124, 
0)));
             Add_Action (Table.States (596), (35, 77, 83, 96), (124, 0), 3, 
association_opt_0'Access, null);
-            Set_Minimal_Action (Table.States (596).Minimal_Complete_Actions, 
(1 => (Reduce, 124, 3)));
+            Table.States (596).Minimal_Complete_Action := (Reduce, 124, 3);
             Table.States (597).Productions := WisiToken.To_Vector ((1 => (125, 
0)));
             Add_Action (Table.States (597), (35, 77, 83, 96), (125, 0), 3, 
null, null);
-            Set_Minimal_Action (Table.States (597).Minimal_Complete_Actions, 
(1 => (Reduce, 125, 3)));
+            Table.States (597).Minimal_Complete_Action := (Reduce, 125, 3);
             Table.States (598).Productions := WisiToken.To_Vector ((1 => (166, 
0)));
             Add_Action (Table.States (598), (79, 87), (166, 0), 3, null, null);
-            Set_Minimal_Action (Table.States (598).Minimal_Complete_Actions, 
(1 => (Reduce, 166, 3)));
+            Table.States (598).Minimal_Complete_Action := (Reduce, 166, 3);
             Table.States (599).Productions := WisiToken.To_Vector ((1 => (165, 
0)));
             Add_Action (Table.States (599), (79, 87), (165, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (599).Minimal_Complete_Actions, 
(1 => (Reduce, 165, 1)));
+            Table.States (599).Minimal_Complete_Action := (Reduce, 165, 1);
             Table.States (600).Productions := WisiToken.To_Vector ((1 => (124, 
3)));
             Add_Action (Table.States (600), (35, 77, 83, 96), (124, 3), 3, 
association_opt_3'Access, null);
-            Set_Minimal_Action (Table.States (600).Minimal_Complete_Actions, 
(1 => (Reduce, 124, 3)));
+            Table.States (600).Minimal_Complete_Action := (Reduce, 124, 3);
             Table.States (601).Productions := WisiToken.To_Vector ((1 => (124, 
2)));
             Add_Action (Table.States (601), (35, 77, 83, 96), (124, 2), 3, 
association_opt_2'Access, null);
-            Set_Minimal_Action (Table.States (601).Minimal_Complete_Actions, 
(1 => (Reduce, 124, 3)));
+            Table.States (601).Minimal_Complete_Action := (Reduce, 124, 3);
             Table.States (602).Productions := WisiToken.To_Vector (((117, 0), 
(258, 1)));
             Add_Action (Table.States (602), 10, Reduce, (258, 1), 1, null, 
null);
             Add_Action (Table.States (602), 33, Reduce, (258, 1), 1, null, 
null);
@@ -7665,12 +7608,12 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (602), 99, Reduce, (258, 1), 1, null, 
null);
             Add_Action (Table.States (602), 100, Reduce, (258, 1), 1, null, 
null);
             Add_Error (Table.States (602));
-            Set_Minimal_Action (Table.States (602).Minimal_Complete_Actions, 
((Shift, 54, 766), (Reduce, 258, 1)));
+            Table.States (602).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (603).Productions := WisiToken.To_Vector (((117, 1), 
(125, 0)));
             Add_Action (Table.States (603), 77, 767);
             Add_Action (Table.States (603), 83, 443);
             Add_Error (Table.States (603));
-            Set_Minimal_Action (Table.States (603).Minimal_Complete_Actions, 
(1 => (Shift, 77, 767)));
+            Table.States (603).Minimal_Complete_Action := (Shift, 77, 767);
             Table.States (604).Productions := WisiToken.To_Vector (((277, 0), 
(277, 1)));
             Add_Action (Table.States (604), 10, Reduce, (277, 1), 3, null, 
null);
             Add_Action (Table.States (604), 20, Reduce, (277, 1), 3, null, 
null);
@@ -7693,39 +7636,39 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (604), 87, Reduce, (277, 1), 3, null, 
null);
             Add_Action (Table.States (604), 96, Reduce, (277, 1), 3, null, 
null);
             Add_Error (Table.States (604));
-            Set_Minimal_Action (Table.States (604).Minimal_Complete_Actions, 
(1 => (Reduce, 277, 3)));
+            Table.States (604).Minimal_Complete_Action := (Reduce, 277, 3);
             Table.States (605).Productions := WisiToken.To_Vector ((1 => (277, 
2)));
             Add_Action (Table.States (605), (10, 20, 21, 22, 23, 35, 37, 42, 
43, 53, 68, 74, 75, 77, 79, 82, 83, 87,
             96), (277, 2), 3, null, null);
-            Set_Minimal_Action (Table.States (605).Minimal_Complete_Actions, 
(1 => (Reduce, 277, 3)));
+            Table.States (605).Minimal_Complete_Action := (Reduce, 277, 3);
             Table.States (606).Productions := WisiToken.To_Vector (((140, 0), 
(166, 0)));
             Add_Action (Table.States (606), 79, 445);
             Add_Action (Table.States (606), 87, 769);
             Add_Error (Table.States (606));
-            Set_Minimal_Action (Table.States (606).Minimal_Complete_Actions, 
(1 => (Shift, 87, 769)));
+            Table.States (606).Minimal_Complete_Action := (Shift, 87, 769);
             Table.States (607).Productions := WisiToken.To_Vector ((1 => (139, 
0)));
             Add_Action (Table.States (607), 15, 770);
             Add_Error (Table.States (607));
-            Set_Minimal_Action (Table.States (607).Minimal_Complete_Actions, 
(1 => (Shift, 15, 770)));
+            Table.States (607).Minimal_Complete_Action := (Shift, 15, 770);
             Table.States (608).Productions := WisiToken.To_Vector ((1 => (141, 
0)));
             Add_Action (Table.States (608), (24, 72), (141, 0), 2, null, null);
-            Set_Minimal_Action (Table.States (608).Minimal_Complete_Actions, 
(1 => (Reduce, 141, 2)));
+            Table.States (608).Minimal_Complete_Action := (Reduce, 141, 2);
             Table.States (609).Productions := WisiToken.To_Vector ((1 => (283, 
0)));
             Add_Action (Table.States (609), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (283,
             0), 4, null, null);
-            Set_Minimal_Action (Table.States (609).Minimal_Complete_Actions, 
(1 => (Reduce, 283, 4)));
+            Table.States (609).Minimal_Complete_Action := (Reduce, 283, 4);
             Table.States (610).Productions := WisiToken.To_Vector ((1 => (285, 
0)));
             Add_Action (Table.States (610), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (285,
             0), 4, null, null);
-            Set_Minimal_Action (Table.States (610).Minimal_Complete_Actions, 
(1 => (Reduce, 285, 4)));
+            Table.States (610).Minimal_Complete_Action := (Reduce, 285, 4);
             Table.States (611).Productions := WisiToken.To_Vector ((1 => (283, 
1)));
             Add_Action (Table.States (611), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (283,
             1), 4, null, null);
-            Set_Minimal_Action (Table.States (611).Minimal_Complete_Actions, 
(1 => (Reduce, 283, 4)));
+            Table.States (611).Minimal_Complete_Action := (Reduce, 283, 4);
             Table.States (612).Productions := WisiToken.To_Vector ((1 => (285, 
1)));
             Add_Action (Table.States (612), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (285,
             1), 4, null, null);
-            Set_Minimal_Action (Table.States (612).Minimal_Complete_Actions, 
(1 => (Reduce, 285, 4)));
+            Table.States (612).Minimal_Complete_Action := (Reduce, 285, 4);
             Table.States (613).Productions := WisiToken.To_Vector ((1 => (233, 
0)));
             Add_Action (Table.States (613), 3, 121);
             Add_Action (Table.States (613), 39, 122);
@@ -7752,7 +7695,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (613), 320, 144);
             Add_Goto (Table.States (613), 321, 145);
             Add_Goto (Table.States (613), 330, 146);
-            Set_Minimal_Action (Table.States (613).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (613).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (614).Productions := WisiToken.To_Vector (((233, 0), 
(287, 0)));
             Add_Action (Table.States (614), 10, Reduce, (287, 0), 4, null, 
null);
             Add_Action (Table.States (614), 20, Reduce, (287, 0), 4, null, 
null);
@@ -7772,12 +7715,12 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (614), 87, Reduce, (287, 0), 4, null, 
null);
             Add_Action (Table.States (614), 96, Reduce, (287, 0), 4, null, 
null);
             Add_Error (Table.States (614));
-            Set_Minimal_Action (Table.States (614).Minimal_Complete_Actions, 
(1 => (Reduce, 287, 4)));
+            Table.States (614).Minimal_Complete_Action := (Reduce, 287, 4);
             Table.States (615).Productions := WisiToken.To_Vector ((1 => (190, 
0)));
             Add_Action (Table.States (615), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (190, 0), 5, exit_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (615).Minimal_Complete_Actions, 
(1 => (Reduce, 190, 5)));
+            Table.States (615).Minimal_Complete_Action := (Reduce, 190, 5);
             Table.States (616).Productions := WisiToken.To_Vector (((258, 1), 
(314, 0), (314, 1)));
             Add_Action (Table.States (616), 38, Reduce, (258, 1), 1, null, 
null);
             Add_Action (Table.States (616), 55, Reduce, (258, 1), 1, null, 
null);
@@ -7795,13 +7738,10 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (616), 239, 772);
             Add_Goto (Table.States (616), 272, 92);
             Add_Goto (Table.States (616), 293, 97);
-            Set_Minimal_Action (Table.States (616).Minimal_Complete_Actions, 
((Shift, 105, 33), (Reduce, 258, 1)));
-         end Subr_11;
-         procedure Subr_12
-         is begin
+            Table.States (616).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (617).Productions := WisiToken.To_Vector ((1 => (230, 
2)));
             Add_Action (Table.States (617), (37, 87), (230, 2), 4, 
iterator_specification_2'Access, null);
-            Set_Minimal_Action (Table.States (617).Minimal_Complete_Actions, 
(1 => (Reduce, 230, 4)));
+            Table.States (617).Minimal_Complete_Action := (Reduce, 230, 4);
             Table.States (618).Productions := WisiToken.To_Vector ((1 => (155, 
0)));
             Add_Action (Table.States (618), 3, 121);
             Add_Action (Table.States (618), 39, 122);
@@ -7827,7 +7767,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (618), 320, 144);
             Add_Goto (Table.States (618), 321, 145);
             Add_Goto (Table.States (618), 330, 146);
-            Set_Minimal_Action (Table.States (618).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (618).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (619).Productions := WisiToken.To_Vector (((115, 0), 
(115, 1), (224, 0), (239, 0)));
             Add_Action (Table.States (619), 3, 121);
             Add_Action (Table.States (619), 15, 258);
@@ -7882,15 +7822,17 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (619), 320, 144);
             Add_Goto (Table.States (619), 321, 145);
             Add_Goto (Table.States (619), 330, 146);
-            Set_Minimal_Action (Table.States (619).Minimal_Complete_Actions, 
((Shift, 32, 260), (Shift, 105, 33),
-            (Reduce, 125, 0)));
+            Table.States (619).Minimal_Complete_Action := (Reduce, 125, 0);
+         end Subr_11;
+         procedure Subr_12
+         is begin
             Table.States (620).Productions := WisiToken.To_Vector ((1 => (314, 
2)));
             Add_Action (Table.States (620), (10, 21, 37, 42, 74, 77, 82, 83, 
87, 96), (314, 2), 2,
             subtype_indication_2'Access, null);
-            Set_Minimal_Action (Table.States (620).Minimal_Complete_Actions, 
(1 => (Reduce, 314, 2)));
+            Table.States (620).Minimal_Complete_Action := (Reduce, 314, 2);
             Table.States (621).Productions := WisiToken.To_Vector ((1 => (155, 
1)));
             Add_Action (Table.States (621), (10, 21, 37, 42, 74, 77, 82, 83, 
87, 96), (155, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (621).Minimal_Complete_Actions, 
(1 => (Reduce, 155, 1)));
+            Table.States (621).Minimal_Complete_Action := (Reduce, 155, 1);
             Table.States (622).Productions := WisiToken.To_Vector (((128, 0), 
(230, 3), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (622), 37, Reduce, (230, 3), 4, null, 
null);
@@ -7902,8 +7844,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (622));
             Add_Goto (Table.States (622), 115, 241);
             Add_Goto (Table.States (622), 322, 242);
-            Set_Minimal_Action (Table.States (622).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 230, 4)));
+            Table.States (622).Minimal_Complete_Action := (Reduce, 230, 4);
             Table.States (623).Productions := WisiToken.To_Vector (((314, 0), 
(314, 1)));
             Add_Action (Table.States (623), 104, 119);
             Add_Action (Table.States (623), 105, 33);
@@ -7913,7 +7854,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (623), 239, 772);
             Add_Goto (Table.States (623), 272, 92);
             Add_Goto (Table.States (623), 293, 97);
-            Set_Minimal_Action (Table.States (623).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (623).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (624).Productions := WisiToken.To_Vector (((230, 0), 
(230, 1)));
             Add_Action (Table.States (624), 59, 778);
             Add_Action (Table.States (624), 104, 119);
@@ -7924,31 +7865,31 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (624), 239, 779);
             Add_Goto (Table.States (624), 272, 92);
             Add_Goto (Table.States (624), 293, 97);
-            Set_Minimal_Action (Table.States (624).Minimal_Complete_Actions, 
((Shift, 59, 778), (Shift, 105, 33)));
+            Table.States (624).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (625).Productions := WisiToken.To_Vector ((1 => (121, 
0)));
             Add_Action (Table.States (625), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 72, 73, 
74, 93, 104, 105, 106, 107), (121, 0), 5,
             aspect_clause_0'Access, null);
-            Set_Minimal_Action (Table.States (625).Minimal_Complete_Actions, 
(1 => (Reduce, 121, 5)));
+            Table.States (625).Minimal_Complete_Action := (Reduce, 121, 5);
             Table.States (626).Productions := WisiToken.To_Vector ((1 => (127, 
0)));
             Add_Action (Table.States (626), 96, 780);
             Add_Error (Table.States (626));
-            Set_Minimal_Action (Table.States (626).Minimal_Complete_Actions, 
(1 => (Shift, 96, 780)));
+            Table.States (626).Minimal_Complete_Action := (Shift, 96, 780);
             Table.States (627).Productions := WisiToken.To_Vector ((1 => (235, 
0)));
             Add_Action (Table.States (627), 38, 781);
             Add_Error (Table.States (627));
-            Set_Minimal_Action (Table.States (627).Minimal_Complete_Actions, 
(1 => (Shift, 38, 781)));
+            Table.States (627).Minimal_Complete_Action := (Shift, 38, 781);
             Table.States (628).Productions := WisiToken.To_Vector ((1 => (281, 
0)));
             Add_Action (Table.States (628), 104, 782);
             Add_Error (Table.States (628));
             Add_Goto (Table.States (628), 144, 783);
             Add_Goto (Table.States (628), 145, 784);
-            Set_Minimal_Action (Table.States (628).Minimal_Complete_Actions, 
(1 => (Shift, 104, 782)));
+            Table.States (628).Minimal_Complete_Action := (Shift, 104, 782);
             Table.States (629).Productions := WisiToken.To_Vector ((1 => (182, 
0)));
             Add_Action (Table.States (629), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 72, 73, 
74, 93, 104, 105, 106, 107), (182, 0), 5,
             enumeration_representation_clause_0'Access, null);
-            Set_Minimal_Action (Table.States (629).Minimal_Complete_Actions, 
(1 => (Reduce, 182, 5)));
+            Table.States (629).Minimal_Complete_Action := (Reduce, 182, 5);
             Table.States (630).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (240, 0), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (630), 21, Reduce, (240, 0), 1, null, 
name_opt_0_check'Access);
@@ -7965,11 +7906,10 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (630));
             Add_Goto (Table.States (630), 115, 241);
             Add_Goto (Table.States (630), 322, 242);
-            Set_Minimal_Action (Table.States (630).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 240, 1)));
+            Table.States (630).Minimal_Complete_Action := (Reduce, 240, 1);
             Table.States (631).Productions := WisiToken.To_Vector ((1 => (291, 
0)));
             Add_Action (Table.States (631), (21, 35, 56, 74, 77, 82, 96), 
(291, 0), 3, result_profile_0'Access, null);
-            Set_Minimal_Action (Table.States (631).Minimal_Complete_Actions, 
(1 => (Reduce, 291, 3)));
+            Table.States (631).Minimal_Complete_Action := (Reduce, 291, 3);
             Table.States (632).Productions := WisiToken.To_Vector (((254, 0), 
(254, 1), (254, 2), (254, 3)));
             Add_Action (Table.States (632), 7, Reduce, (118, 1), 0, null, 
null);
             Add_Action (Table.States (632), 8, 401);
@@ -7984,11 +7924,11 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (632), 106, Reduce, (118, 1), 0, null, 
null);
             Add_Error (Table.States (632));
             Add_Goto (Table.States (632), 118, 785);
-            Set_Minimal_Action (Table.States (632).Minimal_Complete_Actions, 
(1 => (Reduce, 118, 0)));
+            Table.States (632).Minimal_Complete_Action := (Reduce, 118, 0);
             Table.States (633).Productions := WisiToken.To_Vector ((1 => (199, 
0)));
             Add_Action (Table.States (633), (21, 35, 56, 58, 72, 74, 77, 82, 
96), (199, 0), 3, formal_part_0'Access,
             null);
-            Set_Minimal_Action (Table.States (633).Minimal_Complete_Actions, 
(1 => (Reduce, 199, 3)));
+            Table.States (633).Minimal_Complete_Action := (Reduce, 199, 3);
             Table.States (634).Productions := WisiToken.To_Vector ((1 => (255, 
0)));
             Add_Action (Table.States (634), 77, Reduce, (254, 4), 0, null, 
null);
             Add_Action (Table.States (634), 96, Reduce, (254, 4), 0, null, 
null);
@@ -7996,7 +7936,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (634));
             Add_Goto (Table.States (634), 219, 493);
             Add_Goto (Table.States (634), 254, 786);
-            Set_Minimal_Action (Table.States (634).Minimal_Complete_Actions, 
(1 => (Reduce, 254, 0)));
+            Table.States (634).Minimal_Complete_Action := (Reduce, 254, 0);
             Table.States (635).Productions := WisiToken.To_Vector (((128, 0), 
(215, 2), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (635), 74, 337);
@@ -8009,8 +7949,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (635), 115, 241);
             Add_Goto (Table.States (635), 122, 787);
             Add_Goto (Table.States (635), 322, 242);
-            Set_Minimal_Action (Table.States (635).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (635).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (636).Productions := WisiToken.To_Vector (((128, 0), 
(215, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (636), 74, 337);
@@ -8023,8 +7962,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (636), 115, 241);
             Add_Goto (Table.States (636), 122, 788);
             Add_Goto (Table.States (636), 322, 242);
-            Set_Minimal_Action (Table.States (636).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (636).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (637).Productions := WisiToken.To_Vector (((128, 0), 
(215, 1), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (637), 74, 337);
@@ -8037,8 +7975,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (637), 115, 241);
             Add_Goto (Table.States (637), 122, 789);
             Add_Goto (Table.States (637), 322, 242);
-            Set_Minimal_Action (Table.States (637).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (637).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (638).Productions := WisiToken.To_Vector (((201, 0), 
(201, 1)));
             Add_Action (Table.States (638), 6, 790);
             Add_Action (Table.States (638), 7, Reduce, (241, 1), 0, null, 
null);
@@ -8066,15 +8003,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (638), 203, 803);
             Add_Goto (Table.States (638), 228, 804);
             Add_Goto (Table.States (638), 241, 721);
-            Set_Minimal_Action (Table.States (638).Minimal_Complete_Actions, 
((Shift, 34, 702), (Shift, 65, 796)));
+            Table.States (638).Minimal_Complete_Action := (Reduce, 111, 0);
             Table.States (639).Productions := WisiToken.To_Vector ((1 => (201, 
2)));
             Add_Action (Table.States (639), 96, 805);
             Add_Error (Table.States (639));
-            Set_Minimal_Action (Table.States (639).Minimal_Complete_Actions, 
(1 => (Shift, 96, 805)));
+            Table.States (639).Minimal_Complete_Action := (Shift, 96, 805);
             Table.States (640).Productions := WisiToken.To_Vector ((1 => (204, 
0)));
             Add_Action (Table.States (640), 39, 806);
             Add_Error (Table.States (640));
-            Set_Minimal_Action (Table.States (640).Minimal_Complete_Actions, 
(1 => (Shift, 39, 806)));
+            Table.States (640).Minimal_Complete_Action := (Shift, 39, 806);
             Table.States (641).Productions := WisiToken.To_Vector (((200, 0), 
(200, 2)));
             Add_Action (Table.States (641), 41, 642);
             Add_Action (Table.States (641), 74, 337);
@@ -8090,13 +8027,13 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (641), 272, 92);
             Add_Goto (Table.States (641), 293, 97);
             Add_Goto (Table.States (641), 310, 808);
-            Set_Minimal_Action (Table.States (641).Minimal_Complete_Actions, 
((Shift, 41, 642), (Reduce, 122, 0)));
+            Table.States (641).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (642).Productions := WisiToken.To_Vector ((1 => (310, 
2)));
             Add_Action (Table.States (642), (74, 96), (310, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (642).Minimal_Complete_Actions, 
(1 => (Reduce, 310, 1)));
+            Table.States (642).Minimal_Complete_Action := (Reduce, 310, 1);
             Table.States (643).Productions := WisiToken.To_Vector ((1 => (310, 
1)));
             Add_Action (Table.States (643), (74, 96), (310, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (643).Minimal_Complete_Actions, 
(1 => (Reduce, 310, 1)));
+            Table.States (643).Minimal_Complete_Action := (Reduce, 310, 1);
             Table.States (644).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (272, 0), (293, 0),
             (293, 1), (293, 2), (293, 3), (310, 0)));
             Add_Action (Table.States (644), 74, Reduce, (310, 0), 1, 
subprogram_default_0'Access, null);
@@ -8108,28 +8045,27 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (644));
             Add_Goto (Table.States (644), 115, 241);
             Add_Goto (Table.States (644), 322, 242);
-            Set_Minimal_Action (Table.States (644).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 310, 1)));
+            Table.States (644).Minimal_Complete_Action := (Reduce, 310, 1);
             Table.States (645).Productions := WisiToken.To_Vector ((1 => (200, 
1)));
             Add_Action (Table.States (645), 74, 337);
             Add_Action (Table.States (645), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (645));
             Add_Goto (Table.States (645), 122, 809);
-            Set_Minimal_Action (Table.States (645).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (645).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (646).Productions := WisiToken.To_Vector ((1 => (200, 
3)));
             Add_Action (Table.States (646), (29, 47, 48, 50, 69, 71, 74, 104), 
(200, 3), 4,
             formal_subprogram_declaration_3'Access, null);
-            Set_Minimal_Action (Table.States (646).Minimal_Complete_Actions, 
(1 => (Reduce, 200, 4)));
+            Table.States (646).Minimal_Complete_Action := (Reduce, 200, 4);
             Table.States (647).Productions := WisiToken.To_Vector ((1 => (236, 
1)));
             Add_Action (Table.States (647), (7, 40, 74, 82, 96, 104, 105, 
106), (236, 1), 2, null, null);
-            Set_Minimal_Action (Table.States (647).Minimal_Complete_Actions, 
(1 => (Reduce, 236, 2)));
+            Table.States (647).Minimal_Complete_Action := (Reduce, 236, 2);
             Table.States (648).Productions := WisiToken.To_Vector (((198, 1), 
(198, 3)));
             Add_Action (Table.States (648), 74, 337);
             Add_Action (Table.States (648), 82, 810);
             Add_Action (Table.States (648), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (648));
             Add_Goto (Table.States (648), 122, 811);
-            Set_Minimal_Action (Table.States (648).Minimal_Complete_Actions, 
((Shift, 82, 810), (Reduce, 122, 0)));
+            Table.States (648).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (649).Productions := WisiToken.To_Vector (((114, 0), 
(114, 1), (114, 2), (198, 0), (198, 2)));
             Add_Action (Table.States (649), 7, 556);
             Add_Action (Table.States (649), 104, 119);
@@ -8140,7 +8076,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (649), 239, 812);
             Add_Goto (Table.States (649), 272, 92);
             Add_Goto (Table.States (649), 293, 97);
-            Set_Minimal_Action (Table.States (649).Minimal_Complete_Actions, 
((Shift, 7, 556), (Shift, 105, 33)));
+            Table.States (649).Minimal_Complete_Action := (Shift, 7, 556);
             Table.States (650).Productions := WisiToken.To_Vector ((1 => (222, 
1)));
             Add_Action (Table.States (650), 4, 1);
             Add_Action (Table.States (650), 5, 2);
@@ -8197,7 +8133,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (650), 303, 101);
             Add_Goto (Table.States (650), 306, 363);
             Add_Goto (Table.States (650), 323, 114);
-            Set_Minimal_Action (Table.States (650).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (650).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (651).Productions := WisiToken.To_Vector ((1 => (174, 
0)));
             Add_Action (Table.States (651), 3, 121);
             Add_Action (Table.States (651), 39, 122);
@@ -8233,32 +8169,32 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (651), 320, 144);
             Add_Goto (Table.States (651), 321, 145);
             Add_Goto (Table.States (651), 330, 146);
-            Set_Minimal_Action (Table.States (651).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (651).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (652).Productions := WisiToken.To_Vector ((1 => (222, 
3)));
             Add_Action (Table.States (652), 32, 815);
             Add_Error (Table.States (652));
-            Set_Minimal_Action (Table.States (652).Minimal_Complete_Actions, 
(1 => (Shift, 32, 815)));
+            Table.States (652).Minimal_Complete_Action := (Shift, 32, 815);
             Table.States (653).Productions := WisiToken.To_Vector ((1 => (175, 
1)));
             Add_Action (Table.States (653), (22, 23, 24), (175, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (653).Minimal_Complete_Actions, 
(1 => (Reduce, 175, 1)));
+            Table.States (653).Minimal_Complete_Action := (Reduce, 175, 1);
             Table.States (654).Productions := WisiToken.To_Vector (((175, 0), 
(222, 0), (222, 2)));
             Add_Action (Table.States (654), 22, 816);
             Add_Action (Table.States (654), 23, 651);
             Add_Action (Table.States (654), 24, 817);
             Add_Error (Table.States (654));
             Add_Goto (Table.States (654), 174, 818);
-            Set_Minimal_Action (Table.States (654).Minimal_Complete_Actions, 
((Shift, 22, 816), (Shift, 24, 817)));
+            Table.States (654).Minimal_Complete_Action := (Shift, 24, 817);
             Table.States (655).Productions := WisiToken.To_Vector ((1 => (332, 
0)));
             Add_Action (Table.States (655), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
             48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (332, 0), 5,
             with_clause_0'Access, null);
-            Set_Minimal_Action (Table.States (655).Minimal_Complete_Actions, 
(1 => (Reduce, 332, 5)));
+            Table.States (655).Minimal_Complete_Action := (Reduce, 332, 5);
             Table.States (656).Productions := WisiToken.To_Vector ((1 => (248, 
0)));
             Add_Action (Table.States (656), 74, 337);
             Add_Action (Table.States (656), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (656));
             Add_Goto (Table.States (656), 122, 819);
-            Set_Minimal_Action (Table.States (656).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (656).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (657).Productions := WisiToken.To_Vector (((247, 0), 
(247, 1)));
             Add_Action (Table.States (657), 13, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (657), 24, Reduce, (159, 1), 0, null, 
null);
@@ -8331,7 +8267,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (657), 319, 113);
             Add_Goto (Table.States (657), 325, 115);
             Add_Goto (Table.States (657), 331, 116);
-            Set_Minimal_Action (Table.States (657).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (657).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (658).Productions := WisiToken.To_Vector (((128, 0), 
(213, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (658), 74, 337);
@@ -8344,31 +8280,30 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (658), 115, 241);
             Add_Goto (Table.States (658), 122, 821);
             Add_Goto (Table.States (658), 322, 242);
-            Set_Minimal_Action (Table.States (658).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (658).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (659).Productions := WisiToken.To_Vector ((1 => (250, 
0)));
             Add_Action (Table.States (659), 96, 822);
             Add_Error (Table.States (659));
-            Set_Minimal_Action (Table.States (659).Minimal_Complete_Actions, 
(1 => (Shift, 96, 822)));
+            Table.States (659).Minimal_Complete_Action := (Shift, 96, 822);
             Table.States (660).Productions := WisiToken.To_Vector (((251, 0), 
(251, 1)));
             Add_Action (Table.States (660), 24, 823);
             Add_Action (Table.States (660), 49, 824);
             Add_Error (Table.States (660));
-            Set_Minimal_Action (Table.States (660).Minimal_Complete_Actions, 
((Shift, 24, 823), (Shift, 49, 824)));
+            Table.States (660).Minimal_Complete_Action := (Shift, 24, 823);
             Table.States (661).Productions := WisiToken.To_Vector ((1 => (257, 
0)));
             Add_Action (Table.States (661), 96, 825);
             Add_Error (Table.States (661));
-            Set_Minimal_Action (Table.States (661).Minimal_Complete_Actions, 
(1 => (Shift, 96, 825)));
+            Table.States (661).Minimal_Complete_Action := (Shift, 96, 825);
             Table.States (662).Productions := WisiToken.To_Vector ((1 => (257, 
1)));
             Add_Action (Table.States (662), 96, 826);
             Add_Error (Table.States (662));
-            Set_Minimal_Action (Table.States (662).Minimal_Complete_Actions, 
(1 => (Shift, 96, 826)));
+            Table.States (662).Minimal_Complete_Action := (Shift, 96, 826);
             Table.States (663).Productions := WisiToken.To_Vector ((1 => (265, 
0)));
             Add_Action (Table.States (663), 74, 337);
             Add_Action (Table.States (663), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (663));
             Add_Goto (Table.States (663), 122, 827);
-            Set_Minimal_Action (Table.States (663).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (663).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (664).Productions := WisiToken.To_Vector ((1 => (264, 
0)));
             Add_Action (Table.States (664), 24, Reduce, (269, 1), 0, null, 
null);
             Add_Action (Table.States (664), 25, 828);
@@ -8393,11 +8328,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (664), 281, 94);
             Add_Goto (Table.States (664), 307, 837);
             Add_Goto (Table.States (664), 309, 838);
-            Set_Minimal_Action (Table.States (664).Minimal_Complete_Actions, 
(1 => (Reduce, 269, 0)));
+            Table.States (664).Minimal_Complete_Action := (Reduce, 269, 0);
             Table.States (665).Productions := WisiToken.To_Vector (((271, 0), 
(271, 1)));
             Add_Action (Table.States (665), 35, 839);
             Add_Error (Table.States (665));
-            Set_Minimal_Action (Table.States (665).Minimal_Complete_Actions, 
(1 => (Shift, 35, 839)));
+            Table.States (665).Minimal_Complete_Action := (Shift, 35, 839);
             Table.States (666).Productions := WisiToken.To_Vector ((1 => (304, 
0)));
             Add_Action (Table.States (666), 104, 119);
             Add_Action (Table.States (666), 105, 33);
@@ -8408,26 +8343,26 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (666), 239, 841);
             Add_Goto (Table.States (666), 272, 92);
             Add_Goto (Table.States (666), 293, 97);
-            Set_Minimal_Action (Table.States (666).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (666).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (667).Productions := WisiToken.To_Vector (((266, 0), 
(266, 1)));
             Add_Action (Table.States (667), 24, 842);
             Add_Action (Table.States (667), 49, 843);
             Add_Error (Table.States (667));
-            Set_Minimal_Action (Table.States (667).Minimal_Complete_Actions, 
((Shift, 24, 842), (Shift, 49, 843)));
+            Table.States (667).Minimal_Complete_Action := (Shift, 24, 842);
             Table.States (668).Productions := WisiToken.To_Vector ((1 => (304, 
1)));
             Add_Action (Table.States (668), 96, 844);
             Add_Error (Table.States (668));
-            Set_Minimal_Action (Table.States (668).Minimal_Complete_Actions, 
(1 => (Shift, 96, 844)));
+            Table.States (668).Minimal_Complete_Action := (Shift, 96, 844);
             Table.States (669).Productions := WisiToken.To_Vector ((1 => (276, 
0)));
             Add_Action (Table.States (669), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (276, 0), 5, raise_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (669).Minimal_Complete_Actions, 
(1 => (Reduce, 276, 5)));
+            Table.States (669).Minimal_Complete_Action := (Reduce, 276, 5);
             Table.States (670).Productions := WisiToken.To_Vector ((1 => (290, 
0)));
             Add_Action (Table.States (670), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (290, 0), 5, requeue_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (670).Minimal_Complete_Actions, 
(1 => (Reduce, 290, 5)));
+            Table.States (670).Minimal_Complete_Action := (Reduce, 290, 5);
             Table.States (671).Productions := WisiToken.To_Vector (((194, 0), 
(194, 1)));
             Add_Action (Table.States (671), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (671), 40, 742);
@@ -8443,23 +8378,23 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (671), 292, 846);
             Add_Goto (Table.States (671), 293, 97);
             Add_Goto (Table.States (671), 314, 847);
-            Set_Minimal_Action (Table.States (671).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (671).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (672).Productions := WisiToken.To_Vector ((1 => (196, 
0)));
             Add_Action (Table.States (672), 58, 848);
             Add_Error (Table.States (672));
-            Set_Minimal_Action (Table.States (672).Minimal_Complete_Actions, 
(1 => (Shift, 58, 848)));
+            Table.States (672).Minimal_Complete_Action := (Shift, 58, 848);
             Table.States (673).Productions := WisiToken.To_Vector (((247, 0), 
(247, 1)));
             Add_Action (Table.States (673), 14, 849);
             Add_Error (Table.States (673));
-            Set_Minimal_Action (Table.States (673).Minimal_Complete_Actions, 
(1 => (Shift, 14, 849)));
+            Table.States (673).Minimal_Complete_Action := (Shift, 14, 849);
             Table.States (674).Productions := WisiToken.To_Vector ((1 => (264, 
0)));
             Add_Action (Table.States (674), 14, 850);
             Add_Error (Table.States (674));
-            Set_Minimal_Action (Table.States (674).Minimal_Complete_Actions, 
(1 => (Shift, 14, 850)));
+            Table.States (674).Minimal_Complete_Action := (Shift, 14, 850);
             Table.States (675).Productions := WisiToken.To_Vector ((1 => (316, 
0)));
             Add_Action (Table.States (675), 14, 851);
             Add_Error (Table.States (675));
-            Set_Minimal_Action (Table.States (675).Minimal_Complete_Actions, 
(1 => (Shift, 14, 851)));
+            Table.States (675).Minimal_Complete_Action := (Shift, 14, 851);
             Table.States (676).Productions := WisiToken.To_Vector ((1 => (307, 
0)));
             Add_Action (Table.States (676), 29, 7);
             Add_Action (Table.States (676), 50, 18);
@@ -8467,16 +8402,16 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (676), 207, 61);
             Add_Goto (Table.States (676), 262, 87);
             Add_Goto (Table.States (676), 312, 852);
-            Set_Minimal_Action (Table.States (676).Minimal_Complete_Actions, 
(1 => (Shift, 50, 18)));
+            Table.States (676).Minimal_Complete_Action := (Shift, 50, 18);
             Table.States (677).Productions := WisiToken.To_Vector ((1 => (315, 
0)));
             Add_Action (Table.States (677), (4, 5, 13, 15, 17, 18, 25, 27, 28, 
29, 30, 31, 32, 36, 37, 40, 41, 46, 47,
             48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 93, 
104, 105, 106, 107), (315, 0), 5,
             subunit_0'Access, null);
-            Set_Minimal_Action (Table.States (677).Minimal_Complete_Actions, 
(1 => (Reduce, 315, 5)));
+            Table.States (677).Minimal_Complete_Action := (Reduce, 315, 5);
             Table.States (678).Productions := WisiToken.To_Vector ((1 => (295, 
1)));
             Add_Action (Table.States (678), 96, 853);
             Add_Error (Table.States (678));
-            Set_Minimal_Action (Table.States (678).Minimal_Complete_Actions, 
(1 => (Shift, 96, 853)));
+            Table.States (678).Minimal_Complete_Action := (Shift, 96, 853);
             Table.States (679).Productions := WisiToken.To_Vector ((1 => (295, 
0)));
             Add_Action (Table.States (679), 4, 1);
             Add_Action (Table.States (679), 5, 2);
@@ -8535,47 +8470,44 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (679), 303, 101);
             Add_Goto (Table.States (679), 306, 363);
             Add_Goto (Table.States (679), 323, 114);
-            Set_Minimal_Action (Table.States (679).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
-         end Subr_12;
-         procedure Subr_13
-         is begin
+            Table.States (679).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (680).Productions := WisiToken.To_Vector ((1 => (295, 
2)));
             Add_Action (Table.States (680), (22, 24, 43), (295, 2), 4, 
select_alternative_2'Access, null);
-            Set_Minimal_Action (Table.States (680).Minimal_Complete_Actions, 
(1 => (Reduce, 295, 4)));
+            Table.States (680).Minimal_Complete_Action := (Reduce, 295, 4);
             Table.States (681).Productions := WisiToken.To_Vector ((1 => (152, 
0)));
             Add_Action (Table.States (681), 61, 855);
             Add_Error (Table.States (681));
-            Set_Minimal_Action (Table.States (681).Minimal_Complete_Actions, 
(1 => (Shift, 61, 855)));
+            Table.States (681).Minimal_Complete_Action := (Shift, 61, 855);
             Table.States (682).Productions := WisiToken.To_Vector ((1 => (323, 
0)));
             Add_Action (Table.States (682), 61, 856);
             Add_Error (Table.States (682));
-            Set_Minimal_Action (Table.States (682).Minimal_Complete_Actions, 
(1 => (Shift, 61, 856)));
+            Table.States (682).Minimal_Complete_Action := (Shift, 61, 856);
             Table.States (683).Productions := WisiToken.To_Vector ((1 => (160, 
0)));
             Add_Action (Table.States (683), (22, 24, 43), (160, 0), 2, null, 
null);
-            Set_Minimal_Action (Table.States (683).Minimal_Complete_Actions, 
(1 => (Reduce, 160, 2)));
+            Table.States (683).Minimal_Complete_Action := (Reduce, 160, 2);
             Table.States (684).Productions := WisiToken.To_Vector ((1 => (294, 
0)));
             Add_Action (Table.States (684), 61, 857);
             Add_Error (Table.States (684));
-            Set_Minimal_Action (Table.States (684).Minimal_Complete_Actions, 
(1 => (Shift, 61, 857)));
+            Table.States (684).Minimal_Complete_Action := (Shift, 61, 857);
             Table.States (685).Productions := WisiToken.To_Vector ((1 => (294, 
1)));
             Add_Action (Table.States (685), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (294, 1), 5, selective_accept_1'Access, null);
-            Set_Minimal_Action (Table.States (685).Minimal_Complete_Actions, 
(1 => (Reduce, 294, 5)));
+            Table.States (685).Minimal_Complete_Action := (Reduce, 294, 5);
             Table.States (686).Productions := WisiToken.To_Vector ((1 => (126, 
0)));
             Add_Action (Table.States (686), 24, 858);
             Add_Error (Table.States (686));
-            Set_Minimal_Action (Table.States (686).Minimal_Complete_Actions, 
(1 => (Shift, 24, 858)));
+            Table.States (686).Minimal_Complete_Action := (Shift, 24, 858);
             Table.States (687).Productions := WisiToken.To_Vector ((1 => (313, 
0)));
             Add_Action (Table.States (687), 96, 859);
             Add_Error (Table.States (687));
-            Set_Minimal_Action (Table.States (687).Minimal_Complete_Actions, 
(1 => (Shift, 96, 859)));
+            Table.States (687).Minimal_Complete_Action := (Shift, 96, 859);
             Table.States (688).Productions := WisiToken.To_Vector ((1 => (317, 
0)));
             Add_Action (Table.States (688), 74, 337);
             Add_Action (Table.States (688), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (688));
             Add_Goto (Table.States (688), 122, 860);
-            Set_Minimal_Action (Table.States (688).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (688).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (689).Productions := WisiToken.To_Vector ((1 => (316, 
0)));
             Add_Action (Table.States (689), 13, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (689), 25, Reduce, (246, 2), 0, null, 
null);
@@ -8647,12 +8579,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (689), 319, 113);
             Add_Goto (Table.States (689), 325, 115);
             Add_Goto (Table.States (689), 331, 116);
-            Set_Minimal_Action (Table.States (689).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (689).Minimal_Complete_Action := (Reduce, 159, 0);
+         end Subr_12;
+         procedure Subr_13
+         is begin
             Table.States (690).Productions := WisiToken.To_Vector (((319, 0), 
(319, 1), (319, 2)));
             Add_Action (Table.States (690), 35, 862);
             Add_Action (Table.States (690), 96, 863);
             Add_Error (Table.States (690));
-            Set_Minimal_Action (Table.States (690).Minimal_Complete_Actions, 
((Shift, 35, 862), (Shift, 96, 863)));
+            Table.States (690).Minimal_Complete_Action := (Shift, 96, 863);
             Table.States (691).Productions := WisiToken.To_Vector ((1 => (305, 
0)));
             Add_Action (Table.States (691), 104, 119);
             Add_Action (Table.States (691), 105, 33);
@@ -8663,22 +8598,22 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (691), 239, 841);
             Add_Goto (Table.States (691), 272, 92);
             Add_Goto (Table.States (691), 293, 97);
-            Set_Minimal_Action (Table.States (691).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (691).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (692).Productions := WisiToken.To_Vector (((318, 0), 
(318, 1)));
             Add_Action (Table.States (692), 24, Reduce, (318, 1), 1, 
task_definition_1'Access, null);
             Add_Action (Table.States (692), 49, 865);
             Add_Error (Table.States (692));
-            Set_Minimal_Action (Table.States (692).Minimal_Complete_Actions, 
(1 => (Reduce, 318, 1)));
+            Table.States (692).Minimal_Complete_Action := (Reduce, 318, 1);
             Table.States (693).Productions := WisiToken.To_Vector ((1 => (305, 
1)));
             Add_Action (Table.States (693), 24, 866);
             Add_Error (Table.States (693));
-            Set_Minimal_Action (Table.States (693).Minimal_Complete_Actions, 
(1 => (Shift, 24, 866)));
+            Table.States (693).Minimal_Complete_Action := (Shift, 24, 866);
             Table.States (694).Productions := WisiToken.To_Vector ((1 => (169, 
0)));
             Add_Action (Table.States (694), (35, 74, 96), (169, 0), 3, null, 
null);
-            Set_Minimal_Action (Table.States (694).Minimal_Complete_Actions, 
(1 => (Reduce, 169, 3)));
+            Table.States (694).Minimal_Complete_Action := (Reduce, 169, 3);
             Table.States (695).Productions := WisiToken.To_Vector ((1 => (169, 
1)));
             Add_Action (Table.States (695), (35, 74, 96), (169, 1), 3, 
discriminant_part_opt_1'Access, null);
-            Set_Minimal_Action (Table.States (695).Minimal_Complete_Actions, 
(1 => (Reduce, 169, 3)));
+            Table.States (695).Minimal_Complete_Action := (Reduce, 169, 3);
             Table.States (696).Productions := WisiToken.To_Vector ((1 => (171, 
0)));
             Add_Action (Table.States (696), 77, Reduce, (170, 4), 0, null, 
null);
             Add_Action (Table.States (696), 96, Reduce, (170, 4), 0, null, 
null);
@@ -8686,7 +8621,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (696));
             Add_Goto (Table.States (696), 170, 867);
             Add_Goto (Table.States (696), 219, 547);
-            Set_Minimal_Action (Table.States (696).Minimal_Complete_Actions, 
(1 => (Reduce, 170, 0)));
+            Table.States (696).Minimal_Complete_Action := (Reduce, 170, 0);
             Table.States (697).Productions := WisiToken.To_Vector (((170, 0), 
(170, 1), (170, 2), (170, 3)));
             Add_Action (Table.States (697), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (697), 40, 868);
@@ -8701,7 +8636,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (697), 242, 872);
             Add_Goto (Table.States (697), 272, 92);
             Add_Goto (Table.States (697), 293, 873);
-            Set_Minimal_Action (Table.States (697).Minimal_Complete_Actions, 
((Shift, 104, 869), (Reduce, 241, 0)));
+            Table.States (697).Minimal_Complete_Action := (Shift, 104, 869);
             Table.States (698).Productions := WisiToken.To_Vector (((109, 0), 
(109, 1), (109, 2), (110, 0), (110, 2),
             (111, 0), (111, 1)));
             Add_Action (Table.States (698), 36, 874);
@@ -8709,12 +8644,11 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (698), 64, 875);
             Add_Action (Table.States (698), 65, 876);
             Add_Error (Table.States (698));
-            Set_Minimal_Action (Table.States (698).Minimal_Complete_Actions, 
((Shift, 65, 876), (Reduce, 109, 1),
-            (Reduce, 110, 1)));
+            Table.States (698).Minimal_Complete_Action := (Reduce, 109, 1);
             Table.States (699).Productions := WisiToken.To_Vector (((120, 0), 
(120, 1)));
             Add_Action (Table.States (699), 76, 877);
             Add_Error (Table.States (699));
-            Set_Minimal_Action (Table.States (699).Minimal_Complete_Actions, 
(1 => (Shift, 76, 877)));
+            Table.States (699).Minimal_Complete_Action := (Shift, 76, 877);
             Table.States (700).Productions := WisiToken.To_Vector (((326, 4), 
(326, 5)));
             Add_Action (Table.States (700), 3, 121);
             Add_Action (Table.States (700), 20, Reduce, (192, 1), 0, null, 
null);
@@ -8753,7 +8687,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (700), 320, 144);
             Add_Goto (Table.States (700), 321, 145);
             Add_Goto (Table.States (700), 330, 146);
-            Set_Minimal_Action (Table.States (700).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (700).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (701).Productions := WisiToken.To_Vector ((1 => (326, 
3)));
             Add_Action (Table.States (701), 3, 121);
             Add_Action (Table.States (701), 39, 122);
@@ -8791,10 +8725,10 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (701), 320, 144);
             Add_Goto (Table.States (701), 321, 145);
             Add_Goto (Table.States (701), 330, 146);
-            Set_Minimal_Action (Table.States (701).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (701).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (702).Productions := WisiToken.To_Vector ((1 => (228, 
8)));
             Add_Action (Table.States (702), (74, 96), (228, 8), 1, null, null);
-            Set_Minimal_Action (Table.States (702).Minimal_Complete_Actions, 
(1 => (Reduce, 228, 1)));
+            Table.States (702).Minimal_Complete_Action := (Reduce, 228, 1);
             Table.States (703).Productions := WisiToken.To_Vector (((109, 3), 
(110, 1), (111, 4), (228, 0), (228, 4)));
             Add_Action (Table.States (703), 34, 880);
             Add_Action (Table.States (703), 39, Reduce, (109, 3), 1, null, 
null, (110, 1), 1, null, null);
@@ -8802,8 +8736,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (703), 49, Reduce, (111, 4), 1, null, 
null);
             Add_Action (Table.States (703), 54, Reduce, (111, 4), 1, null, 
null);
             Add_Error (Table.States (703));
-            Set_Minimal_Action (Table.States (703).Minimal_Complete_Actions, 
((Shift, 34, 880), (Reduce, 109, 1),
-            (Reduce, 110, 1), (Reduce, 111, 1)));
+            Table.States (703).Minimal_Complete_Action := (Reduce, 109, 1);
             Table.States (704).Productions := WisiToken.To_Vector ((1 => (326, 
2)));
             Add_Action (Table.States (704), 3, 121);
             Add_Action (Table.States (704), 39, 122);
@@ -8840,15 +8773,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (704), 320, 144);
             Add_Goto (Table.States (704), 321, 145);
             Add_Goto (Table.States (704), 330, 146);
-            Set_Minimal_Action (Table.States (704).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (704).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (705).Productions := WisiToken.To_Vector ((1 => (280, 
1)));
             Add_Action (Table.States (705), 54, 882);
             Add_Error (Table.States (705));
-            Set_Minimal_Action (Table.States (705).Minimal_Complete_Actions, 
(1 => (Shift, 54, 882)));
+            Table.States (705).Minimal_Complete_Action := (Shift, 54, 882);
             Table.States (706).Productions := WisiToken.To_Vector (((228, 2), 
(228, 6)));
             Add_Action (Table.States (706), 34, 883);
             Add_Error (Table.States (706));
-            Set_Minimal_Action (Table.States (706).Minimal_Complete_Actions, 
(1 => (Shift, 34, 883)));
+            Table.States (706).Minimal_Complete_Action := (Shift, 34, 883);
             Table.States (707).Productions := WisiToken.To_Vector ((1 => (326, 
1)));
             Add_Action (Table.States (707), 3, 121);
             Add_Action (Table.States (707), 39, 122);
@@ -8873,7 +8806,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (707), 320, 144);
             Add_Goto (Table.States (707), 321, 145);
             Add_Goto (Table.States (707), 330, 146);
-            Set_Minimal_Action (Table.States (707).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (707).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (708).Productions := WisiToken.To_Vector ((1 => (280, 
0)));
             Add_Action (Table.States (708), 15, 885);
             Add_Action (Table.States (708), 24, Reduce, (150, 1), 0, null, 
null);
@@ -8891,12 +8824,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (708), 219, 892);
             Add_Goto (Table.States (708), 281, 94);
             Add_Goto (Table.States (708), 327, 893);
-            Set_Minimal_Action (Table.States (708).Minimal_Complete_Actions, 
(1 => (Reduce, 150, 0)));
+            Table.States (708).Minimal_Complete_Action := (Reduce, 150, 0);
             Table.States (709).Productions := WisiToken.To_Vector (((109, 4), 
(228, 3), (228, 7)));
             Add_Action (Table.States (709), 34, 894);
             Add_Action (Table.States (709), 39, Reduce, (109, 4), 1, null, 
null);
             Add_Error (Table.States (709));
-            Set_Minimal_Action (Table.States (709).Minimal_Complete_Actions, 
((Shift, 34, 894), (Reduce, 109, 1)));
+            Table.States (709).Minimal_Complete_Action := (Reduce, 109, 1);
             Table.States (710).Productions := WisiToken.To_Vector (((111, 2), 
(111, 3), (223, 0)));
             Add_Action (Table.States (710), 36, 895);
             Add_Action (Table.States (710), 41, Reduce, (111, 3), 1, null, 
null);
@@ -8904,63 +8837,63 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (710), 54, Reduce, (111, 3), 1, null, 
null);
             Add_Action (Table.States (710), 96, 896);
             Add_Error (Table.States (710));
-            Set_Minimal_Action (Table.States (710).Minimal_Complete_Actions, 
((Shift, 96, 896), (Reduce, 111, 1)));
+            Table.States (710).Minimal_Complete_Action := (Reduce, 111, 1);
             Table.States (711).Productions := WisiToken.To_Vector (((228, 1), 
(228, 5)));
             Add_Action (Table.States (711), 34, 897);
             Add_Error (Table.States (711));
-            Set_Minimal_Action (Table.States (711).Minimal_Complete_Actions, 
(1 => (Shift, 34, 897)));
+            Table.States (711).Minimal_Complete_Action := (Shift, 34, 897);
             Table.States (712).Productions := WisiToken.To_Vector ((1 => (183, 
0)));
             Add_Action (Table.States (712), 104, 898);
             Add_Action (Table.States (712), 106, 899);
             Add_Error (Table.States (712));
             Add_Goto (Table.States (712), 180, 900);
             Add_Goto (Table.States (712), 181, 901);
-            Set_Minimal_Action (Table.States (712).Minimal_Complete_Actions, 
(1 => (Shift, 106, 899)));
+            Table.States (712).Minimal_Complete_Action := (Shift, 104, 898);
             Table.States (713).Productions := WisiToken.To_Vector ((1 => (259, 
0)));
             Add_Action (Table.States (713), 39, 902);
             Add_Error (Table.States (713));
-            Set_Minimal_Action (Table.States (713).Minimal_Complete_Actions, 
(1 => (Shift, 39, 902)));
+            Table.States (713).Minimal_Complete_Action := (Shift, 39, 902);
             Table.States (714).Productions := WisiToken.To_Vector (((162, 0), 
(162, 1)));
             Add_Action (Table.States (714), 39, 903);
             Add_Error (Table.States (714));
-            Set_Minimal_Action (Table.States (714).Minimal_Complete_Actions, 
(1 => (Shift, 39, 903)));
+            Table.States (714).Minimal_Complete_Action := (Shift, 39, 903);
             Table.States (715).Productions := WisiToken.To_Vector (((260, 0), 
(326, 7)));
             Add_Action (Table.States (715), 41, 705);
             Add_Action (Table.States (715), 49, 904);
             Add_Action (Table.States (715), 54, 708);
             Add_Error (Table.States (715));
             Add_Goto (Table.States (715), 280, 905);
-            Set_Minimal_Action (Table.States (715).Minimal_Complete_Actions, 
((Shift, 41, 705), (Shift, 49, 904)));
+            Table.States (715).Minimal_Complete_Action := (Shift, 41, 705);
             Table.States (716).Productions := WisiToken.To_Vector ((1 => (326, 
8)));
             Add_Action (Table.States (716), (74, 96), (326, 8), 1, null, null);
-            Set_Minimal_Action (Table.States (716).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 1)));
+            Table.States (716).Minimal_Complete_Action := (Reduce, 326, 1);
             Table.States (717).Productions := WisiToken.To_Vector ((1 => (326, 
6)));
             Add_Action (Table.States (717), (74, 96), (326, 6), 1, null, null);
-            Set_Minimal_Action (Table.States (717).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 1)));
+            Table.States (717).Minimal_Complete_Action := (Reduce, 326, 1);
             Table.States (718).Productions := WisiToken.To_Vector ((1 => (326, 
9)));
             Add_Action (Table.States (718), (74, 96), (326, 9), 1, null, null);
-            Set_Minimal_Action (Table.States (718).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 1)));
+            Table.States (718).Minimal_Complete_Action := (Reduce, 326, 1);
             Table.States (719).Productions := WisiToken.To_Vector ((1 => (326, 
0)));
             Add_Action (Table.States (719), (74, 96), (326, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (719).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 1)));
+            Table.States (719).Minimal_Complete_Action := (Reduce, 326, 1);
             Table.States (720).Productions := WisiToken.To_Vector ((1 => (326, 
10)));
             Add_Action (Table.States (720), (74, 96), (326, 10), 1, null, 
null);
-            Set_Minimal_Action (Table.States (720).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 1)));
+            Table.States (720).Minimal_Complete_Action := (Reduce, 326, 1);
             Table.States (721).Productions := WisiToken.To_Vector (((114, 0), 
(114, 1), (114, 2)));
             Add_Action (Table.States (721), 7, 556);
             Add_Error (Table.States (721));
-            Set_Minimal_Action (Table.States (721).Minimal_Complete_Actions, 
(1 => (Shift, 7, 556)));
+            Table.States (721).Minimal_Complete_Action := (Shift, 7, 556);
             Table.States (722).Productions := WisiToken.To_Vector ((1 => (206, 
0)));
             Add_Action (Table.States (722), 74, 337);
             Add_Action (Table.States (722), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (722));
             Add_Goto (Table.States (722), 122, 906);
-            Set_Minimal_Action (Table.States (722).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (722).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (723).Productions := WisiToken.To_Vector ((1 => (331, 
0)));
             Add_Action (Table.States (723), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (331, 0), 5,
             use_clause_0'Access, null);
-            Set_Minimal_Action (Table.States (723).Minimal_Complete_Actions, 
(1 => (Reduce, 331, 5)));
+            Table.States (723).Minimal_Complete_Action := (Reduce, 331, 5);
             Table.States (724).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (245, 2), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (724), 74, 337);
@@ -8973,8 +8906,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (724), 115, 241);
             Add_Goto (Table.States (724), 122, 907);
             Add_Goto (Table.States (724), 322, 242);
-            Set_Minimal_Action (Table.States (724).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (724).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (725).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (245, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (725), 74, 337);
@@ -8987,17 +8919,16 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (725), 115, 241);
             Add_Goto (Table.States (725), 122, 908);
             Add_Goto (Table.States (725), 322, 242);
-            Set_Minimal_Action (Table.States (725).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (725).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (726).Productions := WisiToken.To_Vector ((1 => (208, 
0)));
             Add_Action (Table.States (726), (104, 105, 106), (208, 0), 1, 
null, null);
-            Set_Minimal_Action (Table.States (726).Minimal_Complete_Actions, 
(1 => (Reduce, 208, 1)));
+            Table.States (726).Minimal_Complete_Action := (Reduce, 208, 1);
             Table.States (727).Productions := WisiToken.To_Vector ((1 => (208, 
1)));
             Add_Action (Table.States (727), (104, 105, 106), (208, 1), 1, 
null, null);
-            Set_Minimal_Action (Table.States (727).Minimal_Complete_Actions, 
(1 => (Reduce, 208, 1)));
+            Table.States (727).Minimal_Complete_Action := (Reduce, 208, 1);
             Table.States (728).Productions := WisiToken.To_Vector ((1 => (270, 
0)));
             Add_Action (Table.States (728), (29, 50), (270, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (728).Minimal_Complete_Actions, 
(1 => (Reduce, 270, 1)));
+            Table.States (728).Minimal_Complete_Action := (Reduce, 270, 1);
             Table.States (729).Productions := WisiToken.To_Vector ((1 => (114, 
2)));
             Add_Action (Table.States (729), 104, 119);
             Add_Action (Table.States (729), 105, 33);
@@ -9007,12 +8938,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (729), 239, 909);
             Add_Goto (Table.States (729), 272, 92);
             Add_Goto (Table.States (729), 293, 97);
-            Set_Minimal_Action (Table.States (729).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (729).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (730).Productions := WisiToken.To_Vector (((114, 0), 
(114, 1)));
             Add_Action (Table.States (730), 29, 910);
             Add_Action (Table.States (730), 50, 911);
             Add_Error (Table.States (730));
-            Set_Minimal_Action (Table.States (730).Minimal_Complete_Actions, 
((Shift, 29, 910), (Shift, 50, 911)));
+            Table.States (730).Minimal_Complete_Action := (Shift, 50, 911);
             Table.States (731).Productions := WisiToken.To_Vector ((1 => (245, 
0)));
             Add_Action (Table.States (731), 104, 119);
             Add_Action (Table.States (731), 105, 33);
@@ -9022,11 +8953,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (731), 239, 912);
             Add_Goto (Table.States (731), 272, 92);
             Add_Goto (Table.States (731), 293, 97);
-            Set_Minimal_Action (Table.States (731).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (731).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (732).Productions := WisiToken.To_Vector ((1 => (133, 
1)));
             Add_Action (Table.States (732), 96, 913);
             Add_Error (Table.States (732));
-            Set_Minimal_Action (Table.States (732).Minimal_Complete_Actions, 
(1 => (Shift, 96, 913)));
+            Table.States (732).Minimal_Complete_Action := (Shift, 96, 913);
             Table.States (733).Productions := WisiToken.To_Vector (((187, 0), 
(187, 1)));
             Add_Action (Table.States (733), 44, 914);
             Add_Action (Table.States (733), 104, 915);
@@ -9039,76 +8970,76 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (733), 239, 918);
             Add_Goto (Table.States (733), 272, 92);
             Add_Goto (Table.States (733), 293, 97);
-            Set_Minimal_Action (Table.States (733).Minimal_Complete_Actions, 
((Shift, 44, 914), (Shift, 104, 915)));
+            Table.States (733).Minimal_Complete_Action := (Shift, 104, 915);
             Table.States (734).Productions := WisiToken.To_Vector ((1 => (188, 
1)));
             Add_Action (Table.States (734), (24, 72), (188, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (734).Minimal_Complete_Actions, 
(1 => (Reduce, 188, 1)));
+            Table.States (734).Minimal_Complete_Action := (Reduce, 188, 1);
             Table.States (735).Productions := WisiToken.To_Vector (((188, 0), 
(189, 0)));
             Add_Action (Table.States (735), 24, Reduce, (189, 0), 1, null, 
null);
             Add_Action (Table.States (735), 72, 733);
             Add_Error (Table.States (735));
             Add_Goto (Table.States (735), 187, 919);
-            Set_Minimal_Action (Table.States (735).Minimal_Complete_Actions, 
(1 => (Reduce, 189, 1)));
+            Table.States (735).Minimal_Complete_Action := (Reduce, 189, 1);
             Table.States (736).Productions := WisiToken.To_Vector ((1 => (218, 
0)));
             Add_Action (Table.States (736), (1 =>  24), (218, 0), 3, 
handled_sequence_of_statements_0'Access, null);
-            Set_Minimal_Action (Table.States (736).Minimal_Complete_Actions, 
(1 => (Reduce, 218, 3)));
+            Table.States (736).Minimal_Complete_Action := (Reduce, 218, 3);
             Table.States (737).Productions := WisiToken.To_Vector ((1 => (188, 
2)));
             Add_Action (Table.States (737), (24, 72), (188, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (737).Minimal_Complete_Actions, 
(1 => (Reduce, 188, 1)));
+            Table.States (737).Minimal_Complete_Action := (Reduce, 188, 1);
             Table.States (738).Productions := WisiToken.To_Vector ((1 => (133, 
0)));
             Add_Action (Table.States (738), 24, 920);
             Add_Error (Table.States (738));
-            Set_Minimal_Action (Table.States (738).Minimal_Complete_Actions, 
(1 => (Shift, 24, 920)));
+            Table.States (738).Minimal_Complete_Action := (Shift, 24, 920);
             Table.States (739).Productions := WisiToken.To_Vector ((1 => (232, 
1)));
             Add_Action (Table.States (739), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (739), 104, 149);
             Add_Error (Table.States (739));
             Add_Goto (Table.States (739), 220, 921);
-            Set_Minimal_Action (Table.States (739).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (739).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (740).Productions := WisiToken.To_Vector ((1 => (232, 
0)));
             Add_Action (Table.States (740), 37, 922);
             Add_Error (Table.States (740));
-            Set_Minimal_Action (Table.States (740).Minimal_Complete_Actions, 
(1 => (Shift, 37, 922)));
+            Table.States (740).Minimal_Complete_Action := (Shift, 37, 922);
             Table.States (741).Productions := WisiToken.To_Vector ((1 => (157, 
9)));
             Add_Action (Table.States (741), 96, 923);
             Add_Error (Table.States (741));
-            Set_Minimal_Action (Table.States (741).Minimal_Complete_Actions, 
(1 => (Shift, 96, 923)));
+            Table.States (741).Minimal_Complete_Action := (Shift, 96, 923);
             Table.States (742).Productions := WisiToken.To_Vector (((241, 0), 
(314, 0), (314, 1)));
             Add_Action (Table.States (742), 41, 924);
             Add_Error (Table.States (742));
-            Set_Minimal_Action (Table.States (742).Minimal_Complete_Actions, 
(1 => (Shift, 41, 924)));
+            Table.States (742).Minimal_Complete_Action := (Shift, 41, 924);
             Table.States (743).Productions := WisiToken.To_Vector (((244, 1), 
(244, 4)));
             Add_Action (Table.States (743), 74, 337);
             Add_Action (Table.States (743), 82, 925);
             Add_Action (Table.States (743), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (743));
             Add_Goto (Table.States (743), 122, 926);
-            Set_Minimal_Action (Table.States (743).Minimal_Complete_Actions, 
((Shift, 82, 925), (Reduce, 122, 0)));
+            Table.States (743).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (744).Productions := WisiToken.To_Vector (((244, 2), 
(244, 5)));
             Add_Action (Table.States (744), 74, 337);
             Add_Action (Table.States (744), 82, 927);
             Add_Action (Table.States (744), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (744));
             Add_Goto (Table.States (744), 122, 928);
-            Set_Minimal_Action (Table.States (744).Minimal_Complete_Actions, 
((Shift, 82, 927), (Reduce, 122, 0)));
+            Table.States (744).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (745).Productions := WisiToken.To_Vector (((244, 0), 
(244, 3)));
             Add_Action (Table.States (745), 74, 337);
             Add_Action (Table.States (745), 82, 929);
             Add_Action (Table.States (745), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (745));
             Add_Goto (Table.States (745), 122, 930);
-            Set_Minimal_Action (Table.States (745).Minimal_Complete_Actions, 
((Shift, 82, 929), (Reduce, 122, 0)));
+            Table.States (745).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (746).Productions := WisiToken.To_Vector ((1 => (278, 
0)));
             Add_Action (Table.States (746), (77, 83), (278, 0), 3, null, null);
-            Set_Minimal_Action (Table.States (746).Minimal_Complete_Actions, 
(1 => (Reduce, 278, 3)));
+            Table.States (746).Minimal_Complete_Action := (Reduce, 278, 3);
             Table.States (747).Productions := WisiToken.To_Vector ((1 => (179, 
0)));
             Add_Action (Table.States (747), 77, 931);
             Add_Error (Table.States (747));
-            Set_Minimal_Action (Table.States (747).Minimal_Complete_Actions, 
(1 => (Shift, 77, 931)));
+            Table.States (747).Minimal_Complete_Action := (Shift, 77, 931);
             Table.States (748).Productions := WisiToken.To_Vector ((1 => (179, 
1)));
             Add_Action (Table.States (748), 96, 932);
             Add_Error (Table.States (748));
-            Set_Minimal_Action (Table.States (748).Minimal_Complete_Actions, 
(1 => (Shift, 96, 932)));
+            Table.States (748).Minimal_Complete_Action := (Shift, 96, 932);
             Table.States (749).Productions := WisiToken.To_Vector ((1 => (213, 
2)));
             Add_Action (Table.States (749), 104, 119);
             Add_Action (Table.States (749), 105, 33);
@@ -9118,7 +9049,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (749), 239, 933);
             Add_Goto (Table.States (749), 272, 92);
             Add_Goto (Table.States (749), 293, 97);
-            Set_Minimal_Action (Table.States (749).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (749).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (750).Productions := WisiToken.To_Vector ((1 => (213, 
1)));
             Add_Action (Table.States (750), 104, 119);
             Add_Action (Table.States (750), 105, 33);
@@ -9128,48 +9059,48 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (750), 239, 934);
             Add_Goto (Table.States (750), 272, 92);
             Add_Goto (Table.States (750), 293, 97);
-            Set_Minimal_Action (Table.States (750).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (750).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (751).Productions := WisiToken.To_Vector (((125, 0), 
(256, 1)));
             Add_Action (Table.States (751), 77, 935);
             Add_Action (Table.States (751), 83, 443);
             Add_Error (Table.States (751));
-            Set_Minimal_Action (Table.States (751).Minimal_Complete_Actions, 
(1 => (Shift, 77, 935)));
+            Table.States (751).Minimal_Complete_Action := (Shift, 77, 935);
             Table.States (752).Productions := WisiToken.To_Vector ((1 => (256, 
2)));
             Add_Action (Table.States (752), 77, 936);
             Add_Error (Table.States (752));
-            Set_Minimal_Action (Table.States (752).Minimal_Complete_Actions, 
(1 => (Shift, 77, 936)));
+            Table.States (752).Minimal_Complete_Action := (Shift, 77, 936);
             Table.States (753).Productions := WisiToken.To_Vector ((1 => (256, 
0)));
             Add_Action (Table.States (753), 77, 937);
             Add_Error (Table.States (753));
-            Set_Minimal_Action (Table.States (753).Minimal_Complete_Actions, 
(1 => (Shift, 77, 937)));
+            Table.States (753).Minimal_Complete_Action := (Shift, 77, 937);
             Table.States (754).Productions := WisiToken.To_Vector ((1 => (193, 
0)));
             Add_Action (Table.States (754), 96, 938);
             Add_Error (Table.States (754));
-            Set_Minimal_Action (Table.States (754).Minimal_Complete_Actions, 
(1 => (Shift, 96, 938)));
+            Table.States (754).Minimal_Complete_Action := (Shift, 96, 938);
             Table.States (755).Productions := WisiToken.To_Vector ((1 => (243, 
0)));
             Add_Action (Table.States (755), 96, 939);
             Add_Error (Table.States (755));
-            Set_Minimal_Action (Table.States (755).Minimal_Complete_Actions, 
(1 => (Shift, 96, 939)));
+            Table.States (755).Minimal_Complete_Action := (Shift, 96, 939);
             Table.States (756).Productions := WisiToken.To_Vector ((1 => (112, 
0)));
             Add_Action (Table.States (756), 96, 940);
             Add_Error (Table.States (756));
-            Set_Minimal_Action (Table.States (756).Minimal_Complete_Actions, 
(1 => (Shift, 96, 940)));
+            Table.States (756).Minimal_Complete_Action := (Shift, 96, 940);
             Table.States (757).Productions := WisiToken.To_Vector ((1 => (308, 
0)));
             Add_Action (Table.States (757), 96, 941);
             Add_Error (Table.States (757));
-            Set_Minimal_Action (Table.States (757).Minimal_Complete_Actions, 
(1 => (Shift, 96, 941)));
+            Table.States (757).Minimal_Complete_Action := (Shift, 96, 941);
             Table.States (758).Productions := WisiToken.To_Vector ((1 => (311, 
0)));
             Add_Action (Table.States (758), 96, 942);
             Add_Error (Table.States (758));
-            Set_Minimal_Action (Table.States (758).Minimal_Complete_Actions, 
(1 => (Shift, 96, 942)));
+            Table.States (758).Minimal_Complete_Action := (Shift, 96, 942);
             Table.States (759).Productions := WisiToken.To_Vector ((1 => (307, 
0)));
             Add_Action (Table.States (759), 13, 943);
             Add_Error (Table.States (759));
-            Set_Minimal_Action (Table.States (759).Minimal_Complete_Actions, 
(1 => (Shift, 13, 943)));
+            Table.States (759).Minimal_Complete_Action := (Shift, 13, 943);
             Table.States (760).Productions := WisiToken.To_Vector ((1 => (113, 
0)));
             Add_Action (Table.States (760), 24, 944);
             Add_Error (Table.States (760));
-            Set_Minimal_Action (Table.States (760).Minimal_Complete_Actions, 
(1 => (Shift, 24, 944)));
+            Table.States (760).Minimal_Complete_Action := (Shift, 24, 944);
             Table.States (761).Productions := WisiToken.To_Vector ((1 => (137, 
0)));
             Add_Action (Table.States (761), 3, 121);
             Add_Action (Table.States (761), 39, 122);
@@ -9209,15 +9140,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (761), 320, 144);
             Add_Goto (Table.States (761), 321, 145);
             Add_Goto (Table.States (761), 330, 146);
-            Set_Minimal_Action (Table.States (761).Minimal_Complete_Actions, 
(1 => (Reduce, 166, 0)));
+            Table.States (761).Minimal_Complete_Action := (Reduce, 166, 0);
             Table.States (762).Productions := WisiToken.To_Vector ((1 => (138, 
1)));
             Add_Action (Table.States (762), (77, 83), (138, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (762).Minimal_Complete_Actions, 
(1 => (Reduce, 138, 1)));
+            Table.States (762).Minimal_Complete_Action := (Reduce, 138, 1);
             Table.States (763).Productions := WisiToken.To_Vector (((136, 0), 
(138, 0)));
             Add_Action (Table.States (763), 77, Reduce, (136, 0), 4, 
case_expression_0'Access, null);
             Add_Action (Table.States (763), 83, 946);
             Add_Error (Table.States (763));
-            Set_Minimal_Action (Table.States (763).Minimal_Complete_Actions, 
(1 => (Reduce, 136, 4)));
+            Table.States (763).Minimal_Complete_Action := (Reduce, 136, 4);
             Table.States (764).Productions := WisiToken.To_Vector ((1 => (273, 
0)));
             Add_Action (Table.States (764), 3, 121);
             Add_Action (Table.States (764), 39, 122);
@@ -9253,10 +9184,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (764), 320, 144);
             Add_Goto (Table.States (764), 321, 145);
             Add_Goto (Table.States (764), 330, 146);
-            Set_Minimal_Action (Table.States (764).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
-         end Subr_13;
-         procedure Subr_14
-         is begin
+            Table.States (764).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (765).Productions := WisiToken.To_Vector (((221, 0), 
(221, 1), (221, 2), (221, 3)));
             Add_Action (Table.States (765), 22, 948);
             Add_Action (Table.States (765), 23, 949);
@@ -9264,17 +9192,17 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (765));
             Add_Goto (Table.States (765), 172, 950);
             Add_Goto (Table.States (765), 173, 951);
-            Set_Minimal_Action (Table.States (765).Minimal_Complete_Actions, 
(1 => (Reduce, 221, 4)));
+            Table.States (765).Minimal_Complete_Action := (Reduce, 221, 4);
             Table.States (766).Productions := WisiToken.To_Vector ((1 => (117, 
0)));
             Add_Action (Table.States (766), 77, 952);
             Add_Error (Table.States (766));
-            Set_Minimal_Action (Table.States (766).Minimal_Complete_Actions, 
(1 => (Shift, 77, 952)));
+            Table.States (766).Minimal_Complete_Action := (Shift, 77, 952);
             Table.States (767).Productions := WisiToken.To_Vector ((1 => (117, 
1)));
             Add_Action (Table.States (767), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (117, 1), 5, aggregate_1'Access,
             null);
-            Set_Minimal_Action (Table.States (767).Minimal_Complete_Actions, 
(1 => (Reduce, 117, 5)));
+            Table.States (767).Minimal_Complete_Action := (Reduce, 117, 5);
             Table.States (768).Productions := WisiToken.To_Vector ((1 => (277, 
0)));
             Add_Action (Table.States (768), 3, 121);
             Add_Action (Table.States (768), 39, 122);
@@ -9310,7 +9238,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (768), 320, 144);
             Add_Goto (Table.States (768), 321, 145);
             Add_Goto (Table.States (768), 330, 146);
-            Set_Minimal_Action (Table.States (768).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (768).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (769).Productions := WisiToken.To_Vector ((1 => (140, 
0)));
             Add_Action (Table.States (769), 4, 1);
             Add_Action (Table.States (769), 5, 2);
@@ -9368,15 +9296,18 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (769), 303, 101);
             Add_Goto (Table.States (769), 306, 363);
             Add_Goto (Table.States (769), 323, 114);
-            Set_Minimal_Action (Table.States (769).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (769).Minimal_Complete_Action := (Reduce, 300, 0);
+         end Subr_13;
+         procedure Subr_14
+         is begin
             Table.States (770).Productions := WisiToken.To_Vector ((1 => (139, 
0)));
             Add_Action (Table.States (770), 96, 955);
             Add_Error (Table.States (770));
-            Set_Minimal_Action (Table.States (770).Minimal_Complete_Actions, 
(1 => (Shift, 96, 955)));
+            Table.States (770).Minimal_Complete_Action := (Shift, 96, 955);
             Table.States (771).Productions := WisiToken.To_Vector ((1 => (233, 
0)));
             Add_Action (Table.States (771), (10, 20, 21, 22, 23, 35, 37, 43, 
53, 68, 74, 75, 77, 79, 83, 87, 96), (233,
             0), 3, null, null);
-            Set_Minimal_Action (Table.States (771).Minimal_Complete_Actions, 
(1 => (Reduce, 233, 3)));
+            Table.States (771).Minimal_Complete_Action := (Reduce, 233, 3);
             Table.States (772).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (272, 0), (293, 0),
             (293, 1), (293, 2), (293, 3), (314, 0), (314, 1)));
             Add_Action (Table.States (772), 10, Reduce, (314, 1), 3, 
subtype_indication_1'Access, null);
@@ -9399,11 +9330,10 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (772), 155, 956);
             Add_Goto (Table.States (772), 224, 621);
             Add_Goto (Table.States (772), 322, 242);
-            Set_Minimal_Action (Table.States (772).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 314, 3)));
+            Table.States (772).Minimal_Complete_Action := (Reduce, 314, 3);
             Table.States (773).Productions := WisiToken.To_Vector ((1 => (155, 
0)));
             Add_Action (Table.States (773), (10, 21, 37, 42, 74, 77, 82, 83, 
87, 96), (155, 0), 2, null, null);
-            Set_Minimal_Action (Table.States (773).Minimal_Complete_Actions, 
(1 => (Reduce, 155, 2)));
+            Table.States (773).Minimal_Complete_Action := (Reduce, 155, 2);
             Table.States (774).Productions := WisiToken.To_Vector (((165, 1), 
(197, 3), (314, 0), (314, 1)));
             Add_Action (Table.States (774), 39, 122);
             Add_Action (Table.States (774), 41, 957);
@@ -9419,23 +9349,22 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (774), 258, 256);
             Add_Goto (Table.States (774), 272, 92);
             Add_Goto (Table.States (774), 293, 97);
-            Set_Minimal_Action (Table.States (774).Minimal_Complete_Actions, 
((Shift, 41, 957), (Shift, 105, 33)));
+            Table.States (774).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (775).Productions := WisiToken.To_Vector ((1 => (168, 
1)));
             Add_Action (Table.States (775), (77, 83), (168, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (775).Minimal_Complete_Actions, 
(1 => (Reduce, 168, 1)));
+            Table.States (775).Minimal_Complete_Action := (Reduce, 168, 1);
             Table.States (776).Productions := WisiToken.To_Vector (((168, 0), 
(224, 0)));
             Add_Action (Table.States (776), 77, 958);
             Add_Action (Table.States (776), 83, 959);
             Add_Error (Table.States (776));
-            Set_Minimal_Action (Table.States (776).Minimal_Complete_Actions, 
(1 => (Shift, 77, 958)));
+            Table.States (776).Minimal_Complete_Action := (Shift, 77, 958);
             Table.States (777).Productions := WisiToken.To_Vector (((165, 2), 
(167, 1), (278, 1)));
             Add_Action (Table.States (777), 77, Reduce, (167, 1), 1, null, 
null, (278, 1), 1, null, null);
             Add_Action (Table.States (777), 79, Reduce, (165, 2), 1, null, 
null);
             Add_Action (Table.States (777), 83, Reduce, (167, 1), 1, null, 
null, (278, 1), 1, null, null);
             Add_Action (Table.States (777), 87, Reduce, (165, 2), 1, null, 
null);
             Add_Error (Table.States (777));
-            Set_Minimal_Action (Table.States (777).Minimal_Complete_Actions, 
((Reduce, 165, 1), (Reduce, 167, 1),
-            (Reduce, 278, 1)));
+            Table.States (777).Minimal_Complete_Action := (Reduce, 165, 1);
             Table.States (778).Productions := WisiToken.To_Vector ((1 => (230, 
0)));
             Add_Action (Table.States (778), 104, 119);
             Add_Action (Table.States (778), 105, 33);
@@ -9445,7 +9374,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (778), 239, 960);
             Add_Goto (Table.States (778), 272, 92);
             Add_Goto (Table.States (778), 293, 97);
-            Set_Minimal_Action (Table.States (778).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (778).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (779).Productions := WisiToken.To_Vector (((128, 0), 
(230, 1), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (779), 37, Reduce, (230, 1), 5, null, 
null);
@@ -9457,13 +9386,12 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (779));
             Add_Goto (Table.States (779), 115, 241);
             Add_Goto (Table.States (779), 322, 242);
-            Set_Minimal_Action (Table.States (779).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 230, 5)));
+            Table.States (779).Minimal_Complete_Action := (Reduce, 230, 5);
             Table.States (780).Productions := WisiToken.To_Vector ((1 => (127, 
0)));
             Add_Action (Table.States (780), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 72, 73, 
74, 93, 104, 105, 106, 107), (127, 0), 6,
             at_clause_0'Access, null);
-            Set_Minimal_Action (Table.States (780).Minimal_Complete_Actions, 
(1 => (Reduce, 127, 6)));
+            Table.States (780).Minimal_Complete_Action := (Reduce, 127, 6);
             Table.States (781).Productions := WisiToken.To_Vector ((1 => (235, 
0)));
             Add_Action (Table.States (781), 3, 121);
             Add_Action (Table.States (781), 39, 122);
@@ -9499,20 +9427,20 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (781), 320, 144);
             Add_Goto (Table.States (781), 321, 145);
             Add_Goto (Table.States (781), 330, 146);
-            Set_Minimal_Action (Table.States (781).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (781).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (782).Productions := WisiToken.To_Vector ((1 => (144, 
0)));
             Add_Action (Table.States (782), 12, 962);
             Add_Error (Table.States (782));
-            Set_Minimal_Action (Table.States (782).Minimal_Complete_Actions, 
(1 => (Shift, 12, 962)));
+            Table.States (782).Minimal_Complete_Action := (Shift, 12, 962);
             Table.States (783).Productions := WisiToken.To_Vector ((1 => (145, 
1)));
             Add_Action (Table.States (783), (24, 104), (145, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (783).Minimal_Complete_Actions, 
(1 => (Reduce, 145, 1)));
+            Table.States (783).Minimal_Complete_Action := (Reduce, 145, 1);
             Table.States (784).Productions := WisiToken.To_Vector (((145, 0), 
(281, 0)));
             Add_Action (Table.States (784), 24, 963);
             Add_Action (Table.States (784), 104, 782);
             Add_Error (Table.States (784));
             Add_Goto (Table.States (784), 144, 964);
-            Set_Minimal_Action (Table.States (784).Minimal_Complete_Actions, 
(1 => (Shift, 24, 963)));
+            Table.States (784).Minimal_Complete_Action := (Shift, 24, 963);
             Table.States (785).Productions := WisiToken.To_Vector (((254, 0), 
(254, 1), (254, 2), (254, 3)));
             Add_Action (Table.States (785), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (785), 33, 504);
@@ -9525,52 +9453,51 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (785), 114, 965);
             Add_Goto (Table.States (785), 236, 966);
             Add_Goto (Table.States (785), 241, 721);
-            Set_Minimal_Action (Table.States (785).Minimal_Complete_Actions, 
((Reduce, 236, 0), (Reduce, 241, 0)));
+            Table.States (785).Minimal_Complete_Action := (Reduce, 236, 0);
             Table.States (786).Productions := WisiToken.To_Vector ((1 => (255, 
0)));
             Add_Action (Table.States (786), (77, 96), (255, 0), 3, 
parameter_specification_list_0'Access, null);
-            Set_Minimal_Action (Table.States (786).Minimal_Complete_Actions, 
(1 => (Reduce, 255, 3)));
+            Table.States (786).Minimal_Complete_Action := (Reduce, 255, 3);
             Table.States (787).Productions := WisiToken.To_Vector ((1 => (215, 
2)));
             Add_Action (Table.States (787), 96, 967);
             Add_Error (Table.States (787));
-            Set_Minimal_Action (Table.States (787).Minimal_Complete_Actions, 
(1 => (Shift, 96, 967)));
+            Table.States (787).Minimal_Complete_Action := (Shift, 96, 967);
             Table.States (788).Productions := WisiToken.To_Vector ((1 => (215, 
0)));
             Add_Action (Table.States (788), 96, 968);
             Add_Error (Table.States (788));
-            Set_Minimal_Action (Table.States (788).Minimal_Complete_Actions, 
(1 => (Shift, 96, 968)));
+            Table.States (788).Minimal_Complete_Action := (Shift, 96, 968);
             Table.States (789).Productions := WisiToken.To_Vector ((1 => (215, 
1)));
             Add_Action (Table.States (789), 96, 969);
             Add_Error (Table.States (789));
-            Set_Minimal_Action (Table.States (789).Minimal_Complete_Actions, 
(1 => (Shift, 96, 969)));
+            Table.States (789).Minimal_Complete_Action := (Shift, 96, 969);
             Table.States (790).Productions := WisiToken.To_Vector (((109, 0), 
(109, 1), (109, 2), (111, 0), (111, 1)));
             Add_Action (Table.States (790), 36, 970);
             Add_Action (Table.States (790), 39, Reduce, (109, 2), 1, null, 
null);
             Add_Action (Table.States (790), 64, 875);
             Add_Action (Table.States (790), 65, 876);
             Add_Error (Table.States (790));
-            Set_Minimal_Action (Table.States (790).Minimal_Complete_Actions, 
((Shift, 65, 876), (Reduce, 109, 1)));
+            Table.States (790).Minimal_Complete_Action := (Reduce, 109, 1);
             Table.States (791).Productions := WisiToken.To_Vector (((202, 6), 
(202, 7)));
             Add_Action (Table.States (791), 80, 971);
             Add_Error (Table.States (791));
-            Set_Minimal_Action (Table.States (791).Minimal_Complete_Actions, 
(1 => (Shift, 80, 971)));
+            Table.States (791).Minimal_Complete_Action := (Shift, 80, 971);
             Table.States (792).Productions := WisiToken.To_Vector ((1 => (202, 
5)));
             Add_Action (Table.States (792), 80, 972);
             Add_Error (Table.States (792));
-            Set_Minimal_Action (Table.States (792).Minimal_Complete_Actions, 
(1 => (Shift, 80, 972)));
+            Table.States (792).Minimal_Complete_Action := (Shift, 80, 972);
             Table.States (793).Productions := WisiToken.To_Vector (((109, 3), 
(111, 4), (228, 0), (228, 4)));
             Add_Action (Table.States (793), 34, 880);
             Add_Action (Table.States (793), 39, Reduce, (109, 3), 1, null, 
null);
             Add_Action (Table.States (793), 49, Reduce, (111, 4), 1, null, 
null);
             Add_Error (Table.States (793));
-            Set_Minimal_Action (Table.States (793).Minimal_Complete_Actions, 
((Shift, 34, 880), (Reduce, 109, 1),
-            (Reduce, 111, 1)));
+            Table.States (793).Minimal_Complete_Action := (Reduce, 109, 1);
             Table.States (794).Productions := WisiToken.To_Vector ((1 => (202, 
4)));
             Add_Action (Table.States (794), 80, 973);
             Add_Error (Table.States (794));
-            Set_Minimal_Action (Table.States (794).Minimal_Complete_Actions, 
(1 => (Shift, 80, 973)));
+            Table.States (794).Minimal_Complete_Action := (Shift, 80, 973);
             Table.States (795).Productions := WisiToken.To_Vector ((1 => (202, 
3)));
             Add_Action (Table.States (795), 80, 974);
             Add_Error (Table.States (795));
-            Set_Minimal_Action (Table.States (795).Minimal_Complete_Actions, 
(1 => (Shift, 80, 974)));
+            Table.States (795).Minimal_Complete_Action := (Shift, 80, 974);
             Table.States (796).Productions := WisiToken.To_Vector (((111, 2), 
(111, 3), (201, 1)));
             Add_Action (Table.States (796), 36, 895);
             Add_Action (Table.States (796), 49, Reduce, (111, 3), 1, null, 
null);
@@ -9578,41 +9505,41 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (796), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (796));
             Add_Goto (Table.States (796), 122, 975);
-            Set_Minimal_Action (Table.States (796).Minimal_Complete_Actions, 
((Reduce, 111, 1), (Reduce, 122, 0)));
+            Table.States (796).Minimal_Complete_Action := (Reduce, 111, 1);
             Table.States (797).Productions := WisiToken.To_Vector ((1 => (202, 
2)));
             Add_Action (Table.States (797), 80, 976);
             Add_Error (Table.States (797));
-            Set_Minimal_Action (Table.States (797).Minimal_Complete_Actions, 
(1 => (Shift, 80, 976)));
+            Table.States (797).Minimal_Complete_Action := (Shift, 80, 976);
             Table.States (798).Productions := WisiToken.To_Vector (((203, 0), 
(203, 1)));
             Add_Action (Table.States (798), 39, 977);
             Add_Error (Table.States (798));
-            Set_Minimal_Action (Table.States (798).Minimal_Complete_Actions, 
(1 => (Shift, 39, 977)));
+            Table.States (798).Minimal_Complete_Action := (Shift, 39, 977);
             Table.States (799).Productions := WisiToken.To_Vector ((1 => (202, 
0)));
             Add_Action (Table.States (799), 49, 978);
             Add_Error (Table.States (799));
-            Set_Minimal_Action (Table.States (799).Minimal_Complete_Actions, 
(1 => (Shift, 49, 978)));
+            Table.States (799).Minimal_Complete_Action := (Shift, 49, 978);
             Table.States (800).Productions := WisiToken.To_Vector ((1 => (202, 
9)));
             Add_Action (Table.States (800), (74, 96), (202, 9), 1, null, null);
-            Set_Minimal_Action (Table.States (800).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 1)));
+            Table.States (800).Minimal_Complete_Action := (Reduce, 202, 1);
             Table.States (801).Productions := WisiToken.To_Vector ((1 => (202, 
8)));
             Add_Action (Table.States (801), (74, 96), (202, 8), 1, null, null);
-            Set_Minimal_Action (Table.States (801).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 1)));
+            Table.States (801).Minimal_Complete_Action := (Reduce, 202, 1);
             Table.States (802).Productions := WisiToken.To_Vector ((1 => (201, 
0)));
             Add_Action (Table.States (802), 74, 337);
             Add_Action (Table.States (802), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (802));
             Add_Goto (Table.States (802), 122, 979);
-            Set_Minimal_Action (Table.States (802).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (802).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (803).Productions := WisiToken.To_Vector ((1 => (202, 
1)));
             Add_Action (Table.States (803), (74, 96), (202, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (803).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 1)));
+            Table.States (803).Minimal_Complete_Action := (Reduce, 202, 1);
             Table.States (804).Productions := WisiToken.To_Vector ((1 => (202, 
10)));
             Add_Action (Table.States (804), (74, 96), (202, 10), 1, null, 
null);
-            Set_Minimal_Action (Table.States (804).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 1)));
+            Table.States (804).Minimal_Complete_Action := (Reduce, 202, 1);
             Table.States (805).Productions := WisiToken.To_Vector ((1 => (201, 
2)));
             Add_Action (Table.States (805), (29, 47, 48, 50, 69, 71, 74, 104), 
(201, 2), 5,
             formal_type_declaration_2'Access, null);
-            Set_Minimal_Action (Table.States (805).Minimal_Complete_Actions, 
(1 => (Reduce, 201, 5)));
+            Table.States (805).Minimal_Complete_Action := (Reduce, 201, 5);
             Table.States (806).Productions := WisiToken.To_Vector ((1 => (204, 
0)));
             Add_Action (Table.States (806), 104, 119);
             Add_Action (Table.States (806), 105, 33);
@@ -9622,21 +9549,21 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (806), 239, 980);
             Add_Goto (Table.States (806), 272, 92);
             Add_Goto (Table.States (806), 293, 97);
-            Set_Minimal_Action (Table.States (806).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (806).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (807).Productions := WisiToken.To_Vector ((1 => (200, 
2)));
             Add_Action (Table.States (807), 96, 981);
             Add_Error (Table.States (807));
-            Set_Minimal_Action (Table.States (807).Minimal_Complete_Actions, 
(1 => (Shift, 96, 981)));
+            Table.States (807).Minimal_Complete_Action := (Shift, 96, 981);
             Table.States (808).Productions := WisiToken.To_Vector ((1 => (200, 
0)));
             Add_Action (Table.States (808), 74, 337);
             Add_Action (Table.States (808), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (808));
             Add_Goto (Table.States (808), 122, 982);
-            Set_Minimal_Action (Table.States (808).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (808).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (809).Productions := WisiToken.To_Vector ((1 => (200, 
1)));
             Add_Action (Table.States (809), 96, 983);
             Add_Error (Table.States (809));
-            Set_Minimal_Action (Table.States (809).Minimal_Complete_Actions, 
(1 => (Shift, 96, 983)));
+            Table.States (809).Minimal_Complete_Action := (Shift, 96, 983);
             Table.States (810).Productions := WisiToken.To_Vector ((1 => (198, 
1)));
             Add_Action (Table.States (810), 3, 121);
             Add_Action (Table.States (810), 39, 122);
@@ -9673,11 +9600,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (810), 320, 144);
             Add_Goto (Table.States (810), 321, 145);
             Add_Goto (Table.States (810), 330, 146);
-            Set_Minimal_Action (Table.States (810).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (810).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (811).Productions := WisiToken.To_Vector ((1 => (198, 
3)));
             Add_Action (Table.States (811), 96, 985);
             Add_Error (Table.States (811));
-            Set_Minimal_Action (Table.States (811).Minimal_Complete_Actions, 
(1 => (Shift, 96, 985)));
+            Table.States (811).Minimal_Complete_Action := (Shift, 96, 985);
             Table.States (812).Productions := WisiToken.To_Vector (((128, 0), 
(198, 0), (198, 2), (239, 0), (239, 1),
             (272, 0), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (812), 74, 337);
@@ -9691,20 +9618,19 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (812), 115, 241);
             Add_Goto (Table.States (812), 122, 987);
             Add_Goto (Table.States (812), 322, 242);
-            Set_Minimal_Action (Table.States (812).Minimal_Complete_Actions, 
((Shift, 82, 986), (Shift, 84, 237),
-            (Shift, 102, 240), (Reduce, 122, 0)));
+            Table.States (812).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (813).Productions := WisiToken.To_Vector ((1 => (222, 
1)));
             Add_Action (Table.States (813), 24, 988);
             Add_Error (Table.States (813));
-            Set_Minimal_Action (Table.States (813).Minimal_Complete_Actions, 
(1 => (Shift, 24, 988)));
+            Table.States (813).Minimal_Complete_Action := (Shift, 24, 988);
             Table.States (814).Productions := WisiToken.To_Vector ((1 => (174, 
0)));
             Add_Action (Table.States (814), 68, 989);
             Add_Error (Table.States (814));
-            Set_Minimal_Action (Table.States (814).Minimal_Complete_Actions, 
(1 => (Shift, 68, 989)));
+            Table.States (814).Minimal_Complete_Action := (Shift, 68, 989);
             Table.States (815).Productions := WisiToken.To_Vector ((1 => (222, 
3)));
             Add_Action (Table.States (815), 96, 990);
             Add_Error (Table.States (815));
-            Set_Minimal_Action (Table.States (815).Minimal_Complete_Actions, 
(1 => (Shift, 96, 990)));
+            Table.States (815).Minimal_Complete_Action := (Shift, 96, 990);
             Table.States (816).Productions := WisiToken.To_Vector ((1 => (222, 
0)));
             Add_Action (Table.States (816), 4, 1);
             Add_Action (Table.States (816), 5, 2);
@@ -9761,32 +9687,32 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (816), 303, 101);
             Add_Goto (Table.States (816), 306, 363);
             Add_Goto (Table.States (816), 323, 114);
-            Set_Minimal_Action (Table.States (816).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (816).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (817).Productions := WisiToken.To_Vector ((1 => (222, 
2)));
             Add_Action (Table.States (817), 32, 992);
             Add_Error (Table.States (817));
-            Set_Minimal_Action (Table.States (817).Minimal_Complete_Actions, 
(1 => (Shift, 32, 992)));
+            Table.States (817).Minimal_Complete_Action := (Shift, 32, 992);
             Table.States (818).Productions := WisiToken.To_Vector ((1 => (175, 
0)));
             Add_Action (Table.States (818), (22, 23, 24), (175, 0), 2, null, 
null);
-            Set_Minimal_Action (Table.States (818).Minimal_Complete_Actions, 
(1 => (Reduce, 175, 2)));
+            Table.States (818).Minimal_Complete_Action := (Reduce, 175, 2);
             Table.States (819).Productions := WisiToken.To_Vector ((1 => (248, 
0)));
             Add_Action (Table.States (819), 96, 993);
             Add_Error (Table.States (819));
-            Set_Minimal_Action (Table.States (819).Minimal_Complete_Actions, 
(1 => (Shift, 96, 993)));
+            Table.States (819).Minimal_Complete_Action := (Shift, 96, 993);
             Table.States (820).Productions := WisiToken.To_Vector (((247, 0), 
(247, 1)));
             Add_Action (Table.States (820), 13, 994);
             Add_Action (Table.States (820), 24, 995);
             Add_Error (Table.States (820));
-            Set_Minimal_Action (Table.States (820).Minimal_Complete_Actions, 
((Shift, 13, 994), (Shift, 24, 995)));
+            Table.States (820).Minimal_Complete_Action := (Shift, 24, 995);
             Table.States (821).Productions := WisiToken.To_Vector ((1 => (213, 
0)));
             Add_Action (Table.States (821), 96, 996);
             Add_Error (Table.States (821));
-            Set_Minimal_Action (Table.States (821).Minimal_Complete_Actions, 
(1 => (Shift, 96, 996)));
+            Table.States (821).Minimal_Complete_Action := (Shift, 96, 996);
             Table.States (822).Productions := WisiToken.To_Vector ((1 => (250, 
0)));
             Add_Action (Table.States (822), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (250, 0), 6,
             package_renaming_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (822).Minimal_Complete_Actions, 
(1 => (Reduce, 250, 6)));
+            Table.States (822).Minimal_Complete_Action := (Reduce, 250, 6);
             Table.States (823).Productions := WisiToken.To_Vector ((1 => (251, 
1)));
             Add_Action (Table.States (823), 96, Reduce, (240, 1), 0, null, 
null);
             Add_Action (Table.States (823), 104, 119);
@@ -9798,7 +9724,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (823), 240, 997);
             Add_Goto (Table.States (823), 272, 92);
             Add_Goto (Table.States (823), 293, 97);
-            Set_Minimal_Action (Table.States (823).Minimal_Complete_Actions, 
(1 => (Reduce, 240, 0)));
+            Table.States (823).Minimal_Complete_Action := (Reduce, 240, 0);
             Table.States (824).Productions := WisiToken.To_Vector ((1 => (251, 
0)));
             Add_Action (Table.States (824), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (824), 25, Reduce, (246, 2), 0, null, 
null);
@@ -9870,37 +9796,37 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (824), 319, 113);
             Add_Goto (Table.States (824), 325, 115);
             Add_Goto (Table.States (824), 331, 116);
-            Set_Minimal_Action (Table.States (824).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (824).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (825).Productions := WisiToken.To_Vector ((1 => (257, 
0)));
             Add_Action (Table.States (825), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (257, 0), 6, pragma_g_0'Access, null);
-            Set_Minimal_Action (Table.States (825).Minimal_Complete_Actions, 
(1 => (Reduce, 257, 6)));
+            Table.States (825).Minimal_Complete_Action := (Reduce, 257, 6);
             Table.States (826).Productions := WisiToken.To_Vector ((1 => (257, 
1)));
             Add_Action (Table.States (826), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (257, 1), 6, pragma_g_1'Access, null);
-            Set_Minimal_Action (Table.States (826).Minimal_Complete_Actions, 
(1 => (Reduce, 257, 6)));
+            Table.States (826).Minimal_Complete_Action := (Reduce, 257, 6);
             Table.States (827).Productions := WisiToken.To_Vector ((1 => (265, 
0)));
             Add_Action (Table.States (827), 96, 999);
             Add_Error (Table.States (827));
-            Set_Minimal_Action (Table.States (827).Minimal_Complete_Actions, 
(1 => (Shift, 96, 999)));
+            Table.States (827).Minimal_Complete_Action := (Shift, 96, 999);
             Table.States (828).Productions := WisiToken.To_Vector ((1 => (176, 
0)));
             Add_Action (Table.States (828), 104, 1000);
             Add_Error (Table.States (828));
-            Set_Minimal_Action (Table.States (828).Minimal_Complete_Actions, 
(1 => (Shift, 104, 1000)));
+            Table.States (828).Minimal_Complete_Action := (Shift, 104, 1000);
             Table.States (829).Productions := WisiToken.To_Vector ((1 => (267, 
5)));
             Add_Action (Table.States (829), (24, 25, 28, 29, 40, 46, 50), 
(267, 5), 1, null, null);
-            Set_Minimal_Action (Table.States (829).Minimal_Complete_Actions, 
(1 => (Reduce, 267, 1)));
+            Table.States (829).Minimal_Complete_Action := (Reduce, 267, 1);
             Table.States (830).Productions := WisiToken.To_Vector ((1 => (267, 
2)));
             Add_Action (Table.States (830), (24, 25, 28, 29, 40, 46, 50), 
(267, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (830).Minimal_Complete_Actions, 
(1 => (Reduce, 267, 1)));
+            Table.States (830).Minimal_Complete_Action := (Reduce, 267, 1);
             Table.States (831).Productions := WisiToken.To_Vector ((1 => (267, 
3)));
             Add_Action (Table.States (831), (24, 25, 28, 29, 40, 46, 50), 
(267, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (831).Minimal_Complete_Actions, 
(1 => (Reduce, 267, 1)));
+            Table.States (831).Minimal_Complete_Action := (Reduce, 267, 1);
             Table.States (832).Productions := WisiToken.To_Vector ((1 => (267, 
4)));
             Add_Action (Table.States (832), (24, 25, 28, 29, 40, 46, 50), 
(267, 4), 1, null, null);
-            Set_Minimal_Action (Table.States (832).Minimal_Complete_Actions, 
(1 => (Reduce, 267, 1)));
+            Table.States (832).Minimal_Complete_Action := (Reduce, 267, 1);
             Table.States (833).Productions := WisiToken.To_Vector (((193, 0), 
(243, 0), (307, 0), (309, 0)));
             Add_Action (Table.States (833), 29, 7);
             Add_Action (Table.States (833), 50, 18);
@@ -9908,10 +9834,10 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (833), 207, 246);
             Add_Goto (Table.States (833), 262, 247);
             Add_Goto (Table.States (833), 312, 1001);
-            Set_Minimal_Action (Table.States (833).Minimal_Complete_Actions, 
((Shift, 29, 7), (Shift, 50, 18)));
+            Table.States (833).Minimal_Complete_Action := (Shift, 50, 18);
             Table.States (834).Productions := WisiToken.To_Vector ((1 => (268, 
1)));
             Add_Action (Table.States (834), (24, 25, 28, 29, 40, 46, 50), 
(268, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (834).Minimal_Complete_Actions, 
(1 => (Reduce, 268, 1)));
+            Table.States (834).Minimal_Complete_Action := (Reduce, 268, 1);
             Table.States (835).Productions := WisiToken.To_Vector (((268, 0), 
(269, 0)));
             Add_Action (Table.States (835), 24, Reduce, (269, 0), 1, null, 
null);
             Add_Action (Table.States (835), 25, 828);
@@ -9934,17 +9860,17 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (835), 281, 94);
             Add_Goto (Table.States (835), 307, 837);
             Add_Goto (Table.States (835), 309, 838);
-            Set_Minimal_Action (Table.States (835).Minimal_Complete_Actions, 
(1 => (Reduce, 269, 1)));
+            Table.States (835).Minimal_Complete_Action := (Reduce, 269, 1);
             Table.States (836).Productions := WisiToken.To_Vector ((1 => (264, 
0)));
             Add_Action (Table.States (836), 24, 1003);
             Add_Error (Table.States (836));
-            Set_Minimal_Action (Table.States (836).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1003)));
+            Table.States (836).Minimal_Complete_Action := (Shift, 24, 1003);
             Table.States (837).Productions := WisiToken.To_Vector ((1 => (267, 
1)));
             Add_Action (Table.States (837), (24, 25, 28, 29, 40, 46, 50), 
(267, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (837).Minimal_Complete_Actions, 
(1 => (Reduce, 267, 1)));
+            Table.States (837).Minimal_Complete_Action := (Reduce, 267, 1);
             Table.States (838).Productions := WisiToken.To_Vector ((1 => (267, 
0)));
             Add_Action (Table.States (838), (24, 25, 28, 29, 40, 46, 50), 
(267, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (838).Minimal_Complete_Actions, 
(1 => (Reduce, 267, 1)));
+            Table.States (838).Minimal_Complete_Action := (Reduce, 267, 1);
             Table.States (839).Productions := WisiToken.To_Vector (((271, 0), 
(271, 1)));
             Add_Action (Table.States (839), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (839), 25, Reduce, (246, 2), 0, null, 
null);
@@ -10019,15 +9945,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (839), 319, 113);
             Add_Goto (Table.States (839), 325, 115);
             Add_Goto (Table.States (839), 331, 116);
-            Set_Minimal_Action (Table.States (839).Minimal_Complete_Actions, 
((Shift, 39, 1004), (Reduce, 159, 0)));
-         end Subr_14;
-         procedure Subr_15
-         is begin
+            Table.States (839).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (840).Productions := WisiToken.To_Vector (((227, 0), 
(304, 0)));
             Add_Action (Table.States (840), 10, 1006);
             Add_Action (Table.States (840), 74, 1007);
             Add_Error (Table.States (840));
-            Set_Minimal_Action (Table.States (840).Minimal_Complete_Actions, 
(1 => (Shift, 74, 1007)));
+            Table.States (840).Minimal_Complete_Action := (Shift, 74, 1007);
             Table.States (841).Productions := WisiToken.To_Vector (((128, 0), 
(227, 1), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (841), 10, Reduce, (227, 1), 1, 
interface_list_1'Access, null);
@@ -10040,14 +9963,13 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (841));
             Add_Goto (Table.States (841), 115, 241);
             Add_Goto (Table.States (841), 322, 242);
-            Set_Minimal_Action (Table.States (841).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 227, 1)));
+            Table.States (841).Minimal_Complete_Action := (Reduce, 227, 1);
             Table.States (842).Productions := WisiToken.To_Vector ((1 => (266, 
1)));
             Add_Action (Table.States (842), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (842), 104, 149);
             Add_Error (Table.States (842));
             Add_Goto (Table.States (842), 220, 1008);
-            Set_Minimal_Action (Table.States (842).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (842).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (843).Productions := WisiToken.To_Vector ((1 => (266, 
0)));
             Add_Action (Table.States (843), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (843), 25, Reduce, (246, 2), 0, null, 
null);
@@ -10119,15 +10041,18 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (843), 319, 113);
             Add_Goto (Table.States (843), 325, 115);
             Add_Goto (Table.States (843), 331, 116);
-            Set_Minimal_Action (Table.States (843).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (843).Minimal_Complete_Action := (Reduce, 159, 0);
+         end Subr_14;
+         procedure Subr_15
+         is begin
             Table.States (844).Productions := WisiToken.To_Vector ((1 => (304, 
1)));
             Add_Action (Table.States (844), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (304, 1), 6,
             single_protected_declaration_1'Access, 
single_protected_declaration_1_check'Access);
-            Set_Minimal_Action (Table.States (844).Minimal_Complete_Actions, 
(1 => (Reduce, 304, 6)));
+            Table.States (844).Minimal_Complete_Action := (Reduce, 304, 6);
             Table.States (845).Productions := WisiToken.To_Vector ((1 => (292, 
1)));
             Add_Action (Table.States (845), (21, 82, 96), (292, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (845).Minimal_Complete_Actions, 
(1 => (Reduce, 292, 1)));
+            Table.States (845).Minimal_Complete_Action := (Reduce, 292, 1);
             Table.States (846).Productions := WisiToken.To_Vector (((194, 0), 
(194, 1)));
             Add_Action (Table.States (846), 21, Reduce, (194, 1), 5, 
extended_return_object_declaration_1'Access,
             null);
@@ -10135,14 +10060,14 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (846), 96, Reduce, (194, 1), 5, 
extended_return_object_declaration_1'Access,
             null);
             Add_Error (Table.States (846));
-            Set_Minimal_Action (Table.States (846).Minimal_Complete_Actions, 
(1 => (Reduce, 194, 5)));
+            Table.States (846).Minimal_Complete_Action := (Reduce, 194, 5);
             Table.States (847).Productions := WisiToken.To_Vector ((1 => (292, 
0)));
             Add_Action (Table.States (847), (21, 82, 96), (292, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (847).Minimal_Complete_Actions, 
(1 => (Reduce, 292, 1)));
+            Table.States (847).Minimal_Complete_Action := (Reduce, 292, 1);
             Table.States (848).Productions := WisiToken.To_Vector ((1 => (196, 
0)));
             Add_Action (Table.States (848), 96, 1011);
             Add_Error (Table.States (848));
-            Set_Minimal_Action (Table.States (848).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1011)));
+            Table.States (848).Minimal_Complete_Action := (Shift, 96, 1011);
             Table.States (849).Productions := WisiToken.To_Vector (((247, 0), 
(247, 1)));
             Add_Action (Table.States (849), 104, 119);
             Add_Action (Table.States (849), 105, 33);
@@ -10152,56 +10077,56 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (849), 239, 1012);
             Add_Goto (Table.States (849), 272, 92);
             Add_Goto (Table.States (849), 293, 97);
-            Set_Minimal_Action (Table.States (849).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (849).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (850).Productions := WisiToken.To_Vector ((1 => (264, 
0)));
             Add_Action (Table.States (850), 104, 1013);
             Add_Error (Table.States (850));
-            Set_Minimal_Action (Table.States (850).Minimal_Complete_Actions, 
(1 => (Shift, 104, 1013)));
+            Table.States (850).Minimal_Complete_Action := (Shift, 104, 1013);
             Table.States (851).Productions := WisiToken.To_Vector ((1 => (316, 
0)));
             Add_Action (Table.States (851), 104, 1014);
             Add_Error (Table.States (851));
-            Set_Minimal_Action (Table.States (851).Minimal_Complete_Actions, 
(1 => (Shift, 104, 1014)));
+            Table.States (851).Minimal_Complete_Action := (Shift, 104, 1014);
             Table.States (852).Productions := WisiToken.To_Vector ((1 => (307, 
0)));
             Add_Action (Table.States (852), 35, Reduce, (122, 1), 0, null, 
null);
             Add_Action (Table.States (852), 74, 337);
             Add_Error (Table.States (852));
             Add_Goto (Table.States (852), 122, 1015);
-            Set_Minimal_Action (Table.States (852).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (852).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (853).Productions := WisiToken.To_Vector ((1 => (295, 
1)));
             Add_Action (Table.States (853), (22, 24, 43), (295, 1), 5, 
select_alternative_1'Access, null);
-            Set_Minimal_Action (Table.States (853).Minimal_Complete_Actions, 
(1 => (Reduce, 295, 5)));
+            Table.States (853).Minimal_Complete_Action := (Reduce, 295, 5);
             Table.States (854).Productions := WisiToken.To_Vector ((1 => (295, 
0)));
             Add_Action (Table.States (854), (22, 24, 43), (295, 0), 5, 
select_alternative_0'Access, null);
-            Set_Minimal_Action (Table.States (854).Minimal_Complete_Actions, 
(1 => (Reduce, 295, 5)));
+            Table.States (854).Minimal_Complete_Action := (Reduce, 295, 5);
             Table.States (855).Productions := WisiToken.To_Vector ((1 => (152, 
0)));
             Add_Action (Table.States (855), 96, 1016);
             Add_Error (Table.States (855));
-            Set_Minimal_Action (Table.States (855).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1016)));
+            Table.States (855).Minimal_Complete_Action := (Shift, 96, 1016);
             Table.States (856).Productions := WisiToken.To_Vector ((1 => (323, 
0)));
             Add_Action (Table.States (856), 96, 1017);
             Add_Error (Table.States (856));
-            Set_Minimal_Action (Table.States (856).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1017)));
+            Table.States (856).Minimal_Complete_Action := (Shift, 96, 1017);
             Table.States (857).Productions := WisiToken.To_Vector ((1 => (294, 
0)));
             Add_Action (Table.States (857), 96, 1018);
             Add_Error (Table.States (857));
-            Set_Minimal_Action (Table.States (857).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1018)));
+            Table.States (857).Minimal_Complete_Action := (Shift, 96, 1018);
             Table.States (858).Productions := WisiToken.To_Vector ((1 => (126, 
0)));
             Add_Action (Table.States (858), 61, 1019);
             Add_Error (Table.States (858));
-            Set_Minimal_Action (Table.States (858).Minimal_Complete_Actions, 
(1 => (Shift, 61, 1019)));
+            Table.States (858).Minimal_Complete_Action := (Shift, 61, 1019);
             Table.States (859).Productions := WisiToken.To_Vector ((1 => (313, 
0)));
             Add_Action (Table.States (859), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (313, 0), 6,
             subtype_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (859).Minimal_Complete_Actions, 
(1 => (Reduce, 313, 6)));
+            Table.States (859).Minimal_Complete_Action := (Reduce, 313, 6);
             Table.States (860).Productions := WisiToken.To_Vector ((1 => (317, 
0)));
             Add_Action (Table.States (860), 96, 1020);
             Add_Error (Table.States (860));
-            Set_Minimal_Action (Table.States (860).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1020)));
+            Table.States (860).Minimal_Complete_Action := (Shift, 96, 1020);
             Table.States (861).Productions := WisiToken.To_Vector ((1 => (316, 
0)));
             Add_Action (Table.States (861), 13, 1021);
             Add_Error (Table.States (861));
-            Set_Minimal_Action (Table.States (861).Minimal_Complete_Actions, 
(1 => (Shift, 13, 1021)));
+            Table.States (861).Minimal_Complete_Action := (Shift, 13, 1021);
             Table.States (862).Productions := WisiToken.To_Vector (((319, 0), 
(319, 1)));
             Add_Action (Table.States (862), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (862), 25, Reduce, (246, 2), 0, null, 
null);
@@ -10276,17 +10201,17 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (862), 319, 113);
             Add_Goto (Table.States (862), 325, 115);
             Add_Goto (Table.States (862), 331, 116);
-            Set_Minimal_Action (Table.States (862).Minimal_Complete_Actions, 
((Shift, 39, 1022), (Reduce, 318, 0)));
+            Table.States (862).Minimal_Complete_Action := (Reduce, 318, 0);
             Table.States (863).Productions := WisiToken.To_Vector ((1 => (319, 
2)));
             Add_Action (Table.States (863), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (319, 2), 6,
             task_type_declaration_2'Access, null);
-            Set_Minimal_Action (Table.States (863).Minimal_Complete_Actions, 
(1 => (Reduce, 319, 6)));
+            Table.States (863).Minimal_Complete_Action := (Reduce, 319, 6);
             Table.States (864).Productions := WisiToken.To_Vector (((227, 0), 
(305, 0)));
             Add_Action (Table.States (864), 10, 1006);
             Add_Action (Table.States (864), 74, 1024);
             Add_Error (Table.States (864));
-            Set_Minimal_Action (Table.States (864).Minimal_Complete_Actions, 
(1 => (Shift, 74, 1024)));
+            Table.States (864).Minimal_Complete_Action := (Shift, 74, 1024);
             Table.States (865).Productions := WisiToken.To_Vector ((1 => (318, 
0)));
             Add_Action (Table.States (865), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (865), 25, Reduce, (246, 2), 0, null, 
null);
@@ -10358,20 +10283,20 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (865), 319, 113);
             Add_Goto (Table.States (865), 325, 115);
             Add_Goto (Table.States (865), 331, 116);
-            Set_Minimal_Action (Table.States (865).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (865).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (866).Productions := WisiToken.To_Vector ((1 => (305, 
1)));
             Add_Action (Table.States (866), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (866), 104, 149);
             Add_Error (Table.States (866));
             Add_Goto (Table.States (866), 220, 1026);
-            Set_Minimal_Action (Table.States (866).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (866).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (867).Productions := WisiToken.To_Vector ((1 => (171, 
0)));
             Add_Action (Table.States (867), (77, 96), (171, 0), 3, null, null);
-            Set_Minimal_Action (Table.States (867).Minimal_Complete_Actions, 
(1 => (Reduce, 171, 3)));
+            Table.States (867).Minimal_Complete_Action := (Reduce, 171, 3);
             Table.States (868).Productions := WisiToken.To_Vector (((241, 0), 
(242, 2), (242, 3)));
             Add_Action (Table.States (868), 41, 1027);
             Add_Error (Table.States (868));
-            Set_Minimal_Action (Table.States (868).Minimal_Complete_Actions, 
(1 => (Shift, 41, 1027)));
+            Table.States (868).Minimal_Complete_Action := (Shift, 41, 1027);
             Table.States (869).Productions := WisiToken.To_Vector (((239, 5), 
(242, 0)));
             Add_Action (Table.States (869), 76, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (869), 77, Reduce, (242, 0), 1, 
null_exclusion_opt_name_type_0'Access, null);
@@ -10381,13 +10306,13 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (869), 101, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (869), 102, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Error (Table.States (869));
-            Set_Minimal_Action (Table.States (869).Minimal_Complete_Actions, 
((Reduce, 239, 1), (Reduce, 242, 1)));
+            Table.States (869).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (870).Productions := WisiToken.To_Vector (((170, 1), 
(170, 3)));
             Add_Action (Table.States (870), 77, Reduce, (170, 3), 3, null, 
null);
             Add_Action (Table.States (870), 82, 1028);
             Add_Action (Table.States (870), 96, Reduce, (170, 3), 3, null, 
null);
             Add_Error (Table.States (870));
-            Set_Minimal_Action (Table.States (870).Minimal_Complete_Actions, 
(1 => (Reduce, 170, 3)));
+            Table.States (870).Minimal_Complete_Action := (Reduce, 170, 3);
             Table.States (871).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (272, 0), (293, 0),
             (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (871), 76, 235);
@@ -10397,13 +10322,12 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (871));
             Add_Goto (Table.States (871), 115, 241);
             Add_Goto (Table.States (871), 322, 242);
-            Set_Minimal_Action (Table.States (871).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240)));
             Table.States (872).Productions := WisiToken.To_Vector (((170, 0), 
(170, 2)));
             Add_Action (Table.States (872), 77, Reduce, (170, 2), 3, null, 
null);
             Add_Action (Table.States (872), 82, 1029);
             Add_Action (Table.States (872), 96, Reduce, (170, 2), 3, null, 
null);
             Add_Error (Table.States (872));
-            Set_Minimal_Action (Table.States (872).Minimal_Complete_Actions, 
(1 => (Reduce, 170, 3)));
+            Table.States (872).Minimal_Complete_Action := (Reduce, 170, 3);
             Table.States (873).Productions := WisiToken.To_Vector (((239, 2), 
(242, 1)));
             Add_Action (Table.States (873), 76, Reduce, (239, 2), 1, null, 
name_2_check'Access);
             Add_Action (Table.States (873), 77, Reduce, (242, 1), 1, 
null_exclusion_opt_name_type_1'Access, null);
@@ -10413,21 +10337,21 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (873), 101, Reduce, (239, 2), 1, null, 
name_2_check'Access);
             Add_Action (Table.States (873), 102, Reduce, (239, 2), 1, null, 
name_2_check'Access);
             Add_Error (Table.States (873));
-            Set_Minimal_Action (Table.States (873).Minimal_Complete_Actions, 
((Reduce, 239, 1), (Reduce, 242, 1)));
+            Table.States (873).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (874).Productions := WisiToken.To_Vector (((109, 0), 
(110, 0)));
             Add_Action (Table.States (874), 39, Reduce, (109, 0), 2, null, 
null, (110, 0), 2, null, null);
             Add_Error (Table.States (874));
-            Set_Minimal_Action (Table.States (874).Minimal_Complete_Actions, 
((Reduce, 109, 2), (Reduce, 110, 2)));
+            Table.States (874).Minimal_Complete_Action := (Reduce, 109, 2);
             Table.States (875).Productions := WisiToken.To_Vector ((1 => (109, 
1)));
             Add_Action (Table.States (875), (1 =>  39), (109, 1), 2, null, 
null);
-            Set_Minimal_Action (Table.States (875).Minimal_Complete_Actions, 
(1 => (Reduce, 109, 2)));
+            Table.States (875).Minimal_Complete_Action := (Reduce, 109, 2);
             Table.States (876).Productions := WisiToken.To_Vector (((111, 0), 
(111, 1)));
             Add_Action (Table.States (876), 36, 1030);
             Add_Action (Table.States (876), 41, Reduce, (111, 1), 2, null, 
null);
             Add_Action (Table.States (876), 49, Reduce, (111, 1), 2, null, 
null);
             Add_Action (Table.States (876), 54, Reduce, (111, 1), 2, null, 
null);
             Add_Error (Table.States (876));
-            Set_Minimal_Action (Table.States (876).Minimal_Complete_Actions, 
(1 => (Reduce, 111, 2)));
+            Table.States (876).Minimal_Complete_Action := (Reduce, 111, 2);
             Table.States (877).Productions := WisiToken.To_Vector (((120, 0), 
(120, 1)));
             Add_Action (Table.States (877), 3, 121);
             Add_Action (Table.States (877), 39, 122);
@@ -10458,7 +10382,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (877), 320, 144);
             Add_Goto (Table.States (877), 321, 145);
             Add_Goto (Table.States (877), 330, 146);
-            Set_Minimal_Action (Table.States (877).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (877).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (878).Productions := WisiToken.To_Vector (((326, 4), 
(326, 5)));
             Add_Action (Table.States (878), 20, 1035);
             Add_Action (Table.States (878), 53, 1036);
@@ -10466,36 +10390,36 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (878), 96, Reduce, (279, 1), 0, null, 
null);
             Add_Error (Table.States (878));
             Add_Goto (Table.States (878), 279, 1037);
-            Set_Minimal_Action (Table.States (878).Minimal_Complete_Actions, 
((Shift, 20, 1035), (Reduce, 279, 0)));
+            Table.States (878).Minimal_Complete_Action := (Reduce, 279, 0);
             Table.States (879).Productions := WisiToken.To_Vector ((1 => (326, 
3)));
             Add_Action (Table.States (879), 53, 1036);
             Add_Action (Table.States (879), 74, Reduce, (279, 1), 0, null, 
null);
             Add_Action (Table.States (879), 96, Reduce, (279, 1), 0, null, 
null);
             Add_Error (Table.States (879));
             Add_Goto (Table.States (879), 279, 1038);
-            Set_Minimal_Action (Table.States (879).Minimal_Complete_Actions, 
(1 => (Reduce, 279, 0)));
+            Table.States (879).Minimal_Complete_Action := (Reduce, 279, 0);
             Table.States (880).Productions := WisiToken.To_Vector (((228, 0), 
(228, 4)));
             Add_Action (Table.States (880), 10, 1039);
             Add_Action (Table.States (880), 74, Reduce, (228, 4), 2, null, 
null);
             Add_Action (Table.States (880), 96, Reduce, (228, 4), 2, null, 
null);
             Add_Error (Table.States (880));
-            Set_Minimal_Action (Table.States (880).Minimal_Complete_Actions, 
(1 => (Reduce, 228, 2)));
+            Table.States (880).Minimal_Complete_Action := (Reduce, 228, 2);
             Table.States (881).Productions := WisiToken.To_Vector ((1 => (326, 
2)));
             Add_Action (Table.States (881), (74, 96), (326, 2), 2, null, null);
-            Set_Minimal_Action (Table.States (881).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 2)));
+            Table.States (881).Minimal_Complete_Action := (Reduce, 326, 2);
             Table.States (882).Productions := WisiToken.To_Vector ((1 => (280, 
1)));
             Add_Action (Table.States (882), (74, 96), (280, 1), 2, null, null);
-            Set_Minimal_Action (Table.States (882).Minimal_Complete_Actions, 
(1 => (Reduce, 280, 2)));
+            Table.States (882).Minimal_Complete_Action := (Reduce, 280, 2);
             Table.States (883).Productions := WisiToken.To_Vector (((228, 2), 
(228, 6)));
             Add_Action (Table.States (883), 10, 1040);
             Add_Action (Table.States (883), 74, Reduce, (228, 6), 2, null, 
null);
             Add_Action (Table.States (883), 96, Reduce, (228, 6), 2, null, 
null);
             Add_Error (Table.States (883));
-            Set_Minimal_Action (Table.States (883).Minimal_Complete_Actions, 
(1 => (Reduce, 228, 2)));
+            Table.States (883).Minimal_Complete_Action := (Reduce, 228, 2);
             Table.States (884).Productions := WisiToken.To_Vector ((1 => (326, 
1)));
             Add_Action (Table.States (884), 85, 1041);
             Add_Error (Table.States (884));
-            Set_Minimal_Action (Table.States (884).Minimal_Complete_Actions, 
(1 => (Shift, 85, 1041)));
+            Table.States (884).Minimal_Complete_Action := (Shift, 85, 1041);
             Table.States (885).Productions := WisiToken.To_Vector ((1 => (327, 
0)));
             Add_Action (Table.States (885), 35, Reduce, (164, 1), 0, null, 
null);
             Add_Action (Table.States (885), 104, 1042);
@@ -10503,20 +10427,20 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (885));
             Add_Goto (Table.States (885), 163, 1044);
             Add_Goto (Table.States (885), 164, 1045);
-            Set_Minimal_Action (Table.States (885).Minimal_Complete_Actions, 
(1 => (Reduce, 164, 0)));
+            Table.States (885).Minimal_Complete_Action := (Reduce, 164, 0);
             Table.States (886).Productions := WisiToken.To_Vector ((1 => (149, 
4)));
             Add_Action (Table.States (886), 96, 1046);
             Add_Error (Table.States (886));
-            Set_Minimal_Action (Table.States (886).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1046)));
+            Table.States (886).Minimal_Complete_Action := (Shift, 96, 1046);
             Table.States (887).Productions := WisiToken.To_Vector ((1 => (148, 
1)));
             Add_Action (Table.States (887), (15, 24, 28, 72, 104), (148, 1), 
1, null, null);
-            Set_Minimal_Action (Table.States (887).Minimal_Complete_Actions, 
(1 => (Reduce, 148, 1)));
+            Table.States (887).Minimal_Complete_Action := (Reduce, 148, 1);
             Table.States (888).Productions := WisiToken.To_Vector ((1 => (148, 
0)));
             Add_Action (Table.States (888), (15, 24, 28, 72, 104), (148, 0), 
1, null, null);
-            Set_Minimal_Action (Table.States (888).Minimal_Complete_Actions, 
(1 => (Reduce, 148, 1)));
+            Table.States (888).Minimal_Complete_Action := (Reduce, 148, 1);
             Table.States (889).Productions := WisiToken.To_Vector ((1 => (149, 
2)));
             Add_Action (Table.States (889), (15, 24, 28, 72, 104), (149, 2), 
1, null, null);
-            Set_Minimal_Action (Table.States (889).Minimal_Complete_Actions, 
(1 => (Reduce, 149, 1)));
+            Table.States (889).Minimal_Complete_Action := (Reduce, 149, 1);
             Table.States (890).Productions := WisiToken.To_Vector (((149, 0), 
(149, 1), (150, 0)));
             Add_Action (Table.States (890), 15, 885);
             Add_Action (Table.States (890), 24, Reduce, (150, 0), 1, null, 
null);
@@ -10532,53 +10456,53 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (890), 219, 892);
             Add_Goto (Table.States (890), 281, 94);
             Add_Goto (Table.States (890), 327, 1048);
-            Set_Minimal_Action (Table.States (890).Minimal_Complete_Actions, 
(1 => (Reduce, 150, 1)));
+            Table.States (890).Minimal_Complete_Action := (Reduce, 150, 1);
             Table.States (891).Productions := WisiToken.To_Vector ((1 => (280, 
0)));
             Add_Action (Table.States (891), 24, 1049);
             Add_Error (Table.States (891));
-            Set_Minimal_Action (Table.States (891).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1049)));
+            Table.States (891).Minimal_Complete_Action := (Shift, 24, 1049);
             Table.States (892).Productions := WisiToken.To_Vector (((146, 0), 
(146, 1), (219, 0)));
             Add_Action (Table.States (892), 81, 1050);
             Add_Action (Table.States (892), 83, 234);
             Add_Error (Table.States (892));
-            Set_Minimal_Action (Table.States (892).Minimal_Complete_Actions, 
(1 => (Shift, 81, 1050)));
+            Table.States (892).Minimal_Complete_Action := (Shift, 81, 1050);
             Table.States (893).Productions := WisiToken.To_Vector ((1 => (149, 
3)));
             Add_Action (Table.States (893), (15, 24, 28, 72, 104), (149, 3), 
1, null, null);
-            Set_Minimal_Action (Table.States (893).Minimal_Complete_Actions, 
(1 => (Reduce, 149, 1)));
+            Table.States (893).Minimal_Complete_Action := (Reduce, 149, 1);
             Table.States (894).Productions := WisiToken.To_Vector (((228, 3), 
(228, 7)));
             Add_Action (Table.States (894), 10, 1051);
             Add_Action (Table.States (894), 74, Reduce, (228, 7), 2, null, 
null);
             Add_Action (Table.States (894), 96, Reduce, (228, 7), 2, null, 
null);
             Add_Error (Table.States (894));
-            Set_Minimal_Action (Table.States (894).Minimal_Complete_Actions, 
(1 => (Reduce, 228, 2)));
+            Table.States (894).Minimal_Complete_Action := (Reduce, 228, 2);
             Table.States (895).Productions := WisiToken.To_Vector ((1 => (111, 
2)));
             Add_Action (Table.States (895), (41, 49, 54), (111, 2), 2, null, 
null);
-            Set_Minimal_Action (Table.States (895).Minimal_Complete_Actions, 
(1 => (Reduce, 111, 2)));
+            Table.States (895).Minimal_Complete_Action := (Reduce, 111, 2);
             Table.States (896).Productions := WisiToken.To_Vector ((1 => (223, 
0)));
             Add_Action (Table.States (896), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (223, 0), 6,
             incomplete_type_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (896).Minimal_Complete_Actions, 
(1 => (Reduce, 223, 6)));
+            Table.States (896).Minimal_Complete_Action := (Reduce, 223, 6);
             Table.States (897).Productions := WisiToken.To_Vector (((228, 1), 
(228, 5)));
             Add_Action (Table.States (897), 10, 1052);
             Add_Action (Table.States (897), 74, Reduce, (228, 5), 2, null, 
null);
             Add_Action (Table.States (897), 96, Reduce, (228, 5), 2, null, 
null);
             Add_Error (Table.States (897));
-            Set_Minimal_Action (Table.States (897).Minimal_Complete_Actions, 
(1 => (Reduce, 228, 2)));
+            Table.States (897).Minimal_Complete_Action := (Reduce, 228, 2);
             Table.States (898).Productions := WisiToken.To_Vector ((1 => (180, 
0)));
             Add_Action (Table.States (898), (77, 83), (180, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (898).Minimal_Complete_Actions, 
(1 => (Reduce, 180, 1)));
+            Table.States (898).Minimal_Complete_Action := (Reduce, 180, 1);
             Table.States (899).Productions := WisiToken.To_Vector ((1 => (180, 
1)));
             Add_Action (Table.States (899), (77, 83), (180, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (899).Minimal_Complete_Actions, 
(1 => (Reduce, 180, 1)));
+            Table.States (899).Minimal_Complete_Action := (Reduce, 180, 1);
             Table.States (900).Productions := WisiToken.To_Vector ((1 => (181, 
1)));
             Add_Action (Table.States (900), (77, 83), (181, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (900).Minimal_Complete_Actions, 
(1 => (Reduce, 181, 1)));
+            Table.States (900).Minimal_Complete_Action := (Reduce, 181, 1);
             Table.States (901).Productions := WisiToken.To_Vector (((181, 0), 
(183, 0)));
             Add_Action (Table.States (901), 77, 1053);
             Add_Action (Table.States (901), 83, 1054);
             Add_Error (Table.States (901));
-            Set_Minimal_Action (Table.States (901).Minimal_Complete_Actions, 
(1 => (Shift, 77, 1053)));
+            Table.States (901).Minimal_Complete_Action := (Shift, 77, 1053);
             Table.States (902).Productions := WisiToken.To_Vector ((1 => (259, 
0)));
             Add_Action (Table.States (902), 40, 483);
             Add_Action (Table.States (902), 104, 119);
@@ -10590,7 +10514,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (902), 272, 92);
             Add_Goto (Table.States (902), 293, 97);
             Add_Goto (Table.States (902), 314, 1055);
-            Set_Minimal_Action (Table.States (902).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (902).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (903).Productions := WisiToken.To_Vector (((162, 0), 
(162, 1)));
             Add_Action (Table.States (903), 104, 119);
             Add_Action (Table.States (903), 105, 33);
@@ -10600,28 +10524,28 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (903), 239, 1056);
             Add_Goto (Table.States (903), 272, 92);
             Add_Goto (Table.States (903), 293, 97);
-            Set_Minimal_Action (Table.States (903).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (903).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (904).Productions := WisiToken.To_Vector ((1 => (260, 
0)));
             Add_Action (Table.States (904), 74, 337);
             Add_Action (Table.States (904), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (904));
             Add_Goto (Table.States (904), 122, 1057);
-            Set_Minimal_Action (Table.States (904).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (904).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (905).Productions := WisiToken.To_Vector ((1 => (326, 
7)));
             Add_Action (Table.States (905), (74, 96), (326, 7), 2, null, null);
-            Set_Minimal_Action (Table.States (905).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 2)));
+            Table.States (905).Minimal_Complete_Action := (Reduce, 326, 2);
             Table.States (906).Productions := WisiToken.To_Vector ((1 => (206, 
0)));
             Add_Action (Table.States (906), 96, 1058);
             Add_Error (Table.States (906));
-            Set_Minimal_Action (Table.States (906).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1058)));
+            Table.States (906).Minimal_Complete_Action := (Shift, 96, 1058);
             Table.States (907).Productions := WisiToken.To_Vector ((1 => (245, 
2)));
             Add_Action (Table.States (907), 96, 1059);
             Add_Error (Table.States (907));
-            Set_Minimal_Action (Table.States (907).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1059)));
+            Table.States (907).Minimal_Complete_Action := (Shift, 96, 1059);
             Table.States (908).Productions := WisiToken.To_Vector ((1 => (245, 
1)));
             Add_Action (Table.States (908), 96, 1060);
             Add_Error (Table.States (908));
-            Set_Minimal_Action (Table.States (908).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1060)));
+            Table.States (908).Minimal_Complete_Action := (Shift, 96, 1060);
             Table.States (909).Productions := WisiToken.To_Vector (((114, 2), 
(128, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (909), 21, Reduce, (114, 2), 4, 
access_definition_2'Access, null);
@@ -10638,8 +10562,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (909));
             Add_Goto (Table.States (909), 115, 241);
             Add_Goto (Table.States (909), 322, 242);
-            Set_Minimal_Action (Table.States (909).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 114, 4)));
+            Table.States (909).Minimal_Complete_Action := (Reduce, 114, 4);
             Table.States (910).Productions := WisiToken.To_Vector ((1 => (114, 
1)));
             Add_Action (Table.States (910), 58, 317);
             Add_Action (Table.States (910), 76, 431);
@@ -10647,7 +10570,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (910), 199, 319);
             Add_Goto (Table.States (910), 252, 1061);
             Add_Goto (Table.States (910), 291, 321);
-            Set_Minimal_Action (Table.States (910).Minimal_Complete_Actions, 
(1 => (Shift, 58, 317)));
+            Table.States (910).Minimal_Complete_Action := (Shift, 58, 317);
             Table.States (911).Productions := WisiToken.To_Vector ((1 => (114, 
0)));
             Add_Action (Table.States (911), 21, Reduce, (253, 1), 0, null, 
null);
             Add_Action (Table.States (911), 35, Reduce, (253, 1), 0, null, 
null);
@@ -10660,7 +10583,7 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (911));
             Add_Goto (Table.States (911), 199, 344);
             Add_Goto (Table.States (911), 253, 1062);
-            Set_Minimal_Action (Table.States (911).Minimal_Complete_Actions, 
(1 => (Reduce, 253, 0)));
+            Table.States (911).Minimal_Complete_Action := (Reduce, 253, 0);
             Table.States (912).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (245, 0), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (912), 74, 337);
@@ -10673,16 +10596,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (912), 115, 241);
             Add_Goto (Table.States (912), 122, 1063);
             Add_Goto (Table.States (912), 322, 242);
-            Set_Minimal_Action (Table.States (912).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (912).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (913).Productions := WisiToken.To_Vector ((1 => (133, 
1)));
             Add_Action (Table.States (913), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (133, 1), 6, block_statement_1'Access, 
block_statement_1_check'Access);
-            Set_Minimal_Action (Table.States (913).Minimal_Complete_Actions, 
(1 => (Reduce, 133, 6)));
+            Table.States (913).Minimal_Complete_Action := (Reduce, 133, 6);
             Table.States (914).Productions := WisiToken.To_Vector ((1 => (184, 
1)));
             Add_Action (Table.States (914), (79, 87), (184, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (914).Minimal_Complete_Actions, 
(1 => (Reduce, 184, 1)));
+            Table.States (914).Minimal_Complete_Action := (Reduce, 184, 1);
             Table.States (915).Productions := WisiToken.To_Vector (((187, 0), 
(239, 5)));
             Add_Action (Table.States (915), 76, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (915), 79, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
@@ -10692,15 +10614,15 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (915), 101, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (915), 102, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Error (Table.States (915));
-            Set_Minimal_Action (Table.States (915).Minimal_Complete_Actions, 
((Shift, 81, 1064), (Reduce, 239, 1)));
+            Table.States (915).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (916).Productions := WisiToken.To_Vector ((1 => (185, 
1)));
             Add_Action (Table.States (916), (79, 87), (185, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (916).Minimal_Complete_Actions, 
(1 => (Reduce, 185, 1)));
+            Table.States (916).Minimal_Complete_Action := (Reduce, 185, 1);
             Table.States (917).Productions := WisiToken.To_Vector (((185, 0), 
(187, 1)));
             Add_Action (Table.States (917), 79, 1065);
             Add_Action (Table.States (917), 87, 1066);
             Add_Error (Table.States (917));
-            Set_Minimal_Action (Table.States (917).Minimal_Complete_Actions, 
(1 => (Shift, 87, 1066)));
+            Table.States (917).Minimal_Complete_Action := (Shift, 87, 1066);
             Table.States (918).Productions := WisiToken.To_Vector (((128, 0), 
(184, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (918), 76, 235);
@@ -10712,35 +10634,31 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (918));
             Add_Goto (Table.States (918), 115, 241);
             Add_Goto (Table.States (918), 322, 242);
-            Set_Minimal_Action (Table.States (918).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 184, 1)));
+            Table.States (918).Minimal_Complete_Action := (Reduce, 184, 1);
             Table.States (919).Productions := WisiToken.To_Vector ((1 => (188, 
0)));
             Add_Action (Table.States (919), (24, 72), (188, 0), 2, null, null);
-            Set_Minimal_Action (Table.States (919).Minimal_Complete_Actions, 
(1 => (Reduce, 188, 2)));
+            Table.States (919).Minimal_Complete_Action := (Reduce, 188, 2);
             Table.States (920).Productions := WisiToken.To_Vector ((1 => (133, 
0)));
             Add_Action (Table.States (920), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (920), 104, 149);
             Add_Error (Table.States (920));
             Add_Goto (Table.States (920), 220, 1067);
-            Set_Minimal_Action (Table.States (920).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (920).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (921).Productions := WisiToken.To_Vector ((1 => (232, 
1)));
             Add_Action (Table.States (921), 96, 1068);
             Add_Error (Table.States (921));
-            Set_Minimal_Action (Table.States (921).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1068)));
-         end Subr_15;
-         procedure Subr_16
-         is begin
+            Table.States (921).Minimal_Complete_Action := (Shift, 96, 1068);
             Table.States (922).Productions := WisiToken.To_Vector ((1 => (232, 
0)));
             Add_Action (Table.States (922), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (922), 104, 149);
             Add_Error (Table.States (922));
             Add_Goto (Table.States (922), 220, 1069);
-            Set_Minimal_Action (Table.States (922).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (922).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (923).Productions := WisiToken.To_Vector ((1 => (157, 
9)));
             Add_Action (Table.States (923), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (157, 9), 6,
             declaration_9'Access, null);
-            Set_Minimal_Action (Table.States (923).Minimal_Complete_Actions, 
(1 => (Reduce, 157, 6)));
+            Table.States (923).Minimal_Complete_Action := (Reduce, 157, 6);
             Table.States (924).Productions := WisiToken.To_Vector (((241, 0), 
(314, 0), (314, 1)));
             Add_Action (Table.States (924), 7, Reduce, (241, 0), 2, null, 
null);
             Add_Action (Table.States (924), 104, 119);
@@ -10751,7 +10669,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (924), 239, 772);
             Add_Goto (Table.States (924), 272, 92);
             Add_Goto (Table.States (924), 293, 97);
-            Set_Minimal_Action (Table.States (924).Minimal_Complete_Actions, 
((Shift, 105, 33), (Reduce, 241, 2)));
+            Table.States (924).Minimal_Complete_Action := (Reduce, 241, 2);
             Table.States (925).Productions := WisiToken.To_Vector ((1 => (244, 
1)));
             Add_Action (Table.States (925), 3, 121);
             Add_Action (Table.States (925), 39, 122);
@@ -10788,11 +10706,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (925), 320, 144);
             Add_Goto (Table.States (925), 321, 145);
             Add_Goto (Table.States (925), 330, 146);
-            Set_Minimal_Action (Table.States (925).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (925).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (926).Productions := WisiToken.To_Vector ((1 => (244, 
4)));
             Add_Action (Table.States (926), 96, 1071);
             Add_Error (Table.States (926));
-            Set_Minimal_Action (Table.States (926).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1071)));
+            Table.States (926).Minimal_Complete_Action := (Shift, 96, 1071);
             Table.States (927).Productions := WisiToken.To_Vector ((1 => (244, 
2)));
             Add_Action (Table.States (927), 3, 121);
             Add_Action (Table.States (927), 39, 122);
@@ -10829,11 +10747,14 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (927), 320, 144);
             Add_Goto (Table.States (927), 321, 145);
             Add_Goto (Table.States (927), 330, 146);
-            Set_Minimal_Action (Table.States (927).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (927).Minimal_Complete_Action := (Reduce, 192, 0);
+         end Subr_15;
+         procedure Subr_16
+         is begin
             Table.States (928).Productions := WisiToken.To_Vector ((1 => (244, 
5)));
             Add_Action (Table.States (928), 96, 1073);
             Add_Error (Table.States (928));
-            Set_Minimal_Action (Table.States (928).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1073)));
+            Table.States (928).Minimal_Complete_Action := (Shift, 96, 1073);
             Table.States (929).Productions := WisiToken.To_Vector ((1 => (244, 
0)));
             Add_Action (Table.States (929), 3, 121);
             Add_Action (Table.States (929), 39, 122);
@@ -10870,11 +10791,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (929), 320, 144);
             Add_Goto (Table.States (929), 321, 145);
             Add_Goto (Table.States (929), 330, 146);
-            Set_Minimal_Action (Table.States (929).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (929).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (930).Productions := WisiToken.To_Vector ((1 => (244, 
3)));
             Add_Action (Table.States (930), 96, 1075);
             Add_Error (Table.States (930));
-            Set_Minimal_Action (Table.States (930).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1075)));
+            Table.States (930).Minimal_Complete_Action := (Shift, 96, 1075);
             Table.States (931).Productions := WisiToken.To_Vector ((1 => (179, 
0)));
             Add_Action (Table.States (931), 74, Reduce, (253, 1), 0, null, 
null);
             Add_Action (Table.States (931), 76, 431);
@@ -10882,12 +10803,12 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (931));
             Add_Goto (Table.States (931), 199, 344);
             Add_Goto (Table.States (931), 253, 1076);
-            Set_Minimal_Action (Table.States (931).Minimal_Complete_Actions, 
(1 => (Reduce, 253, 0)));
+            Table.States (931).Minimal_Complete_Action := (Reduce, 253, 0);
             Table.States (932).Productions := WisiToken.To_Vector ((1 => (179, 
1)));
             Add_Action (Table.States (932), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (179, 1), 6,
             entry_declaration_1'Access, null);
-            Set_Minimal_Action (Table.States (932).Minimal_Complete_Actions, 
(1 => (Reduce, 179, 6)));
+            Table.States (932).Minimal_Complete_Action := (Reduce, 179, 6);
             Table.States (933).Productions := WisiToken.To_Vector (((128, 0), 
(213, 2), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (933), 74, 337);
@@ -10900,8 +10821,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (933), 115, 241);
             Add_Goto (Table.States (933), 122, 1077);
             Add_Goto (Table.States (933), 322, 242);
-            Set_Minimal_Action (Table.States (933).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (933).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (934).Productions := WisiToken.To_Vector (((128, 0), 
(213, 1), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (934), 74, 337);
@@ -10914,42 +10834,41 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (934), 115, 241);
             Add_Goto (Table.States (934), 122, 1078);
             Add_Goto (Table.States (934), 322, 242);
-            Set_Minimal_Action (Table.States (934).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (934).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (935).Productions := WisiToken.To_Vector ((1 => (256, 
1)));
             Add_Action (Table.States (935), (74, 96), (256, 1), 3, 
paren_expression_1'Access, null);
-            Set_Minimal_Action (Table.States (935).Minimal_Complete_Actions, 
(1 => (Reduce, 256, 3)));
+            Table.States (935).Minimal_Complete_Action := (Reduce, 256, 3);
             Table.States (936).Productions := WisiToken.To_Vector ((1 => (256, 
2)));
             Add_Action (Table.States (936), (74, 96), (256, 2), 3, 
paren_expression_2'Access, null);
-            Set_Minimal_Action (Table.States (936).Minimal_Complete_Actions, 
(1 => (Reduce, 256, 3)));
+            Table.States (936).Minimal_Complete_Action := (Reduce, 256, 3);
             Table.States (937).Productions := WisiToken.To_Vector ((1 => (256, 
0)));
             Add_Action (Table.States (937), (74, 96), (256, 0), 3, 
paren_expression_0'Access, null);
-            Set_Minimal_Action (Table.States (937).Minimal_Complete_Actions, 
(1 => (Reduce, 256, 3)));
+            Table.States (937).Minimal_Complete_Action := (Reduce, 256, 3);
             Table.States (938).Productions := WisiToken.To_Vector ((1 => (193, 
0)));
             Add_Action (Table.States (938), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (193, 0), 6,
             expression_function_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (938).Minimal_Complete_Actions, 
(1 => (Reduce, 193, 6)));
+            Table.States (938).Minimal_Complete_Action := (Reduce, 193, 6);
             Table.States (939).Productions := WisiToken.To_Vector ((1 => (243, 
0)));
             Add_Action (Table.States (939), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (243, 0), 6,
             null_procedure_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (939).Minimal_Complete_Actions, 
(1 => (Reduce, 243, 6)));
+            Table.States (939).Minimal_Complete_Action := (Reduce, 243, 6);
             Table.States (940).Productions := WisiToken.To_Vector ((1 => (112, 
0)));
             Add_Action (Table.States (940), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (112, 0), 6,
             abstract_subprogram_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (940).Minimal_Complete_Actions, 
(1 => (Reduce, 112, 6)));
+            Table.States (940).Minimal_Complete_Action := (Reduce, 112, 6);
             Table.States (941).Productions := WisiToken.To_Vector ((1 => (308, 
0)));
             Add_Action (Table.States (941), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (308, 0), 6,
             subprogram_body_stub_0'Access, null);
-            Set_Minimal_Action (Table.States (941).Minimal_Complete_Actions, 
(1 => (Reduce, 308, 6)));
+            Table.States (941).Minimal_Complete_Action := (Reduce, 308, 6);
             Table.States (942).Productions := WisiToken.To_Vector ((1 => (311, 
0)));
             Add_Action (Table.States (942), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (311, 0), 6,
             subprogram_renaming_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (942).Minimal_Complete_Actions, 
(1 => (Reduce, 311, 6)));
+            Table.States (942).Minimal_Complete_Action := (Reduce, 311, 6);
             Table.States (943).Productions := WisiToken.To_Vector ((1 => (307, 
0)));
             Add_Action (Table.States (943), 4, 1);
             Add_Action (Table.States (943), 5, 2);
@@ -11008,26 +10927,26 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (943), 303, 101);
             Add_Goto (Table.States (943), 306, 363);
             Add_Goto (Table.States (943), 323, 114);
-            Set_Minimal_Action (Table.States (943).Minimal_Complete_Actions, 
(1 => (Reduce, 218, 0)));
+            Table.States (943).Minimal_Complete_Action := (Reduce, 218, 0);
             Table.States (944).Productions := WisiToken.To_Vector ((1 => (113, 
0)));
             Add_Action (Table.States (944), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (944), 104, 149);
             Add_Error (Table.States (944));
             Add_Goto (Table.States (944), 220, 1080);
-            Set_Minimal_Action (Table.States (944).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (944).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (945).Productions := WisiToken.To_Vector (((137, 0), 
(166, 0)));
             Add_Action (Table.States (945), 79, 445);
             Add_Action (Table.States (945), 87, 1081);
             Add_Error (Table.States (945));
-            Set_Minimal_Action (Table.States (945).Minimal_Complete_Actions, 
(1 => (Shift, 87, 1081)));
+            Table.States (945).Minimal_Complete_Action := (Shift, 87, 1081);
             Table.States (946).Productions := WisiToken.To_Vector ((1 => (138, 
0)));
             Add_Action (Table.States (946), 72, 761);
             Add_Error (Table.States (946));
             Add_Goto (Table.States (946), 137, 1082);
-            Set_Minimal_Action (Table.States (946).Minimal_Complete_Actions, 
(1 => (Shift, 72, 761)));
+            Table.States (946).Minimal_Complete_Action := (Shift, 72, 761);
             Table.States (947).Productions := WisiToken.To_Vector ((1 => (273, 
0)));
             Add_Action (Table.States (947), (1 =>  77), (273, 0), 5, 
quantified_expression_0'Access, null);
-            Set_Minimal_Action (Table.States (947).Minimal_Complete_Actions, 
(1 => (Reduce, 273, 5)));
+            Table.States (947).Minimal_Complete_Action := (Reduce, 273, 5);
             Table.States (948).Productions := WisiToken.To_Vector ((1 => (221, 
1)));
             Add_Action (Table.States (948), 3, 121);
             Add_Action (Table.States (948), 39, 122);
@@ -11063,7 +10982,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (948), 320, 144);
             Add_Goto (Table.States (948), 321, 145);
             Add_Goto (Table.States (948), 330, 146);
-            Set_Minimal_Action (Table.States (948).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (948).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (949).Productions := WisiToken.To_Vector ((1 => (172, 
0)));
             Add_Action (Table.States (949), 3, 121);
             Add_Action (Table.States (949), 39, 122);
@@ -11099,39 +11018,39 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (949), 320, 144);
             Add_Goto (Table.States (949), 321, 145);
             Add_Goto (Table.States (949), 330, 146);
-            Set_Minimal_Action (Table.States (949).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (949).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (950).Productions := WisiToken.To_Vector ((1 => (173, 
1)));
             Add_Action (Table.States (950), (22, 23, 77), (173, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (950).Minimal_Complete_Actions, 
(1 => (Reduce, 173, 1)));
+            Table.States (950).Minimal_Complete_Action := (Reduce, 173, 1);
             Table.States (951).Productions := WisiToken.To_Vector (((173, 0), 
(221, 0), (221, 2)));
             Add_Action (Table.States (951), 22, 1085);
             Add_Action (Table.States (951), 23, 949);
             Add_Action (Table.States (951), 77, Reduce, (221, 2), 5, 
if_expression_2'Access, null);
             Add_Error (Table.States (951));
             Add_Goto (Table.States (951), 172, 1086);
-            Set_Minimal_Action (Table.States (951).Minimal_Complete_Actions, 
(1 => (Reduce, 221, 5)));
+            Table.States (951).Minimal_Complete_Action := (Reduce, 221, 5);
             Table.States (952).Productions := WisiToken.To_Vector ((1 => (117, 
0)));
             Add_Action (Table.States (952), (4, 5, 10, 13, 15, 17, 18, 20, 21, 
22, 23, 27, 28, 31, 32, 33, 35, 37, 38,
             40, 41, 42, 43, 48, 52, 53, 55, 56, 57, 58, 61, 68, 71, 73, 74, 
75, 76, 77, 78, 79, 82, 83, 84, 85, 86, 87,
             88, 89, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 104, 
105, 106), (117, 0), 6, aggregate_0'Access,
             null);
-            Set_Minimal_Action (Table.States (952).Minimal_Complete_Actions, 
(1 => (Reduce, 117, 6)));
+            Table.States (952).Minimal_Complete_Action := (Reduce, 117, 6);
             Table.States (953).Productions := WisiToken.To_Vector ((1 => (277, 
0)));
             Add_Action (Table.States (953), 77, 1087);
             Add_Error (Table.States (953));
-            Set_Minimal_Action (Table.States (953).Minimal_Complete_Actions, 
(1 => (Shift, 77, 1087)));
+            Table.States (953).Minimal_Complete_Action := (Shift, 77, 1087);
             Table.States (954).Productions := WisiToken.To_Vector ((1 => (140, 
0)));
             Add_Action (Table.States (954), (24, 72), (140, 0), 4, 
case_statement_alternative_0'Access, null);
-            Set_Minimal_Action (Table.States (954).Minimal_Complete_Actions, 
(1 => (Reduce, 140, 4)));
+            Table.States (954).Minimal_Complete_Action := (Reduce, 140, 4);
             Table.States (955).Productions := WisiToken.To_Vector ((1 => (139, 
0)));
             Add_Action (Table.States (955), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (139, 0), 7, case_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (955).Minimal_Complete_Actions, 
(1 => (Reduce, 139, 7)));
+            Table.States (955).Minimal_Complete_Action := (Reduce, 139, 7);
             Table.States (956).Productions := WisiToken.To_Vector ((1 => (314, 
0)));
             Add_Action (Table.States (956), (10, 21, 37, 42, 74, 77, 82, 83, 
87, 96), (314, 0), 4,
             subtype_indication_0'Access, null);
-            Set_Minimal_Action (Table.States (956).Minimal_Complete_Actions, 
(1 => (Reduce, 314, 4)));
+            Table.States (956).Minimal_Complete_Action := (Reduce, 314, 4);
             Table.States (957).Productions := WisiToken.To_Vector (((165, 1), 
(258, 1), (314, 0), (314, 1)));
             Add_Action (Table.States (957), 10, Reduce, (258, 1), 1, null, 
null);
             Add_Action (Table.States (957), 33, Reduce, (258, 1), 1, null, 
null);
@@ -11164,11 +11083,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (957), 239, 1088);
             Add_Goto (Table.States (957), 272, 92);
             Add_Goto (Table.States (957), 293, 97);
-            Set_Minimal_Action (Table.States (957).Minimal_Complete_Actions, 
((Shift, 105, 33), (Reduce, 258, 1)));
+            Table.States (957).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (958).Productions := WisiToken.To_Vector ((1 => (224, 
0)));
             Add_Action (Table.States (958), (10, 21, 37, 42, 74, 77, 82, 83, 
87, 96), (224, 0), 3,
             index_constraint_0'Access, null);
-            Set_Minimal_Action (Table.States (958).Minimal_Complete_Actions, 
(1 => (Reduce, 224, 3)));
+            Table.States (958).Minimal_Complete_Action := (Reduce, 224, 3);
             Table.States (959).Productions := WisiToken.To_Vector ((1 => (168, 
0)));
             Add_Action (Table.States (959), 3, 121);
             Add_Action (Table.States (959), 39, 122);
@@ -11196,7 +11115,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (959), 320, 144);
             Add_Goto (Table.States (959), 321, 145);
             Add_Goto (Table.States (959), 330, 146);
-            Set_Minimal_Action (Table.States (959).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (959).Minimal_Complete_Action := (Shift, 40, 474);
             Table.States (960).Productions := WisiToken.To_Vector (((128, 0), 
(230, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (960), 37, Reduce, (230, 0), 6, null, 
null);
@@ -11208,12 +11127,11 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (960));
             Add_Goto (Table.States (960), 115, 241);
             Add_Goto (Table.States (960), 322, 242);
-            Set_Minimal_Action (Table.States (960).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 230, 6)));
+            Table.States (960).Minimal_Complete_Action := (Reduce, 230, 6);
             Table.States (961).Productions := WisiToken.To_Vector ((1 => (235, 
0)));
             Add_Action (Table.States (961), 96, 1090);
             Add_Error (Table.States (961));
-            Set_Minimal_Action (Table.States (961).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1090)));
+            Table.States (961).Minimal_Complete_Action := (Shift, 96, 1090);
             Table.States (962).Productions := WisiToken.To_Vector ((1 => (144, 
0)));
             Add_Action (Table.States (962), 3, 121);
             Add_Action (Table.States (962), 39, 122);
@@ -11238,20 +11156,20 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (962), 320, 144);
             Add_Goto (Table.States (962), 321, 145);
             Add_Goto (Table.States (962), 330, 146);
-            Set_Minimal_Action (Table.States (962).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (962).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (963).Productions := WisiToken.To_Vector ((1 => (281, 
0)));
             Add_Action (Table.States (963), 54, 1092);
             Add_Error (Table.States (963));
-            Set_Minimal_Action (Table.States (963).Minimal_Complete_Actions, 
(1 => (Shift, 54, 1092)));
+            Table.States (963).Minimal_Complete_Action := (Shift, 54, 1092);
             Table.States (964).Productions := WisiToken.To_Vector ((1 => (145, 
0)));
             Add_Action (Table.States (964), (24, 104), (145, 0), 2, null, 
null);
-            Set_Minimal_Action (Table.States (964).Minimal_Complete_Actions, 
(1 => (Reduce, 145, 2)));
+            Table.States (964).Minimal_Complete_Action := (Reduce, 145, 2);
             Table.States (965).Productions := WisiToken.To_Vector (((254, 2), 
(254, 3)));
             Add_Action (Table.States (965), 77, Reduce, (254, 3), 4, 
parameter_specification_3'Access, null);
             Add_Action (Table.States (965), 82, 1093);
             Add_Action (Table.States (965), 96, Reduce, (254, 3), 4, 
parameter_specification_3'Access, null);
             Add_Error (Table.States (965));
-            Set_Minimal_Action (Table.States (965).Minimal_Complete_Actions, 
(1 => (Reduce, 254, 4)));
+            Table.States (965).Minimal_Complete_Action := (Reduce, 254, 4);
             Table.States (966).Productions := WisiToken.To_Vector (((254, 0), 
(254, 1)));
             Add_Action (Table.States (966), 40, 386);
             Add_Action (Table.States (966), 104, Reduce, (241, 1), 0, null, 
null);
@@ -11259,48 +11177,48 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (966), 106, Reduce, (241, 1), 0, null, 
null);
             Add_Error (Table.States (966));
             Add_Goto (Table.States (966), 241, 1094);
-            Set_Minimal_Action (Table.States (966).Minimal_Complete_Actions, 
(1 => (Reduce, 241, 0)));
+            Table.States (966).Minimal_Complete_Action := (Reduce, 241, 0);
             Table.States (967).Productions := WisiToken.To_Vector ((1 => (215, 
2)));
             Add_Action (Table.States (967), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (215, 2), 7,
             generic_renaming_declaration_2'Access, null);
-            Set_Minimal_Action (Table.States (967).Minimal_Complete_Actions, 
(1 => (Reduce, 215, 7)));
+            Table.States (967).Minimal_Complete_Action := (Reduce, 215, 7);
             Table.States (968).Productions := WisiToken.To_Vector ((1 => (215, 
0)));
             Add_Action (Table.States (968), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (215, 0), 7,
             generic_renaming_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (968).Minimal_Complete_Actions, 
(1 => (Reduce, 215, 7)));
+            Table.States (968).Minimal_Complete_Action := (Reduce, 215, 7);
             Table.States (969).Productions := WisiToken.To_Vector ((1 => (215, 
1)));
             Add_Action (Table.States (969), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (215, 1), 7,
             generic_renaming_declaration_1'Access, null);
-            Set_Minimal_Action (Table.States (969).Minimal_Complete_Actions, 
(1 => (Reduce, 215, 7)));
+            Table.States (969).Minimal_Complete_Action := (Reduce, 215, 7);
             Table.States (970).Productions := WisiToken.To_Vector ((1 => (109, 
0)));
             Add_Action (Table.States (970), (1 =>  39), (109, 0), 2, null, 
null);
-            Set_Minimal_Action (Table.States (970).Minimal_Complete_Actions, 
(1 => (Reduce, 109, 2)));
+            Table.States (970).Minimal_Complete_Action := (Reduce, 109, 2);
             Table.States (971).Productions := WisiToken.To_Vector (((202, 6), 
(202, 7)));
             Add_Action (Table.States (971), 20, 1095);
             Add_Action (Table.States (971), 74, Reduce, (202, 7), 2, null, 
null);
             Add_Action (Table.States (971), 96, Reduce, (202, 7), 2, null, 
null);
             Add_Error (Table.States (971));
-            Set_Minimal_Action (Table.States (971).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 2)));
+            Table.States (971).Minimal_Complete_Action := (Reduce, 202, 2);
             Table.States (972).Productions := WisiToken.To_Vector ((1 => (202, 
5)));
             Add_Action (Table.States (972), (74, 96), (202, 5), 2, null, null);
-            Set_Minimal_Action (Table.States (972).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 2)));
+            Table.States (972).Minimal_Complete_Action := (Reduce, 202, 2);
             Table.States (973).Productions := WisiToken.To_Vector ((1 => (202, 
4)));
             Add_Action (Table.States (973), (74, 96), (202, 4), 2, null, null);
-            Set_Minimal_Action (Table.States (973).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 2)));
+            Table.States (973).Minimal_Complete_Action := (Reduce, 202, 2);
             Table.States (974).Productions := WisiToken.To_Vector ((1 => (202, 
3)));
             Add_Action (Table.States (974), (74, 96), (202, 3), 2, null, null);
-            Set_Minimal_Action (Table.States (974).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 2)));
+            Table.States (974).Minimal_Complete_Action := (Reduce, 202, 2);
             Table.States (975).Productions := WisiToken.To_Vector ((1 => (201, 
1)));
             Add_Action (Table.States (975), 96, 1096);
             Add_Error (Table.States (975));
-            Set_Minimal_Action (Table.States (975).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1096)));
+            Table.States (975).Minimal_Complete_Action := (Shift, 96, 1096);
             Table.States (976).Productions := WisiToken.To_Vector ((1 => (202, 
2)));
             Add_Action (Table.States (976), 77, 1097);
             Add_Error (Table.States (976));
-            Set_Minimal_Action (Table.States (976).Minimal_Complete_Actions, 
(1 => (Shift, 77, 1097)));
+            Table.States (976).Minimal_Complete_Action := (Shift, 77, 1097);
             Table.States (977).Productions := WisiToken.To_Vector (((203, 0), 
(203, 1)));
             Add_Action (Table.States (977), 104, 119);
             Add_Action (Table.States (977), 105, 33);
@@ -11310,14 +11228,14 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (977), 239, 1098);
             Add_Goto (Table.States (977), 272, 92);
             Add_Goto (Table.States (977), 293, 97);
-            Set_Minimal_Action (Table.States (977).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (977).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (978).Productions := WisiToken.To_Vector ((1 => (202, 
0)));
             Add_Action (Table.States (978), (74, 96), (202, 0), 2, null, null);
-            Set_Minimal_Action (Table.States (978).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 2)));
+            Table.States (978).Minimal_Complete_Action := (Reduce, 202, 2);
             Table.States (979).Productions := WisiToken.To_Vector ((1 => (201, 
0)));
             Add_Action (Table.States (979), 96, 1099);
             Add_Error (Table.States (979));
-            Set_Minimal_Action (Table.States (979).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1099)));
+            Table.States (979).Minimal_Complete_Action := (Shift, 96, 1099);
             Table.States (980).Productions := WisiToken.To_Vector (((128, 0), 
(204, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (980), 74, Reduce, (205, 1), 0, null, 
null);
@@ -11330,30 +11248,29 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (980), 115, 241);
             Add_Goto (Table.States (980), 205, 1101);
             Add_Goto (Table.States (980), 322, 242);
-            Set_Minimal_Action (Table.States (980).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 205, 0)));
+            Table.States (980).Minimal_Complete_Action := (Reduce, 205, 0);
             Table.States (981).Productions := WisiToken.To_Vector ((1 => (200, 
2)));
             Add_Action (Table.States (981), (29, 47, 48, 50, 69, 71, 74, 104), 
(200, 2), 6,
             formal_subprogram_declaration_2'Access, null);
-            Set_Minimal_Action (Table.States (981).Minimal_Complete_Actions, 
(1 => (Reduce, 200, 6)));
+            Table.States (981).Minimal_Complete_Action := (Reduce, 200, 6);
             Table.States (982).Productions := WisiToken.To_Vector ((1 => (200, 
0)));
             Add_Action (Table.States (982), 96, 1102);
             Add_Error (Table.States (982));
-            Set_Minimal_Action (Table.States (982).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1102)));
+            Table.States (982).Minimal_Complete_Action := (Shift, 96, 1102);
             Table.States (983).Productions := WisiToken.To_Vector ((1 => (200, 
1)));
             Add_Action (Table.States (983), (29, 47, 48, 50, 69, 71, 74, 104), 
(200, 1), 6,
             formal_subprogram_declaration_1'Access, null);
-            Set_Minimal_Action (Table.States (983).Minimal_Complete_Actions, 
(1 => (Reduce, 200, 6)));
+            Table.States (983).Minimal_Complete_Action := (Reduce, 200, 6);
             Table.States (984).Productions := WisiToken.To_Vector ((1 => (198, 
1)));
             Add_Action (Table.States (984), 74, 337);
             Add_Action (Table.States (984), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (984));
             Add_Goto (Table.States (984), 122, 1103);
-            Set_Minimal_Action (Table.States (984).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (984).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (985).Productions := WisiToken.To_Vector ((1 => (198, 
3)));
             Add_Action (Table.States (985), (29, 47, 48, 50, 69, 71, 74, 104), 
(198, 3), 6,
             formal_object_declaration_3'Access, null);
-            Set_Minimal_Action (Table.States (985).Minimal_Complete_Actions, 
(1 => (Reduce, 198, 6)));
+            Table.States (985).Minimal_Complete_Action := (Reduce, 198, 6);
             Table.States (986).Productions := WisiToken.To_Vector ((1 => (198, 
0)));
             Add_Action (Table.States (986), 3, 121);
             Add_Action (Table.States (986), 39, 122);
@@ -11390,15 +11307,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (986), 320, 144);
             Add_Goto (Table.States (986), 321, 145);
             Add_Goto (Table.States (986), 330, 146);
-            Set_Minimal_Action (Table.States (986).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (986).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (987).Productions := WisiToken.To_Vector ((1 => (198, 
2)));
             Add_Action (Table.States (987), 96, 1105);
             Add_Error (Table.States (987));
-            Set_Minimal_Action (Table.States (987).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1105)));
+            Table.States (987).Minimal_Complete_Action := (Shift, 96, 1105);
             Table.States (988).Productions := WisiToken.To_Vector ((1 => (222, 
1)));
             Add_Action (Table.States (988), 32, 1106);
             Add_Error (Table.States (988));
-            Set_Minimal_Action (Table.States (988).Minimal_Complete_Actions, 
(1 => (Shift, 32, 1106)));
+            Table.States (988).Minimal_Complete_Action := (Shift, 32, 1106);
             Table.States (989).Productions := WisiToken.To_Vector ((1 => (174, 
0)));
             Add_Action (Table.States (989), 4, 1);
             Add_Action (Table.States (989), 5, 2);
@@ -11457,28 +11374,25 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (989), 303, 101);
             Add_Goto (Table.States (989), 306, 363);
             Add_Goto (Table.States (989), 323, 114);
-            Set_Minimal_Action (Table.States (989).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
-         end Subr_16;
-         procedure Subr_17
-         is begin
+            Table.States (989).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (990).Productions := WisiToken.To_Vector ((1 => (222, 
3)));
             Add_Action (Table.States (990), (4, 5, 13, 15, 17, 18, 22, 23, 24, 
25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (222, 3), 7, if_statement_3'Access, null);
-            Set_Minimal_Action (Table.States (990).Minimal_Complete_Actions, 
(1 => (Reduce, 222, 7)));
+            Table.States (990).Minimal_Complete_Action := (Reduce, 222, 7);
             Table.States (991).Productions := WisiToken.To_Vector ((1 => (222, 
0)));
             Add_Action (Table.States (991), 24, 1108);
             Add_Error (Table.States (991));
-            Set_Minimal_Action (Table.States (991).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1108)));
+            Table.States (991).Minimal_Complete_Action := (Shift, 24, 1108);
             Table.States (992).Productions := WisiToken.To_Vector ((1 => (222, 
2)));
             Add_Action (Table.States (992), 96, 1109);
             Add_Error (Table.States (992));
-            Set_Minimal_Action (Table.States (992).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1109)));
+            Table.States (992).Minimal_Complete_Action := (Shift, 96, 1109);
             Table.States (993).Productions := WisiToken.To_Vector ((1 => (248, 
0)));
             Add_Action (Table.States (993), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (248, 0), 7,
             package_body_stub_0'Access, null);
-            Set_Minimal_Action (Table.States (993).Minimal_Complete_Actions, 
(1 => (Reduce, 248, 7)));
+            Table.States (993).Minimal_Complete_Action := (Reduce, 248, 7);
             Table.States (994).Productions := WisiToken.To_Vector ((1 => (247, 
0)));
             Add_Action (Table.States (994), 4, 1);
             Add_Action (Table.States (994), 5, 2);
@@ -11537,7 +11451,10 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (994), 303, 101);
             Add_Goto (Table.States (994), 306, 363);
             Add_Goto (Table.States (994), 323, 114);
-            Set_Minimal_Action (Table.States (994).Minimal_Complete_Actions, 
(1 => (Reduce, 218, 0)));
+            Table.States (994).Minimal_Complete_Action := (Reduce, 218, 0);
+         end Subr_16;
+         procedure Subr_17
+         is begin
             Table.States (995).Productions := WisiToken.To_Vector ((1 => (247, 
1)));
             Add_Action (Table.States (995), 96, Reduce, (240, 1), 0, null, 
null);
             Add_Action (Table.States (995), 104, 119);
@@ -11549,25 +11466,25 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (995), 240, 1111);
             Add_Goto (Table.States (995), 272, 92);
             Add_Goto (Table.States (995), 293, 97);
-            Set_Minimal_Action (Table.States (995).Minimal_Complete_Actions, 
(1 => (Reduce, 240, 0)));
+            Table.States (995).Minimal_Complete_Action := (Reduce, 240, 0);
             Table.States (996).Productions := WisiToken.To_Vector ((1 => (213, 
0)));
             Add_Action (Table.States (996), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (213, 0), 7,
             generic_instantiation_0'Access, null);
-            Set_Minimal_Action (Table.States (996).Minimal_Complete_Actions, 
(1 => (Reduce, 213, 7)));
+            Table.States (996).Minimal_Complete_Action := (Reduce, 213, 7);
             Table.States (997).Productions := WisiToken.To_Vector ((1 => (251, 
1)));
             Add_Action (Table.States (997), (1 =>  96), (251, 1), 7, 
package_specification_1'Access,
             package_specification_1_check'Access);
-            Set_Minimal_Action (Table.States (997).Minimal_Complete_Actions, 
(1 => (Reduce, 251, 7)));
+            Table.States (997).Minimal_Complete_Action := (Reduce, 251, 7);
             Table.States (998).Productions := WisiToken.To_Vector ((1 => (251, 
0)));
             Add_Action (Table.States (998), 24, 1112);
             Add_Error (Table.States (998));
-            Set_Minimal_Action (Table.States (998).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1112)));
+            Table.States (998).Minimal_Complete_Action := (Shift, 24, 1112);
             Table.States (999).Productions := WisiToken.To_Vector ((1 => (265, 
0)));
             Add_Action (Table.States (999), (4, 5, 13, 15, 17, 18, 24, 25, 27, 
28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (265, 0), 7,
             protected_body_stub_0'Access, null);
-            Set_Minimal_Action (Table.States (999).Minimal_Complete_Actions, 
(1 => (Reduce, 265, 7)));
+            Table.States (999).Minimal_Complete_Action := (Reduce, 265, 7);
             Table.States (1000).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1000), 72, Reduce, (253, 1), 0, null, 
null);
             Add_Action (Table.States (1000), 76, 1113);
@@ -11575,23 +11492,23 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1000), 177, 1114);
             Add_Goto (Table.States (1000), 199, 344);
             Add_Goto (Table.States (1000), 253, 1115);
-            Set_Minimal_Action (Table.States (1000).Minimal_Complete_Actions, 
(1 => (Reduce, 177, 0)));
+            Table.States (1000).Minimal_Complete_Action := (Reduce, 177, 0);
             Table.States (1001).Productions := WisiToken.To_Vector (((307, 0), 
(309, 0)));
             Add_Action (Table.States (1001), 35, Reduce, (122, 1), 0, null, 
null);
             Add_Action (Table.States (1001), 74, 337);
             Add_Action (Table.States (1001), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (1001));
             Add_Goto (Table.States (1001), 122, 430);
-            Set_Minimal_Action (Table.States (1001).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1001).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1002).Productions := WisiToken.To_Vector ((1 => 
(268, 0)));
             Add_Action (Table.States (1002), (24, 25, 28, 29, 40, 46, 50), 
(268, 0), 2, null, null);
-            Set_Minimal_Action (Table.States (1002).Minimal_Complete_Actions, 
(1 => (Reduce, 268, 2)));
+            Table.States (1002).Minimal_Complete_Action := (Reduce, 268, 2);
             Table.States (1003).Productions := WisiToken.To_Vector ((1 => 
(264, 0)));
             Add_Action (Table.States (1003), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (1003), 104, 149);
             Add_Error (Table.States (1003));
             Add_Goto (Table.States (1003), 220, 1116);
-            Set_Minimal_Action (Table.States (1003).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (1003).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (1004).Productions := WisiToken.To_Vector ((1 => 
(271, 0)));
             Add_Action (Table.States (1004), 104, 119);
             Add_Action (Table.States (1004), 105, 33);
@@ -11602,11 +11519,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1004), 239, 841);
             Add_Goto (Table.States (1004), 272, 92);
             Add_Goto (Table.States (1004), 293, 97);
-            Set_Minimal_Action (Table.States (1004).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1004).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1005).Productions := WisiToken.To_Vector ((1 => 
(271, 1)));
             Add_Action (Table.States (1005), 96, 1118);
             Add_Error (Table.States (1005));
-            Set_Minimal_Action (Table.States (1005).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1118)));
+            Table.States (1005).Minimal_Complete_Action := (Shift, 96, 1118);
             Table.States (1006).Productions := WisiToken.To_Vector ((1 => 
(227, 0)));
             Add_Action (Table.States (1006), 104, 119);
             Add_Action (Table.States (1006), 105, 33);
@@ -11616,7 +11533,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1006), 239, 1119);
             Add_Goto (Table.States (1006), 272, 92);
             Add_Goto (Table.States (1006), 293, 97);
-            Set_Minimal_Action (Table.States (1006).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1006).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1007).Productions := WisiToken.To_Vector ((1 => 
(304, 0)));
             Add_Action (Table.States (1007), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (1007), 25, Reduce, (246, 2), 0, null, 
null);
@@ -11690,15 +11607,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1007), 319, 113);
             Add_Goto (Table.States (1007), 325, 115);
             Add_Goto (Table.States (1007), 331, 116);
-            Set_Minimal_Action (Table.States (1007).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (1007).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (1008).Productions := WisiToken.To_Vector ((1 => 
(266, 1)));
             Add_Action (Table.States (1008), (1 =>  96), (266, 1), 3, 
protected_definition_1'Access,
             protected_definition_1_check'Access);
-            Set_Minimal_Action (Table.States (1008).Minimal_Complete_Actions, 
(1 => (Reduce, 266, 3)));
+            Table.States (1008).Minimal_Complete_Action := (Reduce, 266, 3);
             Table.States (1009).Productions := WisiToken.To_Vector ((1 => 
(266, 0)));
             Add_Action (Table.States (1009), 24, 1121);
             Add_Error (Table.States (1009));
-            Set_Minimal_Action (Table.States (1009).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1121)));
+            Table.States (1009).Minimal_Complete_Action := (Shift, 24, 1121);
             Table.States (1010).Productions := WisiToken.To_Vector ((1 => 
(194, 0)));
             Add_Action (Table.States (1010), 3, 121);
             Add_Action (Table.States (1010), 21, Reduce, (192, 1), 0, null, 
null);
@@ -11735,12 +11652,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1010), 320, 144);
             Add_Goto (Table.States (1010), 321, 145);
             Add_Goto (Table.States (1010), 330, 146);
-            Set_Minimal_Action (Table.States (1010).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1010).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1011).Productions := WisiToken.To_Vector ((1 => 
(196, 0)));
             Add_Action (Table.States (1011), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (196, 0), 7, extended_return_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (1011).Minimal_Complete_Actions, 
(1 => (Reduce, 196, 7)));
+            Table.States (1011).Minimal_Complete_Action := (Reduce, 196, 7);
             Table.States (1012).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (247, 0), (247, 1),
             (272, 0), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (1012), 35, Reduce, (122, 1), 0, null, 
null);
@@ -11753,48 +11670,47 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1012), 115, 241);
             Add_Goto (Table.States (1012), 122, 511);
             Add_Goto (Table.States (1012), 322, 242);
-            Set_Minimal_Action (Table.States (1012).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 122, 0)));
+            Table.States (1012).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1013).Productions := WisiToken.To_Vector ((1 => 
(264, 0)));
             Add_Action (Table.States (1013), 35, Reduce, (122, 1), 0, null, 
null);
             Add_Action (Table.States (1013), 74, 337);
             Add_Error (Table.States (1013));
             Add_Goto (Table.States (1013), 122, 520);
-            Set_Minimal_Action (Table.States (1013).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1013).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1014).Productions := WisiToken.To_Vector ((1 => 
(316, 0)));
             Add_Action (Table.States (1014), 35, Reduce, (122, 1), 0, null, 
null);
             Add_Action (Table.States (1014), 74, 337);
             Add_Error (Table.States (1014));
             Add_Goto (Table.States (1014), 122, 540);
-            Set_Minimal_Action (Table.States (1014).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1014).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1015).Productions := WisiToken.To_Vector ((1 => 
(307, 0)));
             Add_Action (Table.States (1015), 35, 585);
             Add_Error (Table.States (1015));
-            Set_Minimal_Action (Table.States (1015).Minimal_Complete_Actions, 
(1 => (Shift, 35, 585)));
+            Table.States (1015).Minimal_Complete_Action := (Shift, 35, 585);
             Table.States (1016).Productions := WisiToken.To_Vector ((1 => 
(152, 0)));
             Add_Action (Table.States (1016), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (152, 0), 7, conditional_entry_call_0'Access, null);
-            Set_Minimal_Action (Table.States (1016).Minimal_Complete_Actions, 
(1 => (Reduce, 152, 7)));
+            Table.States (1016).Minimal_Complete_Action := (Reduce, 152, 7);
             Table.States (1017).Productions := WisiToken.To_Vector ((1 => 
(323, 0)));
             Add_Action (Table.States (1017), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (323, 0), 7, timed_entry_call_0'Access, null);
-            Set_Minimal_Action (Table.States (1017).Minimal_Complete_Actions, 
(1 => (Reduce, 323, 7)));
+            Table.States (1017).Minimal_Complete_Action := (Reduce, 323, 7);
             Table.States (1018).Productions := WisiToken.To_Vector ((1 => 
(294, 0)));
             Add_Action (Table.States (1018), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (294, 0), 7, selective_accept_0'Access, null);
-            Set_Minimal_Action (Table.States (1018).Minimal_Complete_Actions, 
(1 => (Reduce, 294, 7)));
+            Table.States (1018).Minimal_Complete_Action := (Reduce, 294, 7);
             Table.States (1019).Productions := WisiToken.To_Vector ((1 => 
(126, 0)));
             Add_Action (Table.States (1019), 96, 1123);
             Add_Error (Table.States (1019));
-            Set_Minimal_Action (Table.States (1019).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1123)));
+            Table.States (1019).Minimal_Complete_Action := (Shift, 96, 1123);
             Table.States (1020).Productions := WisiToken.To_Vector ((1 => 
(317, 0)));
             Add_Action (Table.States (1020), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (317, 0), 7,
             task_body_stub_0'Access, null);
-            Set_Minimal_Action (Table.States (1020).Minimal_Complete_Actions, 
(1 => (Reduce, 317, 7)));
+            Table.States (1020).Minimal_Complete_Action := (Reduce, 317, 7);
             Table.States (1021).Productions := WisiToken.To_Vector ((1 => 
(316, 0)));
             Add_Action (Table.States (1021), 4, 1);
             Add_Action (Table.States (1021), 5, 2);
@@ -11853,7 +11769,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1021), 303, 101);
             Add_Goto (Table.States (1021), 306, 363);
             Add_Goto (Table.States (1021), 323, 114);
-            Set_Minimal_Action (Table.States (1021).Minimal_Complete_Actions, 
(1 => (Reduce, 218, 0)));
+            Table.States (1021).Minimal_Complete_Action := (Reduce, 218, 0);
             Table.States (1022).Productions := WisiToken.To_Vector ((1 => 
(319, 0)));
             Add_Action (Table.States (1022), 104, 119);
             Add_Action (Table.States (1022), 105, 33);
@@ -11864,11 +11780,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1022), 239, 841);
             Add_Goto (Table.States (1022), 272, 92);
             Add_Goto (Table.States (1022), 293, 97);
-            Set_Minimal_Action (Table.States (1022).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1022).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1023).Productions := WisiToken.To_Vector ((1 => 
(319, 1)));
             Add_Action (Table.States (1023), 24, 1126);
             Add_Error (Table.States (1023));
-            Set_Minimal_Action (Table.States (1023).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1126)));
+            Table.States (1023).Minimal_Complete_Action := (Shift, 24, 1126);
             Table.States (1024).Productions := WisiToken.To_Vector ((1 => 
(305, 0)));
             Add_Action (Table.States (1024), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (1024), 25, Reduce, (246, 2), 0, null, 
null);
@@ -11942,14 +11858,14 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1024), 319, 113);
             Add_Goto (Table.States (1024), 325, 115);
             Add_Goto (Table.States (1024), 331, 116);
-            Set_Minimal_Action (Table.States (1024).Minimal_Complete_Actions, 
(1 => (Reduce, 318, 0)));
+            Table.States (1024).Minimal_Complete_Action := (Reduce, 318, 0);
             Table.States (1025).Productions := WisiToken.To_Vector ((1 => 
(318, 0)));
             Add_Action (Table.States (1025), (1 =>  24), (318, 0), 3, 
task_definition_0'Access, null);
-            Set_Minimal_Action (Table.States (1025).Minimal_Complete_Actions, 
(1 => (Reduce, 318, 3)));
+            Table.States (1025).Minimal_Complete_Action := (Reduce, 318, 3);
             Table.States (1026).Productions := WisiToken.To_Vector ((1 => 
(305, 1)));
             Add_Action (Table.States (1026), 96, 1128);
             Add_Error (Table.States (1026));
-            Set_Minimal_Action (Table.States (1026).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1128)));
+            Table.States (1026).Minimal_Complete_Action := (Shift, 96, 1128);
             Table.States (1027).Productions := WisiToken.To_Vector (((241, 0), 
(242, 2), (242, 3)));
             Add_Action (Table.States (1027), 7, Reduce, (241, 0), 2, null, 
null);
             Add_Action (Table.States (1027), 104, 1129);
@@ -11960,8 +11876,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1027), 239, 871);
             Add_Goto (Table.States (1027), 272, 92);
             Add_Goto (Table.States (1027), 293, 1130);
-            Set_Minimal_Action (Table.States (1027).Minimal_Complete_Actions, 
((Shift, 104, 1129), (Shift, 105, 33),
-            (Reduce, 241, 2)));
+            Table.States (1027).Minimal_Complete_Action := (Reduce, 241, 2);
             Table.States (1028).Productions := WisiToken.To_Vector ((1 => 
(170, 1)));
             Add_Action (Table.States (1028), 3, 121);
             Add_Action (Table.States (1028), 39, 122);
@@ -11998,7 +11913,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1028), 320, 144);
             Add_Goto (Table.States (1028), 321, 145);
             Add_Goto (Table.States (1028), 330, 146);
-            Set_Minimal_Action (Table.States (1028).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1028).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1029).Productions := WisiToken.To_Vector ((1 => 
(170, 0)));
             Add_Action (Table.States (1029), 3, 121);
             Add_Action (Table.States (1029), 39, 122);
@@ -12035,23 +11950,23 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1029), 320, 144);
             Add_Goto (Table.States (1029), 321, 145);
             Add_Goto (Table.States (1029), 330, 146);
-            Set_Minimal_Action (Table.States (1029).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1029).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1030).Productions := WisiToken.To_Vector ((1 => 
(111, 0)));
             Add_Action (Table.States (1030), (41, 49, 54), (111, 0), 3, null, 
null);
-            Set_Minimal_Action (Table.States (1030).Minimal_Complete_Actions, 
(1 => (Reduce, 111, 3)));
+            Table.States (1030).Minimal_Complete_Action := (Reduce, 111, 3);
             Table.States (1031).Productions := WisiToken.To_Vector (((120, 1), 
(168, 0)));
             Add_Action (Table.States (1031), 77, 1133);
             Add_Action (Table.States (1031), 83, 959);
             Add_Error (Table.States (1031));
-            Set_Minimal_Action (Table.States (1031).Minimal_Complete_Actions, 
(1 => (Shift, 77, 1133)));
+            Table.States (1031).Minimal_Complete_Action := (Shift, 77, 1133);
             Table.States (1032).Productions := WisiToken.To_Vector ((1 => 
(226, 1)));
             Add_Action (Table.States (1032), (77, 83), (226, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (1032).Minimal_Complete_Actions, 
(1 => (Reduce, 226, 1)));
+            Table.States (1032).Minimal_Complete_Action := (Reduce, 226, 1);
             Table.States (1033).Productions := WisiToken.To_Vector (((120, 0), 
(226, 0)));
             Add_Action (Table.States (1033), 77, 1134);
             Add_Action (Table.States (1033), 83, 1135);
             Add_Error (Table.States (1033));
-            Set_Minimal_Action (Table.States (1033).Minimal_Complete_Actions, 
(1 => (Shift, 77, 1134)));
+            Table.States (1033).Minimal_Complete_Action := (Shift, 77, 1134);
             Table.States (1034).Productions := WisiToken.To_Vector (((128, 0), 
(225, 0), (239, 0), (239, 1), (258, 3),
             (272, 0), (277, 0), (277, 1), (293, 0), (293, 1), (293, 2), (293, 
3), (314, 2), (314, 3)));
             Add_Action (Table.States (1034), 38, Reduce, (258, 3), 1, null, 
null);
@@ -12075,8 +11990,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1034), 155, 620);
             Add_Goto (Table.States (1034), 224, 621);
             Add_Goto (Table.States (1034), 322, 448);
-            Set_Minimal_Action (Table.States (1034).Minimal_Complete_Actions, 
((Shift, 53, 1136), (Shift, 84, 237),
-            (Shift, 102, 240), (Reduce, 258, 1), (Reduce, 314, 1)));
+            Table.States (1034).Minimal_Complete_Action := (Reduce, 258, 1);
             Table.States (1035).Productions := WisiToken.To_Vector ((1 => 
(326, 4)));
             Add_Action (Table.States (1035), 3, 121);
             Add_Action (Table.States (1035), 39, 122);
@@ -12114,7 +12028,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1035), 320, 144);
             Add_Goto (Table.States (1035), 321, 145);
             Add_Goto (Table.States (1035), 330, 146);
-            Set_Minimal_Action (Table.States (1035).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1035).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1036).Productions := WisiToken.To_Vector ((1 => 
(279, 0)));
             Add_Action (Table.States (1036), 3, 121);
             Add_Action (Table.States (1036), 39, 122);
@@ -12139,13 +12053,13 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1036), 320, 144);
             Add_Goto (Table.States (1036), 321, 145);
             Add_Goto (Table.States (1036), 330, 146);
-            Set_Minimal_Action (Table.States (1036).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1036).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (1037).Productions := WisiToken.To_Vector ((1 => 
(326, 5)));
             Add_Action (Table.States (1037), (74, 96), (326, 5), 3, null, 
null);
-            Set_Minimal_Action (Table.States (1037).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 3)));
+            Table.States (1037).Minimal_Complete_Action := (Reduce, 326, 3);
             Table.States (1038).Productions := WisiToken.To_Vector ((1 => 
(326, 3)));
             Add_Action (Table.States (1038), (74, 96), (326, 3), 3, null, 
null);
-            Set_Minimal_Action (Table.States (1038).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 3)));
+            Table.States (1038).Minimal_Complete_Action := (Reduce, 326, 3);
             Table.States (1039).Productions := WisiToken.To_Vector ((1 => 
(228, 0)));
             Add_Action (Table.States (1039), 104, 119);
             Add_Action (Table.States (1039), 105, 33);
@@ -12156,7 +12070,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1039), 239, 841);
             Add_Goto (Table.States (1039), 272, 92);
             Add_Goto (Table.States (1039), 293, 97);
-            Set_Minimal_Action (Table.States (1039).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1039).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1040).Productions := WisiToken.To_Vector ((1 => 
(228, 2)));
             Add_Action (Table.States (1040), 104, 119);
             Add_Action (Table.States (1040), 105, 33);
@@ -12167,7 +12081,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1040), 239, 841);
             Add_Goto (Table.States (1040), 272, 92);
             Add_Goto (Table.States (1040), 293, 97);
-            Set_Minimal_Action (Table.States (1040).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1040).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1041).Productions := WisiToken.To_Vector ((1 => 
(326, 1)));
             Add_Action (Table.States (1041), 3, 121);
             Add_Action (Table.States (1041), 39, 122);
@@ -12192,36 +12106,33 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1041), 320, 144);
             Add_Goto (Table.States (1041), 321, 145);
             Add_Goto (Table.States (1041), 330, 146);
-            Set_Minimal_Action (Table.States (1041).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
-         end Subr_17;
-         procedure Subr_18
-         is begin
+            Table.States (1041).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (1042).Productions := WisiToken.To_Vector ((1 => 
(163, 0)));
             Add_Action (Table.States (1042), (1 =>  35), (163, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (1042).Minimal_Complete_Actions, 
(1 => (Reduce, 163, 1)));
+            Table.States (1042).Minimal_Complete_Action := (Reduce, 163, 1);
             Table.States (1043).Productions := WisiToken.To_Vector ((1 => 
(163, 1)));
             Add_Action (Table.States (1043), (1 =>  35), (163, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (1043).Minimal_Complete_Actions, 
(1 => (Reduce, 163, 1)));
+            Table.States (1043).Minimal_Complete_Action := (Reduce, 163, 1);
             Table.States (1044).Productions := WisiToken.To_Vector ((1 => 
(164, 0)));
             Add_Action (Table.States (1044), (1 =>  35), (164, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (1044).Minimal_Complete_Actions, 
(1 => (Reduce, 164, 1)));
+            Table.States (1044).Minimal_Complete_Action := (Reduce, 164, 1);
             Table.States (1045).Productions := WisiToken.To_Vector ((1 => 
(327, 0)));
             Add_Action (Table.States (1045), 35, 1142);
             Add_Error (Table.States (1045));
-            Set_Minimal_Action (Table.States (1045).Minimal_Complete_Actions, 
(1 => (Shift, 35, 1142)));
+            Table.States (1045).Minimal_Complete_Action := (Shift, 35, 1142);
             Table.States (1046).Productions := WisiToken.To_Vector ((1 => 
(149, 4)));
             Add_Action (Table.States (1046), (15, 24, 28, 72, 104), (149, 4), 
2, component_list_4'Access, null);
-            Set_Minimal_Action (Table.States (1046).Minimal_Complete_Actions, 
(1 => (Reduce, 149, 2)));
+            Table.States (1046).Minimal_Complete_Action := (Reduce, 149, 2);
             Table.States (1047).Productions := WisiToken.To_Vector ((1 => 
(149, 0)));
             Add_Action (Table.States (1047), (15, 24, 28, 72, 104), (149, 0), 
2, null, null);
-            Set_Minimal_Action (Table.States (1047).Minimal_Complete_Actions, 
(1 => (Reduce, 149, 2)));
+            Table.States (1047).Minimal_Complete_Action := (Reduce, 149, 2);
             Table.States (1048).Productions := WisiToken.To_Vector ((1 => 
(149, 1)));
             Add_Action (Table.States (1048), (15, 24, 28, 72, 104), (149, 1), 
2, null, null);
-            Set_Minimal_Action (Table.States (1048).Minimal_Complete_Actions, 
(1 => (Reduce, 149, 2)));
+            Table.States (1048).Minimal_Complete_Action := (Reduce, 149, 2);
             Table.States (1049).Productions := WisiToken.To_Vector ((1 => 
(280, 0)));
             Add_Action (Table.States (1049), 54, 1143);
             Add_Error (Table.States (1049));
-            Set_Minimal_Action (Table.States (1049).Minimal_Complete_Actions, 
(1 => (Shift, 54, 1143)));
+            Table.States (1049).Minimal_Complete_Action := (Shift, 54, 1143);
             Table.States (1050).Productions := WisiToken.To_Vector (((146, 0), 
(146, 1)));
             Add_Action (Table.States (1050), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (1050), 8, 1144);
@@ -12238,7 +12149,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1050), 272, 92);
             Add_Goto (Table.States (1050), 293, 97);
             Add_Goto (Table.States (1050), 314, 1147);
-            Set_Minimal_Action (Table.States (1050).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1050).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1051).Productions := WisiToken.To_Vector ((1 => 
(228, 3)));
             Add_Action (Table.States (1051), 104, 119);
             Add_Action (Table.States (1051), 105, 33);
@@ -12249,7 +12160,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1051), 239, 841);
             Add_Goto (Table.States (1051), 272, 92);
             Add_Goto (Table.States (1051), 293, 97);
-            Set_Minimal_Action (Table.States (1051).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1051).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1052).Productions := WisiToken.To_Vector ((1 => 
(228, 1)));
             Add_Action (Table.States (1052), 104, 119);
             Add_Action (Table.States (1052), 105, 33);
@@ -12260,22 +12171,25 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1052), 239, 841);
             Add_Goto (Table.States (1052), 272, 92);
             Add_Goto (Table.States (1052), 293, 97);
-            Set_Minimal_Action (Table.States (1052).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1052).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1053).Productions := WisiToken.To_Vector ((1 => 
(183, 0)));
             Add_Action (Table.States (1053), (74, 96), (183, 0), 3, 
enumeration_type_definition_0'Access, null);
-            Set_Minimal_Action (Table.States (1053).Minimal_Complete_Actions, 
(1 => (Reduce, 183, 3)));
+            Table.States (1053).Minimal_Complete_Action := (Reduce, 183, 3);
             Table.States (1054).Productions := WisiToken.To_Vector ((1 => 
(181, 0)));
             Add_Action (Table.States (1054), 104, 898);
             Add_Action (Table.States (1054), 106, 899);
             Add_Error (Table.States (1054));
             Add_Goto (Table.States (1054), 180, 1150);
-            Set_Minimal_Action (Table.States (1054).Minimal_Complete_Actions, 
(1 => (Shift, 106, 899)));
+            Table.States (1054).Minimal_Complete_Action := (Shift, 104, 898);
+         end Subr_17;
+         procedure Subr_18
+         is begin
             Table.States (1055).Productions := WisiToken.To_Vector ((1 => 
(259, 0)));
             Add_Action (Table.States (1055), 10, 1151);
             Add_Action (Table.States (1055), 74, Reduce, (119, 1), 0, null, 
null);
             Add_Error (Table.States (1055));
             Add_Goto (Table.States (1055), 119, 1152);
-            Set_Minimal_Action (Table.States (1055).Minimal_Complete_Actions, 
(1 => (Reduce, 119, 0)));
+            Table.States (1055).Minimal_Complete_Action := (Reduce, 119, 0);
             Table.States (1056).Productions := WisiToken.To_Vector (((128, 0), 
(162, 0), (162, 1), (239, 0), (239, 1),
             (272, 0), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (1056), 10, 1151);
@@ -12293,39 +12207,38 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1056), 156, 1155);
             Add_Goto (Table.States (1056), 224, 621);
             Add_Goto (Table.States (1056), 322, 242);
-            Set_Minimal_Action (Table.States (1056).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 119, 0), (Reduce, 156, 0)));
+            Table.States (1056).Minimal_Complete_Action := (Reduce, 156, 0);
             Table.States (1057).Productions := WisiToken.To_Vector ((1 => 
(260, 0)));
             Add_Action (Table.States (1057), 96, 1156);
             Add_Error (Table.States (1057));
-            Set_Minimal_Action (Table.States (1057).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1156)));
+            Table.States (1057).Minimal_Complete_Action := (Shift, 96, 1156);
             Table.States (1058).Productions := WisiToken.To_Vector ((1 => 
(206, 0)));
             Add_Action (Table.States (1058), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (206, 0), 7,
             full_type_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1058).Minimal_Complete_Actions, 
(1 => (Reduce, 206, 7)));
+            Table.States (1058).Minimal_Complete_Action := (Reduce, 206, 7);
             Table.States (1059).Productions := WisiToken.To_Vector ((1 => 
(245, 2)));
             Add_Action (Table.States (1059), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (245, 2), 7,
             object_renaming_declaration_2'Access, null);
-            Set_Minimal_Action (Table.States (1059).Minimal_Complete_Actions, 
(1 => (Reduce, 245, 7)));
+            Table.States (1059).Minimal_Complete_Action := (Reduce, 245, 7);
             Table.States (1060).Productions := WisiToken.To_Vector ((1 => 
(245, 1)));
             Add_Action (Table.States (1060), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (245, 1), 7,
             object_renaming_declaration_1'Access, null);
-            Set_Minimal_Action (Table.States (1060).Minimal_Complete_Actions, 
(1 => (Reduce, 245, 7)));
+            Table.States (1060).Minimal_Complete_Action := (Reduce, 245, 7);
             Table.States (1061).Productions := WisiToken.To_Vector ((1 => 
(114, 1)));
             Add_Action (Table.States (1061), (21, 35, 56, 74, 77, 82, 96), 
(114, 1), 5, access_definition_1'Access,
             null);
-            Set_Minimal_Action (Table.States (1061).Minimal_Complete_Actions, 
(1 => (Reduce, 114, 5)));
+            Table.States (1061).Minimal_Complete_Action := (Reduce, 114, 5);
             Table.States (1062).Productions := WisiToken.To_Vector ((1 => 
(114, 0)));
             Add_Action (Table.States (1062), (21, 35, 56, 74, 77, 82, 96), 
(114, 0), 5, access_definition_0'Access,
             null);
-            Set_Minimal_Action (Table.States (1062).Minimal_Complete_Actions, 
(1 => (Reduce, 114, 5)));
+            Table.States (1062).Minimal_Complete_Action := (Reduce, 114, 5);
             Table.States (1063).Productions := WisiToken.To_Vector ((1 => 
(245, 0)));
             Add_Action (Table.States (1063), 96, 1157);
             Add_Error (Table.States (1063));
-            Set_Minimal_Action (Table.States (1063).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1157)));
+            Table.States (1063).Minimal_Complete_Action := (Shift, 96, 1157);
             Table.States (1064).Productions := WisiToken.To_Vector ((1 => 
(187, 0)));
             Add_Action (Table.States (1064), 44, 914);
             Add_Action (Table.States (1064), 104, 119);
@@ -12338,7 +12251,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1064), 239, 918);
             Add_Goto (Table.States (1064), 272, 92);
             Add_Goto (Table.States (1064), 293, 97);
-            Set_Minimal_Action (Table.States (1064).Minimal_Complete_Actions, 
(1 => (Shift, 44, 914)));
+            Table.States (1064).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1065).Productions := WisiToken.To_Vector ((1 => 
(185, 0)));
             Add_Action (Table.States (1065), 44, 914);
             Add_Action (Table.States (1065), 104, 119);
@@ -12350,7 +12263,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1065), 239, 918);
             Add_Goto (Table.States (1065), 272, 92);
             Add_Goto (Table.States (1065), 293, 97);
-            Set_Minimal_Action (Table.States (1065).Minimal_Complete_Actions, 
(1 => (Shift, 44, 914)));
+            Table.States (1065).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1066).Productions := WisiToken.To_Vector ((1 => 
(187, 1)));
             Add_Action (Table.States (1066), 4, 1);
             Add_Action (Table.States (1066), 5, 2);
@@ -12408,75 +12321,75 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1066), 303, 101);
             Add_Goto (Table.States (1066), 306, 363);
             Add_Goto (Table.States (1066), 323, 114);
-            Set_Minimal_Action (Table.States (1066).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (1066).Minimal_Complete_Action := (Reduce, 300, 0);
             Table.States (1067).Productions := WisiToken.To_Vector ((1 => 
(133, 0)));
             Add_Action (Table.States (1067), 96, 1161);
             Add_Error (Table.States (1067));
-            Set_Minimal_Action (Table.States (1067).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1161)));
+            Table.States (1067).Minimal_Complete_Action := (Shift, 96, 1161);
             Table.States (1068).Productions := WisiToken.To_Vector ((1 => 
(232, 1)));
             Add_Action (Table.States (1068), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (232, 1), 7, loop_statement_1'Access, 
loop_statement_1_check'Access);
-            Set_Minimal_Action (Table.States (1068).Minimal_Complete_Actions, 
(1 => (Reduce, 232, 7)));
+            Table.States (1068).Minimal_Complete_Action := (Reduce, 232, 7);
             Table.States (1069).Productions := WisiToken.To_Vector ((1 => 
(232, 0)));
             Add_Action (Table.States (1069), 96, 1162);
             Add_Error (Table.States (1069));
-            Set_Minimal_Action (Table.States (1069).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1162)));
+            Table.States (1069).Minimal_Complete_Action := (Shift, 96, 1162);
             Table.States (1070).Productions := WisiToken.To_Vector ((1 => 
(244, 1)));
             Add_Action (Table.States (1070), 74, 337);
             Add_Action (Table.States (1070), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (1070));
             Add_Goto (Table.States (1070), 122, 1163);
-            Set_Minimal_Action (Table.States (1070).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1070).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1071).Productions := WisiToken.To_Vector ((1 => 
(244, 4)));
             Add_Action (Table.States (1071), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (244, 4), 7,
             object_declaration_4'Access, null);
-            Set_Minimal_Action (Table.States (1071).Minimal_Complete_Actions, 
(1 => (Reduce, 244, 7)));
+            Table.States (1071).Minimal_Complete_Action := (Reduce, 244, 7);
             Table.States (1072).Productions := WisiToken.To_Vector ((1 => 
(244, 2)));
             Add_Action (Table.States (1072), 74, 337);
             Add_Action (Table.States (1072), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (1072));
             Add_Goto (Table.States (1072), 122, 1164);
-            Set_Minimal_Action (Table.States (1072).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1072).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1073).Productions := WisiToken.To_Vector ((1 => 
(244, 5)));
             Add_Action (Table.States (1073), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (244, 5), 7,
             object_declaration_5'Access, null);
-            Set_Minimal_Action (Table.States (1073).Minimal_Complete_Actions, 
(1 => (Reduce, 244, 7)));
+            Table.States (1073).Minimal_Complete_Action := (Reduce, 244, 7);
             Table.States (1074).Productions := WisiToken.To_Vector ((1 => 
(244, 0)));
             Add_Action (Table.States (1074), 74, 337);
             Add_Action (Table.States (1074), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (1074));
             Add_Goto (Table.States (1074), 122, 1165);
-            Set_Minimal_Action (Table.States (1074).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1074).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1075).Productions := WisiToken.To_Vector ((1 => 
(244, 3)));
             Add_Action (Table.States (1075), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (244, 3), 7,
             object_declaration_3'Access, null);
-            Set_Minimal_Action (Table.States (1075).Minimal_Complete_Actions, 
(1 => (Reduce, 244, 7)));
+            Table.States (1075).Minimal_Complete_Action := (Reduce, 244, 7);
             Table.States (1076).Productions := WisiToken.To_Vector ((1 => 
(179, 0)));
             Add_Action (Table.States (1076), 74, 337);
             Add_Action (Table.States (1076), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (1076));
             Add_Goto (Table.States (1076), 122, 1166);
-            Set_Minimal_Action (Table.States (1076).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1076).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1077).Productions := WisiToken.To_Vector ((1 => 
(213, 2)));
             Add_Action (Table.States (1077), 96, 1167);
             Add_Error (Table.States (1077));
-            Set_Minimal_Action (Table.States (1077).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1167)));
+            Table.States (1077).Minimal_Complete_Action := (Shift, 96, 1167);
             Table.States (1078).Productions := WisiToken.To_Vector ((1 => 
(213, 1)));
             Add_Action (Table.States (1078), 96, 1168);
             Add_Error (Table.States (1078));
-            Set_Minimal_Action (Table.States (1078).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1168)));
+            Table.States (1078).Minimal_Complete_Action := (Shift, 96, 1168);
             Table.States (1079).Productions := WisiToken.To_Vector ((1 => 
(307, 0)));
             Add_Action (Table.States (1079), 24, 1169);
             Add_Error (Table.States (1079));
-            Set_Minimal_Action (Table.States (1079).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1169)));
+            Table.States (1079).Minimal_Complete_Action := (Shift, 24, 1169);
             Table.States (1080).Productions := WisiToken.To_Vector ((1 => 
(113, 0)));
             Add_Action (Table.States (1080), 96, 1170);
             Add_Error (Table.States (1080));
-            Set_Minimal_Action (Table.States (1080).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1170)));
+            Table.States (1080).Minimal_Complete_Action := (Shift, 96, 1170);
             Table.States (1081).Productions := WisiToken.To_Vector ((1 => 
(137, 0)));
             Add_Action (Table.States (1081), 3, 121);
             Add_Action (Table.States (1081), 39, 122);
@@ -12513,17 +12426,17 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1081), 320, 144);
             Add_Goto (Table.States (1081), 321, 145);
             Add_Goto (Table.States (1081), 330, 146);
-            Set_Minimal_Action (Table.States (1081).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1081).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1082).Productions := WisiToken.To_Vector ((1 => 
(138, 0)));
             Add_Action (Table.States (1082), (77, 83), (138, 0), 3, 
case_expression_alternative_list_0'Access, null);
-            Set_Minimal_Action (Table.States (1082).Minimal_Complete_Actions, 
(1 => (Reduce, 138, 3)));
+            Table.States (1082).Minimal_Complete_Action := (Reduce, 138, 3);
             Table.States (1083).Productions := WisiToken.To_Vector ((1 => 
(221, 1)));
             Add_Action (Table.States (1083), (1 =>  77), (221, 1), 6, 
if_expression_1'Access, null);
-            Set_Minimal_Action (Table.States (1083).Minimal_Complete_Actions, 
(1 => (Reduce, 221, 6)));
+            Table.States (1083).Minimal_Complete_Action := (Reduce, 221, 6);
             Table.States (1084).Productions := WisiToken.To_Vector ((1 => 
(172, 0)));
             Add_Action (Table.States (1084), 68, 1172);
             Add_Error (Table.States (1084));
-            Set_Minimal_Action (Table.States (1084).Minimal_Complete_Actions, 
(1 => (Shift, 68, 1172)));
+            Table.States (1084).Minimal_Complete_Action := (Shift, 68, 1172);
             Table.States (1085).Productions := WisiToken.To_Vector ((1 => 
(221, 0)));
             Add_Action (Table.States (1085), 3, 121);
             Add_Action (Table.States (1085), 39, 122);
@@ -12559,14 +12472,14 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1085), 320, 144);
             Add_Goto (Table.States (1085), 321, 145);
             Add_Goto (Table.States (1085), 330, 146);
-            Set_Minimal_Action (Table.States (1085).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1085).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1086).Productions := WisiToken.To_Vector ((1 => 
(173, 0)));
             Add_Action (Table.States (1086), (22, 23, 77), (173, 0), 2, null, 
null);
-            Set_Minimal_Action (Table.States (1086).Minimal_Complete_Actions, 
(1 => (Reduce, 173, 2)));
+            Table.States (1086).Minimal_Complete_Action := (Reduce, 173, 2);
             Table.States (1087).Productions := WisiToken.To_Vector ((1 => 
(277, 0)));
             Add_Action (Table.States (1087), (10, 20, 21, 22, 23, 35, 37, 42, 
43, 53, 68, 74, 75, 77, 79, 82, 83, 87,
             96), (277, 0), 6, range_g_0'Access, null);
-            Set_Minimal_Action (Table.States (1087).Minimal_Complete_Actions, 
(1 => (Reduce, 277, 6)));
+            Table.States (1087).Minimal_Complete_Action := (Reduce, 277, 6);
             Table.States (1088).Productions := WisiToken.To_Vector (((128, 0), 
(165, 1), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3), (314, 0), (314, 1)));
             Add_Action (Table.States (1088), 53, 618);
@@ -12583,22 +12496,21 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1088), 155, 956);
             Add_Goto (Table.States (1088), 224, 621);
             Add_Goto (Table.States (1088), 322, 242);
-            Set_Minimal_Action (Table.States (1088).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 165, 3), (Reduce, 314, 3)));
+            Table.States (1088).Minimal_Complete_Action := (Reduce, 165, 3);
             Table.States (1089).Productions := WisiToken.To_Vector ((1 => 
(168, 0)));
             Add_Action (Table.States (1089), (77, 83), (168, 0), 3, null, 
null);
-            Set_Minimal_Action (Table.States (1089).Minimal_Complete_Actions, 
(1 => (Reduce, 168, 3)));
+            Table.States (1089).Minimal_Complete_Action := (Reduce, 168, 3);
             Table.States (1090).Productions := WisiToken.To_Vector ((1 => 
(235, 0)));
             Add_Action (Table.States (1090), (1 =>  104), (235, 0), 4, null, 
null);
-            Set_Minimal_Action (Table.States (1090).Minimal_Complete_Actions, 
(1 => (Reduce, 235, 4)));
+            Table.States (1090).Minimal_Complete_Action := (Reduce, 235, 4);
             Table.States (1091).Productions := WisiToken.To_Vector ((1 => 
(144, 0)));
             Add_Action (Table.States (1091), 53, 1174);
             Add_Error (Table.States (1091));
-            Set_Minimal_Action (Table.States (1091).Minimal_Complete_Actions, 
(1 => (Shift, 53, 1174)));
+            Table.States (1091).Minimal_Complete_Action := (Shift, 53, 1174);
             Table.States (1092).Productions := WisiToken.To_Vector ((1 => 
(281, 0)));
             Add_Action (Table.States (1092), 96, 1175);
             Add_Error (Table.States (1092));
-            Set_Minimal_Action (Table.States (1092).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1175)));
+            Table.States (1092).Minimal_Complete_Action := (Shift, 96, 1175);
             Table.States (1093).Productions := WisiToken.To_Vector ((1 => 
(254, 2)));
             Add_Action (Table.States (1093), 3, 121);
             Add_Action (Table.States (1093), 39, 122);
@@ -12635,7 +12547,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1093), 320, 144);
             Add_Goto (Table.States (1093), 321, 145);
             Add_Goto (Table.States (1093), 330, 146);
-            Set_Minimal_Action (Table.States (1093).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1093).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1094).Productions := WisiToken.To_Vector (((254, 0), 
(254, 1)));
             Add_Action (Table.States (1094), 104, 119);
             Add_Action (Table.States (1094), 105, 33);
@@ -12645,18 +12557,18 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1094), 239, 1177);
             Add_Goto (Table.States (1094), 272, 92);
             Add_Goto (Table.States (1094), 293, 97);
-            Set_Minimal_Action (Table.States (1094).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1094).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1095).Productions := WisiToken.To_Vector ((1 => 
(202, 6)));
             Add_Action (Table.States (1095), 80, 1178);
             Add_Error (Table.States (1095));
-            Set_Minimal_Action (Table.States (1095).Minimal_Complete_Actions, 
(1 => (Shift, 80, 1178)));
+            Table.States (1095).Minimal_Complete_Action := (Shift, 80, 1178);
             Table.States (1096).Productions := WisiToken.To_Vector ((1 => 
(201, 1)));
             Add_Action (Table.States (1096), (29, 47, 48, 50, 69, 71, 74, 
104), (201, 1), 7,
             formal_type_declaration_1'Access, null);
-            Set_Minimal_Action (Table.States (1096).Minimal_Complete_Actions, 
(1 => (Reduce, 201, 7)));
+            Table.States (1096).Minimal_Complete_Action := (Reduce, 201, 7);
             Table.States (1097).Productions := WisiToken.To_Vector ((1 => 
(202, 2)));
             Add_Action (Table.States (1097), (74, 96), (202, 2), 3, null, 
null);
-            Set_Minimal_Action (Table.States (1097).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 3)));
+            Table.States (1097).Minimal_Complete_Action := (Reduce, 202, 3);
             Table.States (1098).Productions := WisiToken.To_Vector (((128, 0), 
(203, 0), (203, 1), (239, 0), (239, 1),
             (272, 0), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (1098), 10, 1151);
@@ -12670,12 +12582,11 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1098), 115, 241);
             Add_Goto (Table.States (1098), 119, 1179);
             Add_Goto (Table.States (1098), 322, 242);
-            Set_Minimal_Action (Table.States (1098).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 119, 0)));
+            Table.States (1098).Minimal_Complete_Action := (Reduce, 119, 0);
             Table.States (1099).Productions := WisiToken.To_Vector ((1 => 
(201, 0)));
             Add_Action (Table.States (1099), (29, 47, 48, 50, 69, 71, 74, 
104), (201, 0), 7,
             formal_type_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1099).Minimal_Complete_Actions, 
(1 => (Reduce, 201, 7)));
+            Table.States (1099).Minimal_Complete_Action := (Reduce, 201, 7);
             Table.States (1100).Productions := WisiToken.To_Vector (((115, 0), 
(115, 1), (205, 0), (239, 0)));
             Add_Action (Table.States (1100), 3, 121);
             Add_Action (Table.States (1100), 15, 258);
@@ -12728,56 +12639,55 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1100), 320, 144);
             Add_Goto (Table.States (1100), 321, 145);
             Add_Goto (Table.States (1100), 330, 146);
-            Set_Minimal_Action (Table.States (1100).Minimal_Complete_Actions, 
((Shift, 32, 260), (Shift, 80, 1180),
-            (Shift, 105, 33), (Reduce, 125, 0)));
+            Table.States (1100).Minimal_Complete_Action := (Reduce, 125, 0);
             Table.States (1101).Productions := WisiToken.To_Vector ((1 => 
(204, 0)));
             Add_Action (Table.States (1101), 74, 337);
             Add_Action (Table.States (1101), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (1101));
             Add_Goto (Table.States (1101), 122, 1181);
-            Set_Minimal_Action (Table.States (1101).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1101).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1102).Productions := WisiToken.To_Vector ((1 => 
(200, 0)));
             Add_Action (Table.States (1102), (29, 47, 48, 50, 69, 71, 74, 
104), (200, 0), 7,
             formal_subprogram_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1102).Minimal_Complete_Actions, 
(1 => (Reduce, 200, 7)));
+            Table.States (1102).Minimal_Complete_Action := (Reduce, 200, 7);
             Table.States (1103).Productions := WisiToken.To_Vector ((1 => 
(198, 1)));
             Add_Action (Table.States (1103), 96, 1182);
             Add_Error (Table.States (1103));
-            Set_Minimal_Action (Table.States (1103).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1182)));
+            Table.States (1103).Minimal_Complete_Action := (Shift, 96, 1182);
             Table.States (1104).Productions := WisiToken.To_Vector ((1 => 
(198, 0)));
             Add_Action (Table.States (1104), 74, 337);
             Add_Action (Table.States (1104), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (1104));
             Add_Goto (Table.States (1104), 122, 1183);
-            Set_Minimal_Action (Table.States (1104).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1104).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1105).Productions := WisiToken.To_Vector ((1 => 
(198, 2)));
             Add_Action (Table.States (1105), (29, 47, 48, 50, 69, 71, 74, 
104), (198, 2), 7,
             formal_object_declaration_2'Access, null);
-            Set_Minimal_Action (Table.States (1105).Minimal_Complete_Actions, 
(1 => (Reduce, 198, 7)));
+            Table.States (1105).Minimal_Complete_Action := (Reduce, 198, 7);
             Table.States (1106).Productions := WisiToken.To_Vector ((1 => 
(222, 1)));
             Add_Action (Table.States (1106), 96, 1184);
             Add_Error (Table.States (1106));
-            Set_Minimal_Action (Table.States (1106).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1184)));
+            Table.States (1106).Minimal_Complete_Action := (Shift, 96, 1184);
             Table.States (1107).Productions := WisiToken.To_Vector ((1 => 
(174, 0)));
             Add_Action (Table.States (1107), (22, 23, 24), (174, 0), 4, 
elsif_statement_item_0'Access, null);
-            Set_Minimal_Action (Table.States (1107).Minimal_Complete_Actions, 
(1 => (Reduce, 174, 4)));
+            Table.States (1107).Minimal_Complete_Action := (Reduce, 174, 4);
             Table.States (1108).Productions := WisiToken.To_Vector ((1 => 
(222, 0)));
             Add_Action (Table.States (1108), 32, 1185);
             Add_Error (Table.States (1108));
-            Set_Minimal_Action (Table.States (1108).Minimal_Complete_Actions, 
(1 => (Shift, 32, 1185)));
+            Table.States (1108).Minimal_Complete_Action := (Shift, 32, 1185);
             Table.States (1109).Productions := WisiToken.To_Vector ((1 => 
(222, 2)));
             Add_Action (Table.States (1109), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (222, 2), 8, if_statement_2'Access, null);
-            Set_Minimal_Action (Table.States (1109).Minimal_Complete_Actions, 
(1 => (Reduce, 222, 8)));
+            Table.States (1109).Minimal_Complete_Action := (Reduce, 222, 8);
             Table.States (1110).Productions := WisiToken.To_Vector ((1 => 
(247, 0)));
             Add_Action (Table.States (1110), 24, 1186);
             Add_Error (Table.States (1110));
-            Set_Minimal_Action (Table.States (1110).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1186)));
+            Table.States (1110).Minimal_Complete_Action := (Shift, 24, 1186);
             Table.States (1111).Productions := WisiToken.To_Vector ((1 => 
(247, 1)));
             Add_Action (Table.States (1111), 96, 1187);
             Add_Error (Table.States (1111));
-            Set_Minimal_Action (Table.States (1111).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1187)));
+            Table.States (1111).Minimal_Complete_Action := (Shift, 96, 1187);
             Table.States (1112).Productions := WisiToken.To_Vector ((1 => 
(251, 0)));
             Add_Action (Table.States (1112), 96, Reduce, (240, 1), 0, null, 
null);
             Add_Action (Table.States (1112), 104, 119);
@@ -12789,7 +12699,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1112), 240, 1188);
             Add_Goto (Table.States (1112), 272, 92);
             Add_Goto (Table.States (1112), 293, 97);
-            Set_Minimal_Action (Table.States (1112).Minimal_Complete_Actions, 
(1 => (Reduce, 240, 0)));
+            Table.States (1112).Minimal_Complete_Action := (Reduce, 240, 0);
             Table.States (1113).Productions := WisiToken.To_Vector (((177, 0), 
(199, 0)));
             Add_Action (Table.States (1113), 28, 1189);
             Add_Action (Table.States (1113), 77, Reduce, (254, 4), 0, null, 
null);
@@ -12799,28 +12709,28 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1113), 219, 493);
             Add_Goto (Table.States (1113), 254, 494);
             Add_Goto (Table.States (1113), 255, 495);
-            Set_Minimal_Action (Table.States (1113).Minimal_Complete_Actions, 
((Shift, 28, 1189), (Reduce, 255, 0)));
+            Table.States (1113).Minimal_Complete_Action := (Reduce, 255, 0);
             Table.States (1114).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1114), 72, 1190);
             Add_Error (Table.States (1114));
-            Set_Minimal_Action (Table.States (1114).Minimal_Complete_Actions, 
(1 => (Shift, 72, 1190)));
+            Table.States (1114).Minimal_Complete_Action := (Shift, 72, 1190);
             Table.States (1115).Productions := WisiToken.To_Vector ((1 => 
(177, 1)));
             Add_Action (Table.States (1115), (1 =>  72), (177, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (1115).Minimal_Complete_Actions, 
(1 => (Reduce, 177, 1)));
+            Table.States (1115).Minimal_Complete_Action := (Reduce, 177, 1);
             Table.States (1116).Productions := WisiToken.To_Vector ((1 => 
(264, 0)));
             Add_Action (Table.States (1116), 96, 1191);
             Add_Error (Table.States (1116));
-            Set_Minimal_Action (Table.States (1116).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1191)));
+            Table.States (1116).Minimal_Complete_Action := (Shift, 96, 1191);
             Table.States (1117).Productions := WisiToken.To_Vector (((227, 0), 
(271, 0)));
             Add_Action (Table.States (1117), 10, 1006);
             Add_Action (Table.States (1117), 74, 1192);
             Add_Error (Table.States (1117));
-            Set_Minimal_Action (Table.States (1117).Minimal_Complete_Actions, 
(1 => (Shift, 74, 1192)));
+            Table.States (1117).Minimal_Complete_Action := (Shift, 74, 1192);
             Table.States (1118).Productions := WisiToken.To_Vector ((1 => 
(271, 1)));
             Add_Action (Table.States (1118), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (271, 1), 8,
             protected_type_declaration_1'Access, 
protected_type_declaration_1_check'Access);
-            Set_Minimal_Action (Table.States (1118).Minimal_Complete_Actions, 
(1 => (Reduce, 271, 8)));
+            Table.States (1118).Minimal_Complete_Action := (Reduce, 271, 8);
             Table.States (1119).Productions := WisiToken.To_Vector (((128, 0), 
(227, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (1119), 10, Reduce, (227, 0), 3, 
interface_list_0'Access, null);
@@ -12833,50 +12743,49 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (1119));
             Add_Goto (Table.States (1119), 115, 241);
             Add_Goto (Table.States (1119), 322, 242);
-            Set_Minimal_Action (Table.States (1119).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 227, 3)));
+            Table.States (1119).Minimal_Complete_Action := (Reduce, 227, 3);
             Table.States (1120).Productions := WisiToken.To_Vector ((1 => 
(304, 0)));
             Add_Action (Table.States (1120), 96, 1193);
             Add_Error (Table.States (1120));
-            Set_Minimal_Action (Table.States (1120).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1193)));
+            Table.States (1120).Minimal_Complete_Action := (Shift, 96, 1193);
             Table.States (1121).Productions := WisiToken.To_Vector ((1 => 
(266, 0)));
             Add_Action (Table.States (1121), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (1121), 104, 149);
             Add_Error (Table.States (1121));
             Add_Goto (Table.States (1121), 220, 1194);
-            Set_Minimal_Action (Table.States (1121).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (1121).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (1122).Productions := WisiToken.To_Vector ((1 => 
(194, 0)));
             Add_Action (Table.States (1122), (21, 96), (194, 0), 7, 
extended_return_object_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1122).Minimal_Complete_Actions, 
(1 => (Reduce, 194, 7)));
+            Table.States (1122).Minimal_Complete_Action := (Reduce, 194, 7);
             Table.States (1123).Productions := WisiToken.To_Vector ((1 => 
(126, 0)));
             Add_Action (Table.States (1123), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (126, 0), 8, asynchronous_select_0'Access, null);
-            Set_Minimal_Action (Table.States (1123).Minimal_Complete_Actions, 
(1 => (Reduce, 126, 8)));
+            Table.States (1123).Minimal_Complete_Action := (Reduce, 126, 8);
             Table.States (1124).Productions := WisiToken.To_Vector ((1 => 
(316, 0)));
             Add_Action (Table.States (1124), 24, 1195);
             Add_Error (Table.States (1124));
-            Set_Minimal_Action (Table.States (1124).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1195)));
+            Table.States (1124).Minimal_Complete_Action := (Shift, 24, 1195);
             Table.States (1125).Productions := WisiToken.To_Vector (((227, 0), 
(319, 0)));
             Add_Action (Table.States (1125), 10, 1006);
             Add_Action (Table.States (1125), 74, 1196);
             Add_Error (Table.States (1125));
-            Set_Minimal_Action (Table.States (1125).Minimal_Complete_Actions, 
(1 => (Shift, 74, 1196)));
+            Table.States (1125).Minimal_Complete_Action := (Shift, 74, 1196);
             Table.States (1126).Productions := WisiToken.To_Vector ((1 => 
(319, 1)));
             Add_Action (Table.States (1126), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (1126), 104, 149);
             Add_Error (Table.States (1126));
             Add_Goto (Table.States (1126), 220, 1197);
-            Set_Minimal_Action (Table.States (1126).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (1126).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (1127).Productions := WisiToken.To_Vector ((1 => 
(305, 0)));
             Add_Action (Table.States (1127), 24, 1198);
             Add_Error (Table.States (1127));
-            Set_Minimal_Action (Table.States (1127).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1198)));
+            Table.States (1127).Minimal_Complete_Action := (Shift, 24, 1198);
             Table.States (1128).Productions := WisiToken.To_Vector ((1 => 
(305, 1)));
             Add_Action (Table.States (1128), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (305, 1), 8,
             single_task_declaration_1'Access, 
single_task_declaration_1_check'Access);
-            Set_Minimal_Action (Table.States (1128).Minimal_Complete_Actions, 
(1 => (Reduce, 305, 8)));
+            Table.States (1128).Minimal_Complete_Action := (Reduce, 305, 8);
             Table.States (1129).Productions := WisiToken.To_Vector (((239, 5), 
(242, 2)));
             Add_Action (Table.States (1129), 76, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (1129), 77, Reduce, (242, 2), 3, 
null_exclusion_opt_name_type_2'Access, null);
@@ -12886,7 +12795,7 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (1129), 101, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Action (Table.States (1129), 102, Reduce, (239, 5), 1, 
name_5'Access, name_5_check'Access);
             Add_Error (Table.States (1129));
-            Set_Minimal_Action (Table.States (1129).Minimal_Complete_Actions, 
((Reduce, 239, 1), (Reduce, 242, 3)));
+            Table.States (1129).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (1130).Productions := WisiToken.To_Vector (((239, 2), 
(242, 3)));
             Add_Action (Table.States (1130), 76, Reduce, (239, 2), 1, null, 
name_2_check'Access);
             Add_Action (Table.States (1130), 77, Reduce, (242, 3), 3, 
null_exclusion_opt_name_type_3'Access, null);
@@ -12896,24 +12805,21 @@ package body Ada_Process_LALR_Main is
             Add_Action (Table.States (1130), 101, Reduce, (239, 2), 1, null, 
name_2_check'Access);
             Add_Action (Table.States (1130), 102, Reduce, (239, 2), 1, null, 
name_2_check'Access);
             Add_Error (Table.States (1130));
-            Set_Minimal_Action (Table.States (1130).Minimal_Complete_Actions, 
((Reduce, 239, 1), (Reduce, 242, 3)));
-         end Subr_18;
-         procedure Subr_19
-         is begin
+            Table.States (1130).Minimal_Complete_Action := (Reduce, 239, 1);
             Table.States (1131).Productions := WisiToken.To_Vector ((1 => 
(170, 1)));
             Add_Action (Table.States (1131), (77, 96), (170, 1), 5, null, 
null);
-            Set_Minimal_Action (Table.States (1131).Minimal_Complete_Actions, 
(1 => (Reduce, 170, 5)));
+            Table.States (1131).Minimal_Complete_Action := (Reduce, 170, 5);
             Table.States (1132).Productions := WisiToken.To_Vector ((1 => 
(170, 0)));
             Add_Action (Table.States (1132), (77, 96), (170, 0), 5, null, 
null);
-            Set_Minimal_Action (Table.States (1132).Minimal_Complete_Actions, 
(1 => (Reduce, 170, 5)));
+            Table.States (1132).Minimal_Complete_Action := (Reduce, 170, 5);
             Table.States (1133).Productions := WisiToken.To_Vector ((1 => 
(120, 1)));
             Add_Action (Table.States (1133), 42, 1199);
             Add_Error (Table.States (1133));
-            Set_Minimal_Action (Table.States (1133).Minimal_Complete_Actions, 
(1 => (Shift, 42, 1199)));
+            Table.States (1133).Minimal_Complete_Action := (Shift, 42, 1199);
             Table.States (1134).Productions := WisiToken.To_Vector ((1 => 
(120, 0)));
             Add_Action (Table.States (1134), 42, 1200);
             Add_Error (Table.States (1134));
-            Set_Minimal_Action (Table.States (1134).Minimal_Complete_Actions, 
(1 => (Shift, 42, 1200)));
+            Table.States (1134).Minimal_Complete_Action := (Shift, 42, 1200);
             Table.States (1135).Productions := WisiToken.To_Vector ((1 => 
(226, 0)));
             Add_Action (Table.States (1135), 104, 119);
             Add_Action (Table.States (1135), 105, 33);
@@ -12924,7 +12830,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1135), 239, 1202);
             Add_Goto (Table.States (1135), 272, 92);
             Add_Goto (Table.States (1135), 293, 97);
-            Set_Minimal_Action (Table.States (1135).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1135).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1136).Productions := WisiToken.To_Vector (((155, 0), 
(225, 0)));
             Add_Action (Table.States (1136), 3, 121);
             Add_Action (Table.States (1136), 39, 122);
@@ -12951,42 +12857,45 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1136), 320, 144);
             Add_Goto (Table.States (1136), 321, 145);
             Add_Goto (Table.States (1136), 330, 146);
-            Set_Minimal_Action (Table.States (1136).Minimal_Complete_Actions, 
((Shift, 80, 1203), (Shift, 105, 33)));
+            Table.States (1136).Minimal_Complete_Action := (Shift, 80, 1203);
             Table.States (1137).Productions := WisiToken.To_Vector ((1 => 
(326, 4)));
             Add_Action (Table.States (1137), 53, 1036);
             Add_Action (Table.States (1137), 74, Reduce, (279, 1), 0, null, 
null);
             Add_Action (Table.States (1137), 96, Reduce, (279, 1), 0, null, 
null);
             Add_Error (Table.States (1137));
             Add_Goto (Table.States (1137), 279, 1204);
-            Set_Minimal_Action (Table.States (1137).Minimal_Complete_Actions, 
(1 => (Reduce, 279, 0)));
+            Table.States (1137).Minimal_Complete_Action := (Reduce, 279, 0);
             Table.States (1138).Productions := WisiToken.To_Vector ((1 => 
(279, 0)));
             Add_Action (Table.States (1138), 85, 1205);
             Add_Error (Table.States (1138));
-            Set_Minimal_Action (Table.States (1138).Minimal_Complete_Actions, 
(1 => (Shift, 85, 1205)));
+            Table.States (1138).Minimal_Complete_Action := (Shift, 85, 1205);
             Table.States (1139).Productions := WisiToken.To_Vector (((227, 0), 
(228, 0)));
             Add_Action (Table.States (1139), 10, 1006);
             Add_Action (Table.States (1139), 74, Reduce, (228, 0), 4, null, 
null);
             Add_Action (Table.States (1139), 96, Reduce, (228, 0), 4, null, 
null);
             Add_Error (Table.States (1139));
-            Set_Minimal_Action (Table.States (1139).Minimal_Complete_Actions, 
(1 => (Reduce, 228, 4)));
+            Table.States (1139).Minimal_Complete_Action := (Reduce, 228, 4);
             Table.States (1140).Productions := WisiToken.To_Vector (((227, 0), 
(228, 2)));
             Add_Action (Table.States (1140), 10, 1006);
             Add_Action (Table.States (1140), 74, Reduce, (228, 2), 4, null, 
null);
             Add_Action (Table.States (1140), 96, Reduce, (228, 2), 4, null, 
null);
             Add_Error (Table.States (1140));
-            Set_Minimal_Action (Table.States (1140).Minimal_Complete_Actions, 
(1 => (Reduce, 228, 4)));
+            Table.States (1140).Minimal_Complete_Action := (Reduce, 228, 4);
+         end Subr_18;
+         procedure Subr_19
+         is begin
             Table.States (1141).Productions := WisiToken.To_Vector ((1 => 
(326, 1)));
             Add_Action (Table.States (1141), (74, 96), (326, 1), 4, null, 
null);
-            Set_Minimal_Action (Table.States (1141).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 4)));
+            Table.States (1141).Minimal_Complete_Action := (Reduce, 326, 4);
             Table.States (1142).Productions := WisiToken.To_Vector ((1 => 
(327, 0)));
             Add_Action (Table.States (1142), 72, 1206);
             Add_Error (Table.States (1142));
             Add_Goto (Table.States (1142), 328, 1207);
             Add_Goto (Table.States (1142), 329, 1208);
-            Set_Minimal_Action (Table.States (1142).Minimal_Complete_Actions, 
(1 => (Shift, 72, 1206)));
+            Table.States (1142).Minimal_Complete_Action := (Shift, 72, 1206);
             Table.States (1143).Productions := WisiToken.To_Vector ((1 => 
(280, 0)));
             Add_Action (Table.States (1143), (74, 96), (280, 0), 4, 
record_definition_0'Access, null);
-            Set_Minimal_Action (Table.States (1143).Minimal_Complete_Actions, 
(1 => (Reduce, 280, 4)));
+            Table.States (1143).Minimal_Complete_Action := (Reduce, 280, 4);
             Table.States (1144).Productions := WisiToken.To_Vector (((147, 0), 
(147, 2)));
             Add_Action (Table.States (1144), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (1144), 40, 742);
@@ -13001,35 +12910,35 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1144), 272, 92);
             Add_Goto (Table.States (1144), 293, 97);
             Add_Goto (Table.States (1144), 314, 1210);
-            Set_Minimal_Action (Table.States (1144).Minimal_Complete_Actions, 
((Shift, 105, 33), (Reduce, 241, 0)));
+            Table.States (1144).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1145).Productions := WisiToken.To_Vector ((1 => 
(147, 3)));
             Add_Action (Table.States (1145), (74, 82, 96), (147, 3), 1, null, 
null);
-            Set_Minimal_Action (Table.States (1145).Minimal_Complete_Actions, 
(1 => (Reduce, 147, 1)));
+            Table.States (1145).Minimal_Complete_Action := (Reduce, 147, 1);
             Table.States (1146).Productions := WisiToken.To_Vector (((146, 0), 
(146, 1)));
             Add_Action (Table.States (1146), 74, 337);
             Add_Action (Table.States (1146), 82, 1211);
             Add_Action (Table.States (1146), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (1146));
             Add_Goto (Table.States (1146), 122, 1212);
-            Set_Minimal_Action (Table.States (1146).Minimal_Complete_Actions, 
((Shift, 82, 1211), (Reduce, 122, 0)));
+            Table.States (1146).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1147).Productions := WisiToken.To_Vector ((1 => 
(147, 1)));
             Add_Action (Table.States (1147), (74, 82, 96), (147, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (1147).Minimal_Complete_Actions, 
(1 => (Reduce, 147, 1)));
+            Table.States (1147).Minimal_Complete_Action := (Reduce, 147, 1);
             Table.States (1148).Productions := WisiToken.To_Vector (((227, 0), 
(228, 3)));
             Add_Action (Table.States (1148), 10, 1006);
             Add_Action (Table.States (1148), 74, Reduce, (228, 3), 4, null, 
null);
             Add_Action (Table.States (1148), 96, Reduce, (228, 3), 4, null, 
null);
             Add_Error (Table.States (1148));
-            Set_Minimal_Action (Table.States (1148).Minimal_Complete_Actions, 
(1 => (Reduce, 228, 4)));
+            Table.States (1148).Minimal_Complete_Action := (Reduce, 228, 4);
             Table.States (1149).Productions := WisiToken.To_Vector (((227, 0), 
(228, 1)));
             Add_Action (Table.States (1149), 10, 1006);
             Add_Action (Table.States (1149), 74, Reduce, (228, 1), 4, null, 
null);
             Add_Action (Table.States (1149), 96, Reduce, (228, 1), 4, null, 
null);
             Add_Error (Table.States (1149));
-            Set_Minimal_Action (Table.States (1149).Minimal_Complete_Actions, 
(1 => (Reduce, 228, 4)));
+            Table.States (1149).Minimal_Complete_Action := (Reduce, 228, 4);
             Table.States (1150).Productions := WisiToken.To_Vector ((1 => 
(181, 0)));
             Add_Action (Table.States (1150), (77, 83), (181, 0), 3, null, 
null);
-            Set_Minimal_Action (Table.States (1150).Minimal_Complete_Actions, 
(1 => (Reduce, 181, 3)));
+            Table.States (1150).Minimal_Complete_Action := (Reduce, 181, 3);
             Table.States (1151).Productions := WisiToken.To_Vector ((1 => 
(119, 0)));
             Add_Action (Table.States (1151), 104, 119);
             Add_Action (Table.States (1151), 105, 33);
@@ -13040,78 +12949,78 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1151), 239, 841);
             Add_Goto (Table.States (1151), 272, 92);
             Add_Goto (Table.States (1151), 293, 97);
-            Set_Minimal_Action (Table.States (1151).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1151).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1152).Productions := WisiToken.To_Vector ((1 => 
(259, 0)));
             Add_Action (Table.States (1152), 74, 1214);
             Add_Error (Table.States (1152));
-            Set_Minimal_Action (Table.States (1152).Minimal_Complete_Actions, 
(1 => (Shift, 74, 1214)));
+            Table.States (1152).Minimal_Complete_Action := (Shift, 74, 1214);
             Table.States (1153).Productions := WisiToken.To_Vector ((1 => 
(162, 0)));
             Add_Action (Table.States (1153), 74, 1215);
             Add_Error (Table.States (1153));
-            Set_Minimal_Action (Table.States (1153).Minimal_Complete_Actions, 
(1 => (Shift, 74, 1215)));
+            Table.States (1153).Minimal_Complete_Action := (Shift, 74, 1215);
             Table.States (1154).Productions := WisiToken.To_Vector ((1 => 
(156, 0)));
             Add_Action (Table.States (1154), (74, 96), (156, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (1154).Minimal_Complete_Actions, 
(1 => (Reduce, 156, 1)));
+            Table.States (1154).Minimal_Complete_Action := (Reduce, 156, 1);
             Table.States (1155).Productions := WisiToken.To_Vector ((1 => 
(162, 1)));
             Add_Action (Table.States (1155), (74, 96), (162, 1), 4, 
derived_type_definition_1'Access, null);
-            Set_Minimal_Action (Table.States (1155).Minimal_Complete_Actions, 
(1 => (Reduce, 162, 4)));
+            Table.States (1155).Minimal_Complete_Action := (Reduce, 162, 4);
             Table.States (1156).Productions := WisiToken.To_Vector ((1 => 
(260, 0)));
             Add_Action (Table.States (1156), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (260, 0), 8,
             private_type_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1156).Minimal_Complete_Actions, 
(1 => (Reduce, 260, 8)));
+            Table.States (1156).Minimal_Complete_Action := (Reduce, 260, 8);
             Table.States (1157).Productions := WisiToken.To_Vector ((1 => 
(245, 0)));
             Add_Action (Table.States (1157), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (245, 0), 8,
             object_renaming_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1157).Minimal_Complete_Actions, 
(1 => (Reduce, 245, 8)));
+            Table.States (1157).Minimal_Complete_Action := (Reduce, 245, 8);
             Table.States (1158).Productions := WisiToken.To_Vector (((185, 0), 
(187, 0)));
             Add_Action (Table.States (1158), 79, 1065);
             Add_Action (Table.States (1158), 87, 1216);
             Add_Error (Table.States (1158));
-            Set_Minimal_Action (Table.States (1158).Minimal_Complete_Actions, 
(1 => (Shift, 87, 1216)));
+            Table.States (1158).Minimal_Complete_Action := (Shift, 87, 1216);
             Table.States (1159).Productions := WisiToken.To_Vector ((1 => 
(185, 0)));
             Add_Action (Table.States (1159), (79, 87), (185, 0), 3, null, 
null);
-            Set_Minimal_Action (Table.States (1159).Minimal_Complete_Actions, 
(1 => (Reduce, 185, 3)));
+            Table.States (1159).Minimal_Complete_Action := (Reduce, 185, 3);
             Table.States (1160).Productions := WisiToken.To_Vector ((1 => 
(187, 1)));
             Add_Action (Table.States (1160), (24, 72), (187, 1), 4, 
exception_handler_1'Access, null);
-            Set_Minimal_Action (Table.States (1160).Minimal_Complete_Actions, 
(1 => (Reduce, 187, 4)));
+            Table.States (1160).Minimal_Complete_Action := (Reduce, 187, 4);
             Table.States (1161).Productions := WisiToken.To_Vector ((1 => 
(133, 0)));
             Add_Action (Table.States (1161), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (133, 0), 8, block_statement_0'Access, 
block_statement_0_check'Access);
-            Set_Minimal_Action (Table.States (1161).Minimal_Complete_Actions, 
(1 => (Reduce, 133, 8)));
+            Table.States (1161).Minimal_Complete_Action := (Reduce, 133, 8);
             Table.States (1162).Productions := WisiToken.To_Vector ((1 => 
(232, 0)));
             Add_Action (Table.States (1162), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (232, 0), 8, loop_statement_0'Access, 
loop_statement_0_check'Access);
-            Set_Minimal_Action (Table.States (1162).Minimal_Complete_Actions, 
(1 => (Reduce, 232, 8)));
+            Table.States (1162).Minimal_Complete_Action := (Reduce, 232, 8);
             Table.States (1163).Productions := WisiToken.To_Vector ((1 => 
(244, 1)));
             Add_Action (Table.States (1163), 96, 1217);
             Add_Error (Table.States (1163));
-            Set_Minimal_Action (Table.States (1163).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1217)));
+            Table.States (1163).Minimal_Complete_Action := (Shift, 96, 1217);
             Table.States (1164).Productions := WisiToken.To_Vector ((1 => 
(244, 2)));
             Add_Action (Table.States (1164), 96, 1218);
             Add_Error (Table.States (1164));
-            Set_Minimal_Action (Table.States (1164).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1218)));
+            Table.States (1164).Minimal_Complete_Action := (Shift, 96, 1218);
             Table.States (1165).Productions := WisiToken.To_Vector ((1 => 
(244, 0)));
             Add_Action (Table.States (1165), 96, 1219);
             Add_Error (Table.States (1165));
-            Set_Minimal_Action (Table.States (1165).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1219)));
+            Table.States (1165).Minimal_Complete_Action := (Shift, 96, 1219);
             Table.States (1166).Productions := WisiToken.To_Vector ((1 => 
(179, 0)));
             Add_Action (Table.States (1166), 96, 1220);
             Add_Error (Table.States (1166));
-            Set_Minimal_Action (Table.States (1166).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1220)));
+            Table.States (1166).Minimal_Complete_Action := (Shift, 96, 1220);
             Table.States (1167).Productions := WisiToken.To_Vector ((1 => 
(213, 2)));
             Add_Action (Table.States (1167), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (213, 2), 8,
             generic_instantiation_2'Access, null);
-            Set_Minimal_Action (Table.States (1167).Minimal_Complete_Actions, 
(1 => (Reduce, 213, 8)));
+            Table.States (1167).Minimal_Complete_Action := (Reduce, 213, 8);
             Table.States (1168).Productions := WisiToken.To_Vector ((1 => 
(213, 1)));
             Add_Action (Table.States (1168), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (213, 1), 8,
             generic_instantiation_1'Access, null);
-            Set_Minimal_Action (Table.States (1168).Minimal_Complete_Actions, 
(1 => (Reduce, 213, 8)));
+            Table.States (1168).Minimal_Complete_Action := (Reduce, 213, 8);
             Table.States (1169).Productions := WisiToken.To_Vector ((1 => 
(307, 0)));
             Add_Action (Table.States (1169), 96, Reduce, (240, 1), 0, null, 
null);
             Add_Action (Table.States (1169), 104, 119);
@@ -13123,15 +13032,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1169), 240, 1221);
             Add_Goto (Table.States (1169), 272, 92);
             Add_Goto (Table.States (1169), 293, 97);
-            Set_Minimal_Action (Table.States (1169).Minimal_Complete_Actions, 
(1 => (Reduce, 240, 0)));
+            Table.States (1169).Minimal_Complete_Action := (Reduce, 240, 0);
             Table.States (1170).Productions := WisiToken.To_Vector ((1 => 
(113, 0)));
             Add_Action (Table.States (1170), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (113, 0), 9, accept_statement_0'Access, 
accept_statement_0_check'Access);
-            Set_Minimal_Action (Table.States (1170).Minimal_Complete_Actions, 
(1 => (Reduce, 113, 9)));
+            Table.States (1170).Minimal_Complete_Action := (Reduce, 113, 9);
             Table.States (1171).Productions := WisiToken.To_Vector ((1 => 
(137, 0)));
             Add_Action (Table.States (1171), (77, 83), (137, 0), 4, 
case_expression_alternative_0'Access, null);
-            Set_Minimal_Action (Table.States (1171).Minimal_Complete_Actions, 
(1 => (Reduce, 137, 4)));
+            Table.States (1171).Minimal_Complete_Action := (Reduce, 137, 4);
             Table.States (1172).Productions := WisiToken.To_Vector ((1 => 
(172, 0)));
             Add_Action (Table.States (1172), 3, 121);
             Add_Action (Table.States (1172), 22, Reduce, (192, 1), 0, null, 
null);
@@ -13169,10 +13078,10 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1172), 320, 144);
             Add_Goto (Table.States (1172), 321, 145);
             Add_Goto (Table.States (1172), 330, 146);
-            Set_Minimal_Action (Table.States (1172).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1172).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1173).Productions := WisiToken.To_Vector ((1 => 
(221, 0)));
             Add_Action (Table.States (1173), (1 =>  77), (221, 0), 7, 
if_expression_0'Access, null);
-            Set_Minimal_Action (Table.States (1173).Minimal_Complete_Actions, 
(1 => (Reduce, 221, 7)));
+            Table.States (1173).Minimal_Complete_Action := (Reduce, 221, 7);
             Table.States (1174).Productions := WisiToken.To_Vector ((1 => 
(144, 0)));
             Add_Action (Table.States (1174), 3, 121);
             Add_Action (Table.States (1174), 39, 122);
@@ -13197,15 +13106,15 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1174), 320, 144);
             Add_Goto (Table.States (1174), 321, 145);
             Add_Goto (Table.States (1174), 330, 146);
-            Set_Minimal_Action (Table.States (1174).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1174).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (1175).Productions := WisiToken.To_Vector ((1 => 
(281, 0)));
             Add_Action (Table.States (1175), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 72, 73, 
74, 93, 104, 105, 106, 107), (281, 0), 9,
             record_representation_clause_0'Access, null);
-            Set_Minimal_Action (Table.States (1175).Minimal_Complete_Actions, 
(1 => (Reduce, 281, 9)));
+            Table.States (1175).Minimal_Complete_Action := (Reduce, 281, 9);
             Table.States (1176).Productions := WisiToken.To_Vector ((1 => 
(254, 2)));
             Add_Action (Table.States (1176), (77, 96), (254, 2), 6, 
parameter_specification_2'Access, null);
-            Set_Minimal_Action (Table.States (1176).Minimal_Complete_Actions, 
(1 => (Reduce, 254, 6)));
+            Table.States (1176).Minimal_Complete_Action := (Reduce, 254, 6);
             Table.States (1177).Productions := WisiToken.To_Vector (((128, 0), 
(239, 0), (239, 1), (254, 0), (254, 1),
             (272, 0), (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (1177), 76, 235);
@@ -13218,41 +13127,40 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (1177));
             Add_Goto (Table.States (1177), 115, 241);
             Add_Goto (Table.States (1177), 322, 242);
-            Set_Minimal_Action (Table.States (1177).Minimal_Complete_Actions, 
((Shift, 84, 237), (Shift, 102, 240),
-            (Reduce, 254, 6)));
+            Table.States (1177).Minimal_Complete_Action := (Reduce, 254, 6);
             Table.States (1178).Productions := WisiToken.To_Vector ((1 => 
(202, 6)));
             Add_Action (Table.States (1178), (74, 96), (202, 6), 4, null, 
null);
-            Set_Minimal_Action (Table.States (1178).Minimal_Complete_Actions, 
(1 => (Reduce, 202, 4)));
+            Table.States (1178).Minimal_Complete_Action := (Reduce, 202, 4);
             Table.States (1179).Productions := WisiToken.To_Vector (((203, 0), 
(203, 1)));
             Add_Action (Table.States (1179), 74, 1225, (203, 1), 4, 
formal_derived_type_definition_1'Access, null);
             Add_Action (Table.States (1179), 96, Reduce, (203, 1), 4, 
formal_derived_type_definition_1'Access, null);
             Add_Error (Table.States (1179));
-            Set_Minimal_Action (Table.States (1179).Minimal_Complete_Actions, 
(1 => (Reduce, 203, 4)));
+            Table.States (1179).Minimal_Complete_Action := (Reduce, 203, 4);
             Table.States (1180).Productions := WisiToken.To_Vector ((1 => 
(205, 0)));
             Add_Action (Table.States (1180), 77, 1226);
             Add_Error (Table.States (1180));
-            Set_Minimal_Action (Table.States (1180).Minimal_Complete_Actions, 
(1 => (Shift, 77, 1226)));
+            Table.States (1180).Minimal_Complete_Action := (Shift, 77, 1226);
             Table.States (1181).Productions := WisiToken.To_Vector ((1 => 
(204, 0)));
             Add_Action (Table.States (1181), 96, 1227);
             Add_Error (Table.States (1181));
-            Set_Minimal_Action (Table.States (1181).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1227)));
+            Table.States (1181).Minimal_Complete_Action := (Shift, 96, 1227);
             Table.States (1182).Productions := WisiToken.To_Vector ((1 => 
(198, 1)));
             Add_Action (Table.States (1182), (29, 47, 48, 50, 69, 71, 74, 
104), (198, 1), 8,
             formal_object_declaration_1'Access, null);
-            Set_Minimal_Action (Table.States (1182).Minimal_Complete_Actions, 
(1 => (Reduce, 198, 8)));
+            Table.States (1182).Minimal_Complete_Action := (Reduce, 198, 8);
             Table.States (1183).Productions := WisiToken.To_Vector ((1 => 
(198, 0)));
             Add_Action (Table.States (1183), 96, 1228);
             Add_Error (Table.States (1183));
-            Set_Minimal_Action (Table.States (1183).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1228)));
+            Table.States (1183).Minimal_Complete_Action := (Shift, 96, 1228);
             Table.States (1184).Productions := WisiToken.To_Vector ((1 => 
(222, 1)));
             Add_Action (Table.States (1184), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (222, 1), 9, if_statement_1'Access, null);
-            Set_Minimal_Action (Table.States (1184).Minimal_Complete_Actions, 
(1 => (Reduce, 222, 9)));
+            Table.States (1184).Minimal_Complete_Action := (Reduce, 222, 9);
             Table.States (1185).Productions := WisiToken.To_Vector ((1 => 
(222, 0)));
             Add_Action (Table.States (1185), 96, 1229);
             Add_Error (Table.States (1185));
-            Set_Minimal_Action (Table.States (1185).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1229)));
+            Table.States (1185).Minimal_Complete_Action := (Shift, 96, 1229);
             Table.States (1186).Productions := WisiToken.To_Vector ((1 => 
(247, 0)));
             Add_Action (Table.States (1186), 96, Reduce, (240, 1), 0, null, 
null);
             Add_Action (Table.States (1186), 104, 119);
@@ -13264,20 +13172,20 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1186), 240, 1230);
             Add_Goto (Table.States (1186), 272, 92);
             Add_Goto (Table.States (1186), 293, 97);
-            Set_Minimal_Action (Table.States (1186).Minimal_Complete_Actions, 
(1 => (Reduce, 240, 0)));
+            Table.States (1186).Minimal_Complete_Action := (Reduce, 240, 0);
             Table.States (1187).Productions := WisiToken.To_Vector ((1 => 
(247, 1)));
             Add_Action (Table.States (1187), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (247, 1), 9,
             package_body_1'Access, package_body_1_check'Access);
-            Set_Minimal_Action (Table.States (1187).Minimal_Complete_Actions, 
(1 => (Reduce, 247, 9)));
+            Table.States (1187).Minimal_Complete_Action := (Reduce, 247, 9);
             Table.States (1188).Productions := WisiToken.To_Vector ((1 => 
(251, 0)));
             Add_Action (Table.States (1188), (1 =>  96), (251, 0), 9, 
package_specification_0'Access,
             package_specification_0_check'Access);
-            Set_Minimal_Action (Table.States (1188).Minimal_Complete_Actions, 
(1 => (Reduce, 251, 9)));
+            Table.States (1188).Minimal_Complete_Action := (Reduce, 251, 9);
             Table.States (1189).Productions := WisiToken.To_Vector ((1 => 
(177, 0)));
             Add_Action (Table.States (1189), 104, 1231);
             Add_Error (Table.States (1189));
-            Set_Minimal_Action (Table.States (1189).Minimal_Complete_Actions, 
(1 => (Shift, 104, 1231)));
+            Table.States (1189).Minimal_Complete_Action := (Shift, 104, 1231);
             Table.States (1190).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1190), 3, 121);
             Add_Action (Table.States (1190), 35, Reduce, (192, 1), 0, null, 
null);
@@ -13313,12 +13221,12 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1190), 320, 144);
             Add_Goto (Table.States (1190), 321, 145);
             Add_Goto (Table.States (1190), 330, 146);
-            Set_Minimal_Action (Table.States (1190).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1190).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1191).Productions := WisiToken.To_Vector ((1 => 
(264, 0)));
             Add_Action (Table.States (1191), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (264, 0), 9,
             protected_body_0'Access, protected_body_0_check'Access);
-            Set_Minimal_Action (Table.States (1191).Minimal_Complete_Actions, 
(1 => (Reduce, 264, 9)));
+            Table.States (1191).Minimal_Complete_Action := (Reduce, 264, 9);
             Table.States (1192).Productions := WisiToken.To_Vector ((1 => 
(271, 0)));
             Add_Action (Table.States (1192), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (1192), 25, Reduce, (246, 2), 0, null, 
null);
@@ -13392,22 +13300,22 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1192), 319, 113);
             Add_Goto (Table.States (1192), 325, 115);
             Add_Goto (Table.States (1192), 331, 116);
-            Set_Minimal_Action (Table.States (1192).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (1192).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (1193).Productions := WisiToken.To_Vector ((1 => 
(304, 0)));
             Add_Action (Table.States (1193), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (304, 0), 9,
             single_protected_declaration_0'Access, 
single_protected_declaration_0_check'Access);
-            Set_Minimal_Action (Table.States (1193).Minimal_Complete_Actions, 
(1 => (Reduce, 304, 9)));
+            Table.States (1193).Minimal_Complete_Action := (Reduce, 304, 9);
             Table.States (1194).Productions := WisiToken.To_Vector ((1 => 
(266, 0)));
             Add_Action (Table.States (1194), (1 =>  96), (266, 0), 5, 
protected_definition_0'Access,
             protected_definition_0_check'Access);
-            Set_Minimal_Action (Table.States (1194).Minimal_Complete_Actions, 
(1 => (Reduce, 266, 5)));
+            Table.States (1194).Minimal_Complete_Action := (Reduce, 266, 5);
             Table.States (1195).Productions := WisiToken.To_Vector ((1 => 
(316, 0)));
             Add_Action (Table.States (1195), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (1195), 104, 149);
             Add_Error (Table.States (1195));
             Add_Goto (Table.States (1195), 220, 1234);
-            Set_Minimal_Action (Table.States (1195).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (1195).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (1196).Productions := WisiToken.To_Vector ((1 => 
(319, 0)));
             Add_Action (Table.States (1196), 24, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (1196), 25, Reduce, (246, 2), 0, null, 
null);
@@ -13481,17 +13389,17 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1196), 319, 113);
             Add_Goto (Table.States (1196), 325, 115);
             Add_Goto (Table.States (1196), 331, 116);
-            Set_Minimal_Action (Table.States (1196).Minimal_Complete_Actions, 
(1 => (Reduce, 318, 0)));
+            Table.States (1196).Minimal_Complete_Action := (Reduce, 318, 0);
             Table.States (1197).Productions := WisiToken.To_Vector ((1 => 
(319, 1)));
             Add_Action (Table.States (1197), 96, 1236);
             Add_Error (Table.States (1197));
-            Set_Minimal_Action (Table.States (1197).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1236)));
+            Table.States (1197).Minimal_Complete_Action := (Shift, 96, 1236);
             Table.States (1198).Productions := WisiToken.To_Vector ((1 => 
(305, 0)));
             Add_Action (Table.States (1198), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (1198), 104, 149);
             Add_Error (Table.States (1198));
             Add_Goto (Table.States (1198), 220, 1237);
-            Set_Minimal_Action (Table.States (1198).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (1198).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (1199).Productions := WisiToken.To_Vector ((1 => 
(120, 1)));
             Add_Action (Table.States (1199), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (1199), 8, 1144);
@@ -13508,7 +13416,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1199), 272, 92);
             Add_Goto (Table.States (1199), 293, 97);
             Add_Goto (Table.States (1199), 314, 1147);
-            Set_Minimal_Action (Table.States (1199).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1199).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1200).Productions := WisiToken.To_Vector ((1 => 
(120, 0)));
             Add_Action (Table.States (1200), 7, Reduce, (241, 1), 0, null, 
null);
             Add_Action (Table.States (1200), 8, 1144);
@@ -13525,10 +13433,10 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1200), 272, 92);
             Add_Goto (Table.States (1200), 293, 97);
             Add_Goto (Table.States (1200), 314, 1147);
-            Set_Minimal_Action (Table.States (1200).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1200).Minimal_Complete_Action := (Shift, 104, 119);
             Table.States (1201).Productions := WisiToken.To_Vector ((1 => 
(226, 0)));
             Add_Action (Table.States (1201), (77, 83), (226, 0), 3, null, 
null);
-            Set_Minimal_Action (Table.States (1201).Minimal_Complete_Actions, 
(1 => (Reduce, 226, 3)));
+            Table.States (1201).Minimal_Complete_Action := (Reduce, 226, 3);
             Table.States (1202).Productions := WisiToken.To_Vector (((128, 0), 
(225, 0), (239, 0), (239, 1), (272, 0),
             (293, 0), (293, 1), (293, 2), (293, 3)));
             Add_Action (Table.States (1202), 53, 1240);
@@ -13539,14 +13447,13 @@ package body Ada_Process_LALR_Main is
             Add_Error (Table.States (1202));
             Add_Goto (Table.States (1202), 115, 241);
             Add_Goto (Table.States (1202), 322, 242);
-            Set_Minimal_Action (Table.States (1202).Minimal_Complete_Actions, 
((Shift, 53, 1240), (Shift, 84, 237),
-            (Shift, 102, 240)));
+            Table.States (1202).Minimal_Complete_Action := (Shift, 53, 1240);
             Table.States (1203).Productions := WisiToken.To_Vector ((1 => 
(225, 0)));
             Add_Action (Table.States (1203), (77, 83), (225, 0), 3, null, 
null);
-            Set_Minimal_Action (Table.States (1203).Minimal_Complete_Actions, 
(1 => (Reduce, 225, 3)));
+            Table.States (1203).Minimal_Complete_Action := (Reduce, 225, 3);
             Table.States (1204).Productions := WisiToken.To_Vector ((1 => 
(326, 4)));
             Add_Action (Table.States (1204), (74, 96), (326, 4), 5, null, 
null);
-            Set_Minimal_Action (Table.States (1204).Minimal_Complete_Actions, 
(1 => (Reduce, 326, 5)));
+            Table.States (1204).Minimal_Complete_Action := (Reduce, 326, 5);
             Table.States (1205).Productions := WisiToken.To_Vector ((1 => 
(279, 0)));
             Add_Action (Table.States (1205), 3, 121);
             Add_Action (Table.States (1205), 39, 122);
@@ -13571,7 +13478,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1205), 320, 144);
             Add_Goto (Table.States (1205), 321, 145);
             Add_Goto (Table.States (1205), 330, 146);
-            Set_Minimal_Action (Table.States (1205).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1205).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (1206).Productions := WisiToken.To_Vector ((1 => 
(329, 0)));
             Add_Action (Table.States (1206), 3, 121);
             Add_Action (Table.States (1206), 39, 122);
@@ -13611,25 +13518,22 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1206), 320, 144);
             Add_Goto (Table.States (1206), 321, 145);
             Add_Goto (Table.States (1206), 330, 146);
-            Set_Minimal_Action (Table.States (1206).Minimal_Complete_Actions, 
(1 => (Reduce, 166, 0)));
+            Table.States (1206).Minimal_Complete_Action := (Reduce, 166, 0);
             Table.States (1207).Productions := WisiToken.To_Vector (((327, 0), 
(328, 0)));
             Add_Action (Table.States (1207), 24, 1243);
             Add_Action (Table.States (1207), 72, 1206);
             Add_Error (Table.States (1207));
             Add_Goto (Table.States (1207), 329, 1244);
-            Set_Minimal_Action (Table.States (1207).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1243)));
+            Table.States (1207).Minimal_Complete_Action := (Shift, 24, 1243);
             Table.States (1208).Productions := WisiToken.To_Vector ((1 => 
(328, 1)));
             Add_Action (Table.States (1208), (24, 72), (328, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (1208).Minimal_Complete_Actions, 
(1 => (Reduce, 328, 1)));
+            Table.States (1208).Minimal_Complete_Action := (Reduce, 328, 1);
             Table.States (1209).Productions := WisiToken.To_Vector ((1 => 
(147, 2)));
             Add_Action (Table.States (1209), (74, 82, 96), (147, 2), 2, null, 
null);
-            Set_Minimal_Action (Table.States (1209).Minimal_Complete_Actions, 
(1 => (Reduce, 147, 2)));
-         end Subr_19;
-         procedure Subr_20
-         is begin
+            Table.States (1209).Minimal_Complete_Action := (Reduce, 147, 2);
             Table.States (1210).Productions := WisiToken.To_Vector ((1 => 
(147, 0)));
             Add_Action (Table.States (1210), (74, 82, 96), (147, 0), 2, null, 
null);
-            Set_Minimal_Action (Table.States (1210).Minimal_Complete_Actions, 
(1 => (Reduce, 147, 2)));
+            Table.States (1210).Minimal_Complete_Action := (Reduce, 147, 2);
             Table.States (1211).Productions := WisiToken.To_Vector ((1 => 
(146, 0)));
             Add_Action (Table.States (1211), 3, 121);
             Add_Action (Table.States (1211), 39, 122);
@@ -13666,27 +13570,27 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1211), 320, 144);
             Add_Goto (Table.States (1211), 321, 145);
             Add_Goto (Table.States (1211), 330, 146);
-            Set_Minimal_Action (Table.States (1211).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1211).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1212).Productions := WisiToken.To_Vector ((1 => 
(146, 1)));
             Add_Action (Table.States (1212), 96, 1246);
             Add_Error (Table.States (1212));
-            Set_Minimal_Action (Table.States (1212).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1246)));
+            Table.States (1212).Minimal_Complete_Action := (Shift, 96, 1246);
             Table.States (1213).Productions := WisiToken.To_Vector (((119, 0), 
(227, 0)));
             Add_Action (Table.States (1213), 10, 1006);
             Add_Action (Table.States (1213), 74, Reduce, (119, 0), 2, null, 
null);
             Add_Action (Table.States (1213), 96, Reduce, (119, 0), 2, null, 
null);
             Add_Error (Table.States (1213));
-            Set_Minimal_Action (Table.States (1213).Minimal_Complete_Actions, 
(1 => (Reduce, 119, 2)));
+            Table.States (1213).Minimal_Complete_Action := (Reduce, 119, 2);
             Table.States (1214).Productions := WisiToken.To_Vector ((1 => 
(259, 0)));
             Add_Action (Table.States (1214), 49, 1247);
             Add_Error (Table.States (1214));
-            Set_Minimal_Action (Table.States (1214).Minimal_Complete_Actions, 
(1 => (Shift, 49, 1247)));
+            Table.States (1214).Minimal_Complete_Action := (Shift, 49, 1247);
             Table.States (1215).Productions := WisiToken.To_Vector ((1 => 
(162, 0)));
             Add_Action (Table.States (1215), 41, 705);
             Add_Action (Table.States (1215), 54, 708);
             Add_Error (Table.States (1215));
             Add_Goto (Table.States (1215), 280, 1248);
-            Set_Minimal_Action (Table.States (1215).Minimal_Complete_Actions, 
(1 => (Shift, 41, 705)));
+            Table.States (1215).Minimal_Complete_Action := (Shift, 41, 705);
             Table.States (1216).Productions := WisiToken.To_Vector ((1 => 
(187, 0)));
             Add_Action (Table.States (1216), 4, 1);
             Add_Action (Table.States (1216), 5, 2);
@@ -13744,38 +13648,41 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1216), 303, 101);
             Add_Goto (Table.States (1216), 306, 363);
             Add_Goto (Table.States (1216), 323, 114);
-            Set_Minimal_Action (Table.States (1216).Minimal_Complete_Actions, 
(1 => (Reduce, 300, 0)));
+            Table.States (1216).Minimal_Complete_Action := (Reduce, 300, 0);
+         end Subr_19;
+         procedure Subr_20
+         is begin
             Table.States (1217).Productions := WisiToken.To_Vector ((1 => 
(244, 1)));
             Add_Action (Table.States (1217), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (244, 1), 9,
             object_declaration_1'Access, null);
-            Set_Minimal_Action (Table.States (1217).Minimal_Complete_Actions, 
(1 => (Reduce, 244, 9)));
+            Table.States (1217).Minimal_Complete_Action := (Reduce, 244, 9);
             Table.States (1218).Productions := WisiToken.To_Vector ((1 => 
(244, 2)));
             Add_Action (Table.States (1218), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (244, 2), 9,
             object_declaration_2'Access, null);
-            Set_Minimal_Action (Table.States (1218).Minimal_Complete_Actions, 
(1 => (Reduce, 244, 9)));
+            Table.States (1218).Minimal_Complete_Action := (Reduce, 244, 9);
             Table.States (1219).Productions := WisiToken.To_Vector ((1 => 
(244, 0)));
             Add_Action (Table.States (1219), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (244, 0), 9,
             object_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1219).Minimal_Complete_Actions, 
(1 => (Reduce, 244, 9)));
+            Table.States (1219).Minimal_Complete_Action := (Reduce, 244, 9);
             Table.States (1220).Productions := WisiToken.To_Vector ((1 => 
(179, 0)));
             Add_Action (Table.States (1220), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (179, 0), 9,
             entry_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1220).Minimal_Complete_Actions, 
(1 => (Reduce, 179, 9)));
+            Table.States (1220).Minimal_Complete_Action := (Reduce, 179, 9);
             Table.States (1221).Productions := WisiToken.To_Vector ((1 => 
(307, 0)));
             Add_Action (Table.States (1221), 96, 1250);
             Add_Error (Table.States (1221));
-            Set_Minimal_Action (Table.States (1221).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1250)));
+            Table.States (1221).Minimal_Complete_Action := (Shift, 96, 1250);
             Table.States (1222).Productions := WisiToken.To_Vector ((1 => 
(172, 0)));
             Add_Action (Table.States (1222), (22, 23, 77), (172, 0), 4, 
elsif_expression_item_0'Access, null);
-            Set_Minimal_Action (Table.States (1222).Minimal_Complete_Actions, 
(1 => (Reduce, 172, 4)));
+            Table.States (1222).Minimal_Complete_Action := (Reduce, 172, 4);
             Table.States (1223).Productions := WisiToken.To_Vector ((1 => 
(144, 0)));
             Add_Action (Table.States (1223), 85, 1251);
             Add_Error (Table.States (1223));
-            Set_Minimal_Action (Table.States (1223).Minimal_Complete_Actions, 
(1 => (Shift, 85, 1251)));
+            Table.States (1223).Minimal_Complete_Action := (Shift, 85, 1251);
             Table.States (1224).Productions := WisiToken.To_Vector ((1 => 
(254, 0)));
             Add_Action (Table.States (1224), 3, 121);
             Add_Action (Table.States (1224), 39, 122);
@@ -13812,111 +13719,111 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1224), 320, 144);
             Add_Goto (Table.States (1224), 321, 145);
             Add_Goto (Table.States (1224), 330, 146);
-            Set_Minimal_Action (Table.States (1224).Minimal_Complete_Actions, 
(1 => (Reduce, 192, 0)));
+            Table.States (1224).Minimal_Complete_Action := (Reduce, 192, 0);
             Table.States (1225).Productions := WisiToken.To_Vector ((1 => 
(203, 0)));
             Add_Action (Table.States (1225), 49, 1253);
             Add_Error (Table.States (1225));
-            Set_Minimal_Action (Table.States (1225).Minimal_Complete_Actions, 
(1 => (Shift, 49, 1253)));
+            Table.States (1225).Minimal_Complete_Action := (Shift, 49, 1253);
             Table.States (1226).Productions := WisiToken.To_Vector ((1 => 
(205, 0)));
             Add_Action (Table.States (1226), (74, 96), (205, 0), 3, null, 
null);
-            Set_Minimal_Action (Table.States (1226).Minimal_Complete_Actions, 
(1 => (Reduce, 205, 3)));
+            Table.States (1226).Minimal_Complete_Action := (Reduce, 205, 3);
             Table.States (1227).Productions := WisiToken.To_Vector ((1 => 
(204, 0)));
             Add_Action (Table.States (1227), (29, 47, 48, 50, 69, 71, 74, 
104), (204, 0), 9,
             formal_package_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1227).Minimal_Complete_Actions, 
(1 => (Reduce, 204, 9)));
+            Table.States (1227).Minimal_Complete_Action := (Reduce, 204, 9);
             Table.States (1228).Productions := WisiToken.To_Vector ((1 => 
(198, 0)));
             Add_Action (Table.States (1228), (29, 47, 48, 50, 69, 71, 74, 
104), (198, 0), 9,
             formal_object_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1228).Minimal_Complete_Actions, 
(1 => (Reduce, 198, 9)));
+            Table.States (1228).Minimal_Complete_Action := (Reduce, 198, 9);
             Table.States (1229).Productions := WisiToken.To_Vector ((1 => 
(222, 0)));
             Add_Action (Table.States (1229), (4, 5, 13, 15, 17, 18, 22, 23, 
24, 25, 26, 27, 28, 29, 30, 31, 32, 36, 37,
             40, 41, 43, 46, 47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 
68, 69, 71, 72, 73, 74, 93, 104, 105, 106,
             107), (222, 0), 10, if_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (1229).Minimal_Complete_Actions, 
(1 => (Reduce, 222, 10)));
+            Table.States (1229).Minimal_Complete_Action := (Reduce, 222, 10);
             Table.States (1230).Productions := WisiToken.To_Vector ((1 => 
(247, 0)));
             Add_Action (Table.States (1230), 96, 1254);
             Add_Error (Table.States (1230));
-            Set_Minimal_Action (Table.States (1230).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1254)));
+            Table.States (1230).Minimal_Complete_Action := (Shift, 96, 1254);
             Table.States (1231).Productions := WisiToken.To_Vector ((1 => 
(177, 0)));
             Add_Action (Table.States (1231), 33, 1255);
             Add_Error (Table.States (1231));
-            Set_Minimal_Action (Table.States (1231).Minimal_Complete_Actions, 
(1 => (Shift, 33, 1255)));
+            Table.States (1231).Minimal_Complete_Action := (Shift, 33, 1255);
             Table.States (1232).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1232), 35, 1256);
             Add_Error (Table.States (1232));
-            Set_Minimal_Action (Table.States (1232).Minimal_Complete_Actions, 
(1 => (Shift, 35, 1256)));
+            Table.States (1232).Minimal_Complete_Action := (Shift, 35, 1256);
             Table.States (1233).Productions := WisiToken.To_Vector ((1 => 
(271, 0)));
             Add_Action (Table.States (1233), 96, 1257);
             Add_Error (Table.States (1233));
-            Set_Minimal_Action (Table.States (1233).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1257)));
+            Table.States (1233).Minimal_Complete_Action := (Shift, 96, 1257);
             Table.States (1234).Productions := WisiToken.To_Vector ((1 => 
(316, 0)));
             Add_Action (Table.States (1234), 96, 1258);
             Add_Error (Table.States (1234));
-            Set_Minimal_Action (Table.States (1234).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1258)));
+            Table.States (1234).Minimal_Complete_Action := (Shift, 96, 1258);
             Table.States (1235).Productions := WisiToken.To_Vector ((1 => 
(319, 0)));
             Add_Action (Table.States (1235), 24, 1259);
             Add_Error (Table.States (1235));
-            Set_Minimal_Action (Table.States (1235).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1259)));
+            Table.States (1235).Minimal_Complete_Action := (Shift, 24, 1259);
             Table.States (1236).Productions := WisiToken.To_Vector ((1 => 
(319, 1)));
             Add_Action (Table.States (1236), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (319, 1), 10,
             task_type_declaration_1'Access, 
task_type_declaration_1_check'Access);
-            Set_Minimal_Action (Table.States (1236).Minimal_Complete_Actions, 
(1 => (Reduce, 319, 10)));
+            Table.States (1236).Minimal_Complete_Action := (Reduce, 319, 10);
             Table.States (1237).Productions := WisiToken.To_Vector ((1 => 
(305, 0)));
             Add_Action (Table.States (1237), 96, 1260);
             Add_Error (Table.States (1237));
-            Set_Minimal_Action (Table.States (1237).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1260)));
+            Table.States (1237).Minimal_Complete_Action := (Shift, 96, 1260);
             Table.States (1238).Productions := WisiToken.To_Vector ((1 => 
(120, 1)));
             Add_Action (Table.States (1238), (74, 82, 96), (120, 1), 6, 
array_type_definition_1'Access, null);
-            Set_Minimal_Action (Table.States (1238).Minimal_Complete_Actions, 
(1 => (Reduce, 120, 6)));
+            Table.States (1238).Minimal_Complete_Action := (Reduce, 120, 6);
             Table.States (1239).Productions := WisiToken.To_Vector ((1 => 
(120, 0)));
             Add_Action (Table.States (1239), (74, 82, 96), (120, 0), 6, 
array_type_definition_0'Access, null);
-            Set_Minimal_Action (Table.States (1239).Minimal_Complete_Actions, 
(1 => (Reduce, 120, 6)));
+            Table.States (1239).Minimal_Complete_Action := (Reduce, 120, 6);
             Table.States (1240).Productions := WisiToken.To_Vector ((1 => 
(225, 0)));
             Add_Action (Table.States (1240), 80, 1203);
             Add_Error (Table.States (1240));
-            Set_Minimal_Action (Table.States (1240).Minimal_Complete_Actions, 
(1 => (Shift, 80, 1203)));
+            Table.States (1240).Minimal_Complete_Action := (Shift, 80, 1203);
             Table.States (1241).Productions := WisiToken.To_Vector ((1 => 
(279, 0)));
             Add_Action (Table.States (1241), (74, 96), (279, 0), 4, null, 
null);
-            Set_Minimal_Action (Table.States (1241).Minimal_Complete_Actions, 
(1 => (Reduce, 279, 4)));
+            Table.States (1241).Minimal_Complete_Action := (Reduce, 279, 4);
             Table.States (1242).Productions := WisiToken.To_Vector (((166, 0), 
(329, 0)));
             Add_Action (Table.States (1242), 79, 445);
             Add_Action (Table.States (1242), 87, 1261);
             Add_Error (Table.States (1242));
-            Set_Minimal_Action (Table.States (1242).Minimal_Complete_Actions, 
(1 => (Shift, 87, 1261)));
+            Table.States (1242).Minimal_Complete_Action := (Shift, 87, 1261);
             Table.States (1243).Productions := WisiToken.To_Vector ((1 => 
(327, 0)));
             Add_Action (Table.States (1243), 15, 1262);
             Add_Error (Table.States (1243));
-            Set_Minimal_Action (Table.States (1243).Minimal_Complete_Actions, 
(1 => (Shift, 15, 1262)));
+            Table.States (1243).Minimal_Complete_Action := (Shift, 15, 1262);
             Table.States (1244).Productions := WisiToken.To_Vector ((1 => 
(328, 0)));
             Add_Action (Table.States (1244), (24, 72), (328, 0), 2, null, 
null);
-            Set_Minimal_Action (Table.States (1244).Minimal_Complete_Actions, 
(1 => (Reduce, 328, 2)));
+            Table.States (1244).Minimal_Complete_Action := (Reduce, 328, 2);
             Table.States (1245).Productions := WisiToken.To_Vector ((1 => 
(146, 0)));
             Add_Action (Table.States (1245), 74, 337);
             Add_Action (Table.States (1245), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (1245));
             Add_Goto (Table.States (1245), 122, 1263);
-            Set_Minimal_Action (Table.States (1245).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1245).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1246).Productions := WisiToken.To_Vector ((1 => 
(146, 1)));
             Add_Action (Table.States (1246), (15, 24, 28, 72, 104), (146, 1), 
5, component_declaration_1'Access, null);
-            Set_Minimal_Action (Table.States (1246).Minimal_Complete_Actions, 
(1 => (Reduce, 146, 5)));
+            Table.States (1246).Minimal_Complete_Action := (Reduce, 146, 5);
             Table.States (1247).Productions := WisiToken.To_Vector ((1 => 
(259, 0)));
             Add_Action (Table.States (1247), 74, 337);
             Add_Action (Table.States (1247), 96, Reduce, (122, 1), 0, null, 
null);
             Add_Error (Table.States (1247));
             Add_Goto (Table.States (1247), 122, 1264);
-            Set_Minimal_Action (Table.States (1247).Minimal_Complete_Actions, 
(1 => (Reduce, 122, 0)));
+            Table.States (1247).Minimal_Complete_Action := (Reduce, 122, 0);
             Table.States (1248).Productions := WisiToken.To_Vector ((1 => 
(162, 0)));
             Add_Action (Table.States (1248), (74, 96), (162, 0), 6, 
derived_type_definition_0'Access, null);
-            Set_Minimal_Action (Table.States (1248).Minimal_Complete_Actions, 
(1 => (Reduce, 162, 6)));
+            Table.States (1248).Minimal_Complete_Action := (Reduce, 162, 6);
             Table.States (1249).Productions := WisiToken.To_Vector ((1 => 
(187, 0)));
             Add_Action (Table.States (1249), (24, 72), (187, 0), 6, 
exception_handler_0'Access, null);
-            Set_Minimal_Action (Table.States (1249).Minimal_Complete_Actions, 
(1 => (Reduce, 187, 6)));
+            Table.States (1249).Minimal_Complete_Action := (Reduce, 187, 6);
             Table.States (1250).Productions := WisiToken.To_Vector ((1 => 
(307, 0)));
             Add_Action (Table.States (1250), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (307, 0), 10,
             subprogram_body_0'Access, subprogram_body_0_check'Access);
-            Set_Minimal_Action (Table.States (1250).Minimal_Complete_Actions, 
(1 => (Reduce, 307, 10)));
+            Table.States (1250).Minimal_Complete_Action := (Reduce, 307, 10);
             Table.States (1251).Productions := WisiToken.To_Vector ((1 => 
(144, 0)));
             Add_Action (Table.States (1251), 3, 121);
             Add_Action (Table.States (1251), 39, 122);
@@ -13941,18 +13848,18 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1251), 320, 144);
             Add_Goto (Table.States (1251), 321, 145);
             Add_Goto (Table.States (1251), 330, 146);
-            Set_Minimal_Action (Table.States (1251).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1251).Minimal_Complete_Action := (Shift, 103, 129);
             Table.States (1252).Productions := WisiToken.To_Vector ((1 => 
(254, 0)));
             Add_Action (Table.States (1252), (77, 96), (254, 0), 8, 
parameter_specification_0'Access, null);
-            Set_Minimal_Action (Table.States (1252).Minimal_Complete_Actions, 
(1 => (Reduce, 254, 8)));
+            Table.States (1252).Minimal_Complete_Action := (Reduce, 254, 8);
             Table.States (1253).Productions := WisiToken.To_Vector ((1 => 
(203, 0)));
             Add_Action (Table.States (1253), (74, 96), (203, 0), 6, 
formal_derived_type_definition_0'Access, null);
-            Set_Minimal_Action (Table.States (1253).Minimal_Complete_Actions, 
(1 => (Reduce, 203, 6)));
+            Table.States (1253).Minimal_Complete_Action := (Reduce, 203, 6);
             Table.States (1254).Productions := WisiToken.To_Vector ((1 => 
(247, 0)));
             Add_Action (Table.States (1254), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (247, 0), 11,
             package_body_0'Access, package_body_0_check'Access);
-            Set_Minimal_Action (Table.States (1254).Minimal_Complete_Actions, 
(1 => (Reduce, 247, 11)));
+            Table.States (1254).Minimal_Complete_Action := (Reduce, 247, 11);
             Table.States (1255).Productions := WisiToken.To_Vector ((1 => 
(177, 0)));
             Add_Action (Table.States (1255), 3, 121);
             Add_Action (Table.States (1255), 39, 122);
@@ -13980,7 +13887,7 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1255), 320, 144);
             Add_Goto (Table.States (1255), 321, 145);
             Add_Goto (Table.States (1255), 330, 146);
-            Set_Minimal_Action (Table.States (1255).Minimal_Complete_Actions, 
(1 => (Shift, 105, 33)));
+            Table.States (1255).Minimal_Complete_Action := (Shift, 40, 474);
             Table.States (1256).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1256), 13, Reduce, (159, 1), 0, null, 
null);
             Add_Action (Table.States (1256), 25, Reduce, (246, 2), 0, null, 
null);
@@ -14052,28 +13959,28 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1256), 319, 113);
             Add_Goto (Table.States (1256), 325, 115);
             Add_Goto (Table.States (1256), 331, 116);
-            Set_Minimal_Action (Table.States (1256).Minimal_Complete_Actions, 
(1 => (Reduce, 159, 0)));
+            Table.States (1256).Minimal_Complete_Action := (Reduce, 159, 0);
             Table.States (1257).Productions := WisiToken.To_Vector ((1 => 
(271, 0)));
             Add_Action (Table.States (1257), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (271, 0), 11,
             protected_type_declaration_0'Access, 
protected_type_declaration_0_check'Access);
-            Set_Minimal_Action (Table.States (1257).Minimal_Complete_Actions, 
(1 => (Reduce, 271, 11)));
+            Table.States (1257).Minimal_Complete_Action := (Reduce, 271, 11);
             Table.States (1258).Productions := WisiToken.To_Vector ((1 => 
(316, 0)));
             Add_Action (Table.States (1258), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (316, 0), 11,
             task_body_0'Access, task_body_0_check'Access);
-            Set_Minimal_Action (Table.States (1258).Minimal_Complete_Actions, 
(1 => (Reduce, 316, 11)));
+            Table.States (1258).Minimal_Complete_Action := (Reduce, 316, 11);
             Table.States (1259).Productions := WisiToken.To_Vector ((1 => 
(319, 0)));
             Add_Action (Table.States (1259), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (1259), 104, 149);
             Add_Error (Table.States (1259));
             Add_Goto (Table.States (1259), 220, 1268);
-            Set_Minimal_Action (Table.States (1259).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (1259).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (1260).Productions := WisiToken.To_Vector ((1 => 
(305, 0)));
             Add_Action (Table.States (1260), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (305, 0), 11,
             single_task_declaration_0'Access, 
single_task_declaration_0_check'Access);
-            Set_Minimal_Action (Table.States (1260).Minimal_Complete_Actions, 
(1 => (Reduce, 305, 11)));
+            Table.States (1260).Minimal_Complete_Action := (Reduce, 305, 11);
             Table.States (1261).Productions := WisiToken.To_Vector ((1 => 
(329, 0)));
             Add_Action (Table.States (1261), 15, 885);
             Add_Action (Table.States (1261), 24, Reduce, (150, 1), 0, null, 
null);
@@ -14092,59 +13999,59 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1261), 219, 892);
             Add_Goto (Table.States (1261), 281, 94);
             Add_Goto (Table.States (1261), 327, 893);
-            Set_Minimal_Action (Table.States (1261).Minimal_Complete_Actions, 
(1 => (Reduce, 150, 0)));
+            Table.States (1261).Minimal_Complete_Action := (Reduce, 150, 0);
             Table.States (1262).Productions := WisiToken.To_Vector ((1 => 
(327, 0)));
             Add_Action (Table.States (1262), 96, 1270);
             Add_Error (Table.States (1262));
-            Set_Minimal_Action (Table.States (1262).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1270)));
+            Table.States (1262).Minimal_Complete_Action := (Shift, 96, 1270);
             Table.States (1263).Productions := WisiToken.To_Vector ((1 => 
(146, 0)));
             Add_Action (Table.States (1263), 96, 1271);
             Add_Error (Table.States (1263));
-            Set_Minimal_Action (Table.States (1263).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1271)));
+            Table.States (1263).Minimal_Complete_Action := (Shift, 96, 1271);
             Table.States (1264).Productions := WisiToken.To_Vector ((1 => 
(259, 0)));
             Add_Action (Table.States (1264), 96, 1272);
             Add_Error (Table.States (1264));
-            Set_Minimal_Action (Table.States (1264).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1272)));
+            Table.States (1264).Minimal_Complete_Action := (Shift, 96, 1272);
             Table.States (1265).Productions := WisiToken.To_Vector ((1 => 
(144, 0)));
             Add_Action (Table.States (1265), 96, 1273);
             Add_Error (Table.States (1265));
-            Set_Minimal_Action (Table.States (1265).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1273)));
+            Table.States (1265).Minimal_Complete_Action := (Shift, 96, 1273);
             Table.States (1266).Productions := WisiToken.To_Vector ((1 => 
(177, 0)));
             Add_Action (Table.States (1266), 77, 1274);
             Add_Error (Table.States (1266));
-            Set_Minimal_Action (Table.States (1266).Minimal_Complete_Actions, 
(1 => (Shift, 77, 1274)));
+            Table.States (1266).Minimal_Complete_Action := (Shift, 77, 1274);
             Table.States (1267).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1267), 13, 1275);
             Add_Error (Table.States (1267));
-            Set_Minimal_Action (Table.States (1267).Minimal_Complete_Actions, 
(1 => (Shift, 13, 1275)));
+            Table.States (1267).Minimal_Complete_Action := (Shift, 13, 1275);
             Table.States (1268).Productions := WisiToken.To_Vector ((1 => 
(319, 0)));
             Add_Action (Table.States (1268), 96, 1276);
             Add_Error (Table.States (1268));
-            Set_Minimal_Action (Table.States (1268).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1276)));
+            Table.States (1268).Minimal_Complete_Action := (Shift, 96, 1276);
             Table.States (1269).Productions := WisiToken.To_Vector ((1 => 
(329, 0)));
             Add_Action (Table.States (1269), (24, 72), (329, 0), 4, 
variant_0'Access, null);
-            Set_Minimal_Action (Table.States (1269).Minimal_Complete_Actions, 
(1 => (Reduce, 329, 4)));
+            Table.States (1269).Minimal_Complete_Action := (Reduce, 329, 4);
             Table.States (1270).Productions := WisiToken.To_Vector ((1 => 
(327, 0)));
             Add_Action (Table.States (1270), (15, 24, 28, 72, 104), (327, 0), 
7, variant_part_0'Access, null);
-            Set_Minimal_Action (Table.States (1270).Minimal_Complete_Actions, 
(1 => (Reduce, 327, 7)));
+            Table.States (1270).Minimal_Complete_Action := (Reduce, 327, 7);
             Table.States (1271).Productions := WisiToken.To_Vector ((1 => 
(146, 0)));
             Add_Action (Table.States (1271), (15, 24, 28, 72, 104), (146, 0), 
7, component_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1271).Minimal_Complete_Actions, 
(1 => (Reduce, 146, 7)));
+            Table.States (1271).Minimal_Complete_Action := (Reduce, 146, 7);
             Table.States (1272).Productions := WisiToken.To_Vector ((1 => 
(259, 0)));
             Add_Action (Table.States (1272), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (259, 0), 12,
             private_extension_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (1272).Minimal_Complete_Actions, 
(1 => (Reduce, 259, 12)));
+            Table.States (1272).Minimal_Complete_Action := (Reduce, 259, 12);
             Table.States (1273).Productions := WisiToken.To_Vector ((1 => 
(144, 0)));
             Add_Action (Table.States (1273), (24, 104), (144, 0), 8, 
component_clause_0'Access, null);
-            Set_Minimal_Action (Table.States (1273).Minimal_Complete_Actions, 
(1 => (Reduce, 144, 8)));
+            Table.States (1273).Minimal_Complete_Action := (Reduce, 144, 8);
             Table.States (1274).Productions := WisiToken.To_Vector ((1 => 
(177, 0)));
             Add_Action (Table.States (1274), 72, Reduce, (253, 1), 0, null, 
null);
             Add_Action (Table.States (1274), 76, 431);
             Add_Error (Table.States (1274));
             Add_Goto (Table.States (1274), 199, 344);
             Add_Goto (Table.States (1274), 253, 1277);
-            Set_Minimal_Action (Table.States (1274).Minimal_Complete_Actions, 
(1 => (Reduce, 253, 0)));
+            Table.States (1274).Minimal_Complete_Action := (Reduce, 253, 0);
             Table.States (1275).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1275), 4, 1);
             Add_Action (Table.States (1275), 5, 2);
@@ -14203,33 +14110,33 @@ package body Ada_Process_LALR_Main is
             Add_Goto (Table.States (1275), 303, 101);
             Add_Goto (Table.States (1275), 306, 363);
             Add_Goto (Table.States (1275), 323, 114);
-            Set_Minimal_Action (Table.States (1275).Minimal_Complete_Actions, 
(1 => (Reduce, 218, 0)));
+            Table.States (1275).Minimal_Complete_Action := (Reduce, 218, 0);
             Table.States (1276).Productions := WisiToken.To_Vector ((1 => 
(319, 0)));
             Add_Action (Table.States (1276), (4, 5, 13, 15, 17, 18, 24, 25, 
27, 28, 29, 30, 31, 32, 36, 37, 40, 41, 46,
             47, 48, 49, 50, 51, 52, 57, 58, 60, 61, 63, 66, 69, 71, 73, 74, 
93, 104, 105, 106, 107), (319, 0), 13,
             task_type_declaration_0'Access, 
task_type_declaration_0_check'Access);
-            Set_Minimal_Action (Table.States (1276).Minimal_Complete_Actions, 
(1 => (Reduce, 319, 13)));
+            Table.States (1276).Minimal_Complete_Action := (Reduce, 319, 13);
             Table.States (1277).Productions := WisiToken.To_Vector ((1 => 
(177, 0)));
             Add_Action (Table.States (1277), (1 =>  72), (177, 0), 7, 
entry_body_formal_part_0'Access, null);
-            Set_Minimal_Action (Table.States (1277).Minimal_Complete_Actions, 
(1 => (Reduce, 177, 7)));
+            Table.States (1277).Minimal_Complete_Action := (Reduce, 177, 7);
             Table.States (1278).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1278), 24, 1279);
             Add_Error (Table.States (1278));
-            Set_Minimal_Action (Table.States (1278).Minimal_Complete_Actions, 
(1 => (Shift, 24, 1279)));
+            Table.States (1278).Minimal_Complete_Action := (Shift, 24, 1279);
             Table.States (1279).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1279), 96, Reduce, (220, 1), 0, null, 
null);
             Add_Action (Table.States (1279), 104, 149);
             Add_Error (Table.States (1279));
             Add_Goto (Table.States (1279), 220, 1280);
-            Set_Minimal_Action (Table.States (1279).Minimal_Complete_Actions, 
(1 => (Reduce, 220, 0)));
+            Table.States (1279).Minimal_Complete_Action := (Reduce, 220, 0);
             Table.States (1280).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1280), 96, 1281);
             Add_Error (Table.States (1280));
-            Set_Minimal_Action (Table.States (1280).Minimal_Complete_Actions, 
(1 => (Shift, 96, 1281)));
+            Table.States (1280).Minimal_Complete_Action := (Shift, 96, 1281);
             Table.States (1281).Productions := WisiToken.To_Vector ((1 => 
(176, 0)));
             Add_Action (Table.States (1281), (24, 25, 28, 29, 40, 46, 50), 
(176, 0), 12, entry_body_0'Access,
             entry_body_0_check'Access);
-            Set_Minimal_Action (Table.States (1281).Minimal_Complete_Actions, 
(1 => (Reduce, 176, 12)));
+            Table.States (1281).Minimal_Complete_Action := (Reduce, 176, 12);
          end Subr_20;
       begin
          Subr_1;
@@ -14257,7 +14164,7 @@ package body Ada_Process_LALR_Main is
       WisiToken.Parse.LR.Parser.New_Parser
         (Parser,
          Trace,
-         Lexer.New_Lexer (Trace),
+         Lexer.New_Lexer (Trace.Descriptor),
          Table,
          Language_Fixes,
          Language_Use_Minimal_Complete_Actions,
diff --git a/packages/ada-mode/ada_process_lalr_main.ads 
b/packages/ada-mode/ada_process_lalr_main.ads
index 03146a2..5697568 100644
--- a/packages/ada-mode/ada_process_lalr_main.ads
+++ b/packages/ada-mode/ada_process_lalr_main.ads
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LALR Ada_Emacs re2c 
PROCESS ada.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
diff --git a/packages/ada-mode/ada_process_lr1_main.adb 
b/packages/ada-mode/ada_process_lr1_main.adb
index c4969c6..7b574aa 100644
--- a/packages/ada-mode/ada_process_lr1_main.adb
+++ b/packages/ada-mode/ada_process_lr1_main.adb
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS text_rep ada.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
@@ -50,9 +50,9 @@ package body Ada_Process_LR1_Main is
             3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3, 
2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 3, 3,
             3, 2, 1, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 
3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3),
          Delete =>
-           (3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 2, 3, 1, 3, 3, 3, 3, 1, 3, 1, 
3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 3,
+           (3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 2, 3, 1, 3, 3, 3, 3, 1, 3, 2, 
3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 2, 3, 2, 3,
             3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-            3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 
3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3),
+            3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 
3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3),
          Push_Back =>
            (2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
             2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -199,12 +199,12 @@ package body Ada_Process_LR1_Main is
             Set_Production (Prods (142), 142, 4);
             Set_RHS (Prods (142), 0, (1 => 332), null, null);
             Set_RHS (Prods (142), 1, (1 => 315), null, null);
-            Set_RHS (Prods (142), 2, (49, 157), null, null);
+            Set_RHS (Prods (142), 2, (49, 157), compilation_unit_2'Access, 
null);
             Set_RHS (Prods (142), 3, (1 => 157), null, null);
             Set_RHS (Prods (142), 4, (1 => 306), null, null);
             Set_Production (Prods (143), 143, 1);
-            Set_RHS (Prods (143), 0, (143, 142), null, null);
-            Set_RHS (Prods (143), 1, (1 => 142), null, null);
+            Set_RHS (Prods (143), 0, (143, 142), 
compilation_unit_list_0'Access, null);
+            Set_RHS (Prods (143), 1, (1 => 142), 
compilation_unit_list_1'Access, compilation_unit_list_1_check'Access);
             Set_Production (Prods (144), 144, 0);
             Set_RHS (Prods (144), 0, (104, 12, 301, 53, 301, 85, 301, 96), 
component_clause_0'Access, null);
             Set_Production (Prods (145), 145, 1);
@@ -928,7 +928,7 @@ package body Ada_Process_LR1_Main is
       WisiToken.Parse.LR.Parser.New_Parser
         (Parser,
          Trace,
-         Lexer.New_Lexer (Trace),
+         Lexer.New_Lexer (Trace.Descriptor),
          Table,
          Language_Fixes,
          Language_Use_Minimal_Complete_Actions,
diff --git a/packages/ada-mode/ada_process_lr1_main.ads 
b/packages/ada-mode/ada_process_lr1_main.ads
index db2b905..89b6616 100644
--- a/packages/ada-mode/ada_process_lr1_main.ads
+++ b/packages/ada-mode/ada_process_lr1_main.ads
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS text_rep ada.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
diff --git a/packages/ada-mode/ada_re2c.c b/packages/ada-mode/ada_re2c.c
index 5b010e0..8adaf85 100644
--- a/packages/ada-mode/ada_re2c.c
+++ b/packages/ada-mode/ada_re2c.c
@@ -4,7 +4,7 @@
 //  command line: wisitoken-bnf-generate.exe  --generate LALR Ada_Emacs re2c 
PROCESS ada.wy
 //
 
-//  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+//  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 //  This program is free software; you can redistribute it and/or
 //  modify it under the terms of the GNU General Public License as
@@ -35,7 +35,7 @@ typedef struct wisi_lexer
    int            line_token_start; // line at start of current token
    unsigned char* marker;           // saved cursor
    size_t         marker_pos;       // saved character position
-   size_t         marker_line;      // saved line 
+   size_t         marker_line;      // saved line
    unsigned char* context;          // saved cursor
    size_t         context_pos;      // saved character position
    int            context_line;     // saved line
@@ -50,13 +50,16 @@ typedef struct wisi_lexer
 wisi_lexer* ada_new_lexer
    (unsigned char* input, size_t length, int verbosity)
 {
-   wisi_lexer* result  = malloc (sizeof (wisi_lexer));
-   result->buffer      = input;
-   result->buffer_last = input + length - 1;
-   result->cursor      = input;
-   result->char_pos    = 1;
-   result->line        = (*result->cursor == 0x0A) ? 2 : 1;
-   result->verbosity   = verbosity;
+   wisi_lexer* result        = malloc (sizeof (wisi_lexer));
+   result->buffer            = input;
+   result->buffer_last       = input + length - 1;
+   result->cursor            = input;
+   result->byte_token_start  = input;
+   result->char_pos          = 1;
+   result->char_token_start  = 1;
+   result->line              = (*result->cursor == 0x0A) ? 2 : 1;
+   result->line_token_start  = result->line;
+   result->verbosity         = verbosity;
    return result;
 }
 
@@ -94,10 +97,13 @@ static void debug(wisi_lexer* lexer, int state, unsigned 
char ch)
 
 static void skip(wisi_lexer* lexer)
 {
-   if (lexer->cursor <= lexer->buffer_last) ++lexer->cursor;
    if (lexer->cursor <= lexer->buffer_last)
+   {
+      ++lexer->cursor;
       if (DO_COUNT) ++lexer->char_pos;
-   if (*lexer->cursor == 0x0A) ++lexer->line;
+      if (lexer->cursor <= lexer->buffer_last)
+         if (*lexer->cursor == 0x0A) ++lexer->line;
+   }
 }
 #define YYSKIP() skip(lexer)
 #define YYBACKUP() lexer->marker = lexer->cursor; lexer->marker_pos = 
lexer->char_pos;lexer->marker_line = lexer->line
@@ -128,10 +134,7 @@ int ada_next_token
    }
 
    lexer->byte_token_start = lexer->cursor;
-   if (DO_COUNT)
-      lexer->char_token_start = lexer->char_pos;
-   else
-      lexer->char_token_start = lexer->char_pos + 1;
+   lexer->char_token_start = lexer->char_pos;
    if (*lexer->cursor == 0x0A)
       lexer->line_token_start = lexer->line-1;
    else
@@ -140,7 +143,7 @@ int ada_next_token
    while (*id == -1 && status == 0)
    {
 
-#line 144 "../ada_re2c.c"
+#line 147 "../ada_re2c.c"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -292,16 +295,16 @@ yy2:
        YYSKIP ();
 yy3:
        YYDEBUG(3, YYPEEK ());
-#line 366 "../ada.re2c"
+#line 369 "../ada.re2c"
        {status = ERROR_unrecognized_character; continue;}
-#line 298 "../ada_re2c.c"
+#line 301 "../ada_re2c.c"
 yy4:
        YYDEBUG(4, YYPEEK ());
        YYSKIP ();
        YYDEBUG(5, YYPEEK ());
-#line 364 "../ada.re2c"
+#line 367 "../ada.re2c"
        {*id =  107; continue;}
-#line 305 "../ada_re2c.c"
+#line 308 "../ada_re2c.c"
 yy6:
        YYDEBUG(6, YYPEEK ());
        YYSKIP ();
@@ -314,7 +317,7 @@ yy6:
        }
 yy8:
        YYDEBUG(8, YYPEEK ());
-#line 251 "../ada.re2c"
+#line 254 "../ada.re2c"
        { lexer->byte_token_start = lexer->cursor;
           lexer->char_token_start = lexer->char_pos;
           if (*lexer->cursor == 0x0A)
@@ -322,14 +325,14 @@ yy8:
           else
              lexer->line_token_start = lexer->line;
           continue; }
-#line 326 "../ada_re2c.c"
+#line 329 "../ada_re2c.c"
 yy9:
        YYDEBUG(9, YYPEEK ());
        YYSKIP ();
        YYDEBUG(10, YYPEEK ());
-#line 258 "../ada.re2c"
+#line 261 "../ada.re2c"
        {*id =  1; continue;}
-#line 333 "../ada_re2c.c"
+#line 336 "../ada_re2c.c"
 yy11:
        YYDEBUG(11, YYPEEK ());
        YYSKIP ();
@@ -501,17 +504,17 @@ yy13:
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
-       case 'e':       goto yy90;
-       case 'i':       goto yy91;
+       case 'e':       goto yy92;
+       case 'i':       goto yy93;
        default:        goto yy3;
        }
 yy14:
        YYDEBUG(14, YYPEEK ());
        YYSKIP ();
        YYDEBUG(15, YYPEEK ());
-#line 335 "../ada.re2c"
+#line 338 "../ada.re2c"
        {*id =  78; continue;}
-#line 515 "../ada_re2c.c"
+#line 518 "../ada_re2c.c"
 yy16:
        YYDEBUG(16, YYPEEK ());
        yyaccept = 1;
@@ -612,11 +615,11 @@ yy16:
        case '|':
        case '}':
        case '~':
-       case 0x7F:      goto yy92;
+       case 0x7F:      goto yy94;
        case '(':
                YYBACKUPCTX ();
-               goto yy93;
-       case '[':       goto yy94;
+               goto yy95;
+       case '[':       goto yy96;
        case 0xC2:
        case 0xC3:
        case 0xC4:
@@ -646,8 +649,8 @@ yy16:
        case 0xDC:
        case 0xDD:
        case 0xDE:
-       case 0xDF:      goto yy95;
-       case 0xE0:      goto yy96;
+       case 0xDF:      goto yy97;
+       case 0xE0:      goto yy98;
        case 0xE1:
        case 0xE2:
        case 0xE3:
@@ -662,99 +665,99 @@ yy16:
        case 0xEC:
        case 0xED:
        case 0xEE:
-       case 0xEF:      goto yy97;
-       case 0xF0:      goto yy98;
+       case 0xEF:      goto yy99;
+       case 0xF0:      goto yy100;
        case 0xF1:
        case 0xF2:
-       case 0xF3:      goto yy99;
-       case 0xF4:      goto yy100;
+       case 0xF3:      goto yy101;
+       case 0xF4:      goto yy102;
        default:        goto yy17;
        }
 yy17:
        YYDEBUG(17, YYPEEK ());
-#line 358 "../ada.re2c"
+#line 361 "../ada.re2c"
        {*id =  101; continue;}
-#line 678 "../ada_re2c.c"
+#line 681 "../ada_re2c.c"
 yy18:
        YYDEBUG(18, YYPEEK ());
        YYSKIP ();
        YYDEBUG(19, YYPEEK ());
-#line 333 "../ada.re2c"
+#line 336 "../ada.re2c"
        {*id =  76; continue;}
-#line 685 "../ada_re2c.c"
+#line 688 "../ada_re2c.c"
 yy20:
        YYDEBUG(20, YYPEEK ());
        YYSKIP ();
        YYDEBUG(21, YYPEEK ());
-#line 334 "../ada.re2c"
+#line 337 "../ada.re2c"
        {*id =  77; continue;}
-#line 692 "../ada_re2c.c"
+#line 695 "../ada_re2c.c"
 yy22:
        YYDEBUG(22, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '*':       goto yy101;
+       case '*':       goto yy103;
        default:        goto yy23;
        }
 yy23:
        YYDEBUG(23, YYPEEK ());
-#line 356 "../ada.re2c"
+#line 359 "../ada.re2c"
        {*id =  99; continue;}
-#line 705 "../ada_re2c.c"
+#line 708 "../ada_re2c.c"
 yy24:
        YYDEBUG(24, YYPEEK ());
        YYSKIP ();
        YYDEBUG(25, YYPEEK ());
-#line 352 "../ada.re2c"
+#line 355 "../ada.re2c"
        {*id =  95; continue;}
-#line 712 "../ada_re2c.c"
+#line 715 "../ada_re2c.c"
 yy26:
        YYDEBUG(26, YYPEEK ());
        YYSKIP ();
        YYDEBUG(27, YYPEEK ());
-#line 340 "../ada.re2c"
+#line 343 "../ada.re2c"
        {*id =  83; continue;}
-#line 719 "../ada_re2c.c"
+#line 722 "../ada_re2c.c"
 yy28:
        YYDEBUG(28, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '-':       goto yy103;
+       case '-':       goto yy105;
        default:        goto yy29;
        }
 yy29:
        YYDEBUG(29, YYPEEK ());
-#line 351 "../ada.re2c"
+#line 354 "../ada.re2c"
        {*id =  94; continue;}
-#line 732 "../ada_re2c.c"
+#line 735 "../ada_re2c.c"
 yy30:
        YYDEBUG(30, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '.':       goto yy106;
+       case '.':       goto yy108;
        default:        goto yy31;
        }
 yy31:
        YYDEBUG(31, YYPEEK ());
-#line 341 "../ada.re2c"
+#line 344 "../ada.re2c"
        {*id =  84; continue;}
-#line 745 "../ada_re2c.c"
+#line 748 "../ada_re2c.c"
 yy32:
        YYDEBUG(32, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '=':       goto yy108;
+       case '=':       goto yy110;
        default:        goto yy33;
        }
 yy33:
        YYDEBUG(33, YYPEEK ());
-#line 354 "../ada.re2c"
+#line 357 "../ada.re2c"
        {*id =  97; continue;}
-#line 758 "../ada_re2c.c"
+#line 761 "../ada_re2c.c"
 yy34:
        YYDEBUG(34, YYPEEK ());
        yyaccept = 2;
@@ -763,22 +766,12 @@ yy34:
        yych = YYPEEK ();
        YYDEBUG(35, YYPEEK ());
        switch (yych) {
-       case '#':       goto yy110;
+       case '#':       goto yy112;
        case '-':
        case '.':
-       case 'A':
-       case 'B':
-       case 'C':
-       case 'D':
        case 'E':
-       case 'F':
        case '_':
-       case 'a':
-       case 'b':
-       case 'c':
-       case 'd':
-       case 'e':
-       case 'f':       goto yy111;
+       case 'e':       goto yy113;
        case '0':
        case '1':
        case '2':
@@ -793,71 +786,71 @@ yy34:
        }
 yy36:
        YYDEBUG(36, YYPEEK ());
-#line 360 "../ada.re2c"
+#line 363 "../ada.re2c"
        {*id =  103; continue;}
-#line 799 "../ada_re2c.c"
+#line 792 "../ada_re2c.c"
 yy37:
        YYDEBUG(37, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '=':       goto yy113;
+       case '=':       goto yy115;
        default:        goto yy38;
        }
 yy38:
        YYDEBUG(38, YYPEEK ());
-#line 338 "../ada.re2c"
+#line 341 "../ada.re2c"
        {*id =  81; continue;}
-#line 812 "../ada_re2c.c"
+#line 805 "../ada_re2c.c"
 yy39:
        YYDEBUG(39, YYPEEK ());
        YYSKIP ();
        YYDEBUG(40, YYPEEK ());
-#line 353 "../ada.re2c"
+#line 356 "../ada.re2c"
        {*id =  96; continue;}
-#line 819 "../ada_re2c.c"
+#line 812 "../ada_re2c.c"
 yy41:
        YYDEBUG(41, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '<':       goto yy115;
-       case '=':       goto yy117;
-       case '>':       goto yy119;
+       case '<':       goto yy117;
+       case '=':       goto yy119;
+       case '>':       goto yy121;
        default:        goto yy42;
        }
 yy42:
        YYDEBUG(42, YYPEEK ());
-#line 348 "../ada.re2c"
+#line 351 "../ada.re2c"
        {*id =  91; continue;}
-#line 834 "../ada_re2c.c"
+#line 827 "../ada_re2c.c"
 yy43:
        YYDEBUG(43, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '>':       goto yy121;
+       case '>':       goto yy123;
        default:        goto yy44;
        }
 yy44:
        YYDEBUG(44, YYPEEK ());
-#line 343 "../ada.re2c"
+#line 346 "../ada.re2c"
        {*id =  86; continue;}
-#line 847 "../ada_re2c.c"
+#line 840 "../ada_re2c.c"
 yy45:
        YYDEBUG(45, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '=':       goto yy123;
-       case '>':       goto yy125;
+       case '=':       goto yy125;
+       case '>':       goto yy127;
        default:        goto yy46;
        }
 yy46:
        YYDEBUG(46, YYPEEK ());
-#line 345 "../ada.re2c"
+#line 348 "../ada.re2c"
        {*id =  88; continue;}
-#line 861 "../ada_re2c.c"
+#line 854 "../ada_re2c.c"
 yy47:
        YYDEBUG(47, YYPEEK ());
        yyaccept = 3;
@@ -866,24 +859,24 @@ yy47:
        yych = YYPEEK ();
        switch (yych) {
        case 'B':
-       case 'b':       goto yy127;
+       case 'b':       goto yy129;
        case 'C':
-       case 'c':       goto yy128;
+       case 'c':       goto yy130;
        case 'L':
-       case 'l':       goto yy129;
+       case 'l':       goto yy131;
        case 'N':
-       case 'n':       goto yy130;
+       case 'n':       goto yy132;
        case 'R':
-       case 'r':       goto yy131;
+       case 'r':       goto yy133;
        case 'T':
-       case 't':       goto yy132;
+       case 't':       goto yy134;
        default:        goto yy56;
        }
 yy48:
        YYDEBUG(48, YYPEEK ());
-#line 361 "../ada.re2c"
+#line 364 "../ada.re2c"
        {*id =  104; continue;}
-#line 887 "../ada_re2c.c"
+#line 880 "../ada_re2c.c"
 yy49:
        YYDEBUG(49, YYPEEK ());
        yyaccept = 3;
@@ -892,9 +885,9 @@ yy49:
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy141;
+       case 'e':       goto yy143;
        case 'O':
-       case 'o':       goto yy142;
+       case 'o':       goto yy144;
        default:        goto yy56;
        }
 yy50:
@@ -905,9 +898,9 @@ yy50:
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy143;
+       case 'a':       goto yy145;
        case 'O':
-       case 'o':       goto yy144;
+       case 'o':       goto yy146;
        default:        goto yy56;
        }
 yy51:
@@ -918,11 +911,11 @@ yy51:
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy145;
+       case 'e':       goto yy147;
        case 'I':
-       case 'i':       goto yy146;
+       case 'i':       goto yy148;
        case 'O':
-       case 'o':       goto yy147;
+       case 'o':       goto yy149;
        default:        goto yy56;
        }
 yy52:
@@ -933,11 +926,11 @@ yy52:
        yych = YYPEEK ();
        switch (yych) {
        case 'L':
-       case 'l':       goto yy149;
+       case 'l':       goto yy151;
        case 'N':
-       case 'n':       goto yy150;
+       case 'n':       goto yy152;
        case 'X':
-       case 'x':       goto yy151;
+       case 'x':       goto yy153;
        default:        goto yy56;
        }
 yy53:
@@ -948,9 +941,9 @@ yy53:
        yych = YYPEEK ();
        switch (yych) {
        case 'O':
-       case 'o':       goto yy152;
+       case 'o':       goto yy154;
        case 'U':
-       case 'u':       goto yy153;
+       case 'u':       goto yy155;
        default:        goto yy56;
        }
 yy54:
@@ -961,9 +954,9 @@ yy54:
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy154;
+       case 'e':       goto yy156;
        case 'O':
-       case 'o':       goto yy155;
+       case 'o':       goto yy157;
        default:        goto yy56;
        }
 yy55:
@@ -1038,7 +1031,7 @@ yy56:
        case 'x':
        case 'y':
        case 'z':       goto yy55;
-       case '[':       goto yy134;
+       case '[':       goto yy136;
        case 0xC2:
        case 0xC3:
        case 0xC4:
@@ -1068,8 +1061,8 @@ yy56:
        case 0xDC:
        case 0xDD:
        case 0xDE:
-       case 0xDF:      goto yy135;
-       case 0xE0:      goto yy136;
+       case 0xDF:      goto yy137;
+       case 0xE0:      goto yy138;
        case 0xE1:
        case 0xE2:
        case 0xE3:
@@ -1084,12 +1077,12 @@ yy56:
        case 0xEC:
        case 0xED:
        case 0xEE:
-       case 0xEF:      goto yy137;
-       case 0xF0:      goto yy138;
+       case 0xEF:      goto yy139;
+       case 0xF0:      goto yy140;
        case 0xF1:
        case 0xF2:
-       case 0xF3:      goto yy139;
-       case 0xF4:      goto yy140;
+       case 0xF3:      goto yy141;
+       case 0xF4:      goto yy142;
        default:        goto yy48;
        }
 yy57:
@@ -1100,11 +1093,11 @@ yy57:
        yych = YYPEEK ();
        switch (yych) {
        case 'F':
-       case 'f':       goto yy156;
+       case 'f':       goto yy158;
        case 'N':
-       case 'n':       goto yy158;
+       case 'n':       goto yy160;
        case 'S':
-       case 's':       goto yy160;
+       case 's':       goto yy162;
        default:        goto yy56;
        }
 yy58:
@@ -1115,9 +1108,9 @@ yy58:
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy162;
+       case 'i':       goto yy164;
        case 'O':
-       case 'o':       goto yy163;
+       case 'o':       goto yy165;
        default:        goto yy56;
        }
 yy59:
@@ -1128,7 +1121,7 @@ yy59:
        yych = YYPEEK ();
        switch (yych) {
        case 'O':
-       case 'o':       goto yy164;
+       case 'o':       goto yy166;
        default:        goto yy56;
        }
 yy60:
@@ -1139,11 +1132,11 @@ yy60:
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy165;
+       case 'e':       goto yy167;
        case 'O':
-       case 'o':       goto yy166;
+       case 'o':       goto yy168;
        case 'U':
-       case 'u':       goto yy167;
+       case 'u':       goto yy169;
        default:        goto yy56;
        }
 yy61:
@@ -1154,15 +1147,15 @@ yy61:
        yych = YYPEEK ();
        switch (yych) {
        case 'F':
-       case 'f':       goto yy168;
+       case 'f':       goto yy170;
        case 'R':
-       case 'r':       goto yy170;
+       case 'r':       goto yy172;
        case 'T':
-       case 't':       goto yy172;
+       case 't':       goto yy174;
        case 'U':
-       case 'u':       goto yy173;
+       case 'u':       goto yy175;
        case 'V':
-       case 'v':       goto yy174;
+       case 'v':       goto yy176;
        default:        goto yy56;
        }
 yy62:
@@ -1173,9 +1166,9 @@ yy62:
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy175;
+       case 'a':       goto yy177;
        case 'R':
-       case 'r':       goto yy176;
+       case 'r':       goto yy178;
        default:        goto yy56;
        }
 yy63:
@@ -1186,9 +1179,9 @@ yy63:
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy177;
+       case 'a':       goto yy179;
        case 'E':
-       case 'e':       goto yy178;
+       case 'e':       goto yy180;
        default:        goto yy56;
        }
 yy64:
@@ -1199,13 +1192,13 @@ yy64:
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy179;
+       case 'e':       goto yy181;
        case 'O':
-       case 'o':       goto yy180;
+       case 'o':       goto yy182;
        case 'U':
-       case 'u':       goto yy181;
+       case 'u':       goto yy183;
        case 'Y':
-       case 'y':       goto yy182;
+       case 'y':       goto yy184;
        default:        goto yy56;
        }
 yy65:
@@ -1216,13 +1209,13 @@ yy65:
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy183;
+       case 'a':       goto yy185;
        case 'E':
-       case 'e':       goto yy184;
+       case 'e':       goto yy186;
        case 'H':
-       case 'h':       goto yy185;
+       case 'h':       goto yy187;
        case 'Y':
-       case 'y':       goto yy186;
+       case 'y':       goto yy188;
        default:        goto yy56;
        }
 yy66:
@@ -1233,9 +1226,9 @@ yy66:
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy187;
+       case 'n':       goto yy189;
        case 'S':
-       case 's':       goto yy188;
+       case 's':       goto yy190;
        default:        goto yy56;
        }
 yy67:
@@ -1246,9 +1239,9 @@ yy67:
        yych = YYPEEK ();
        switch (yych) {
        case 'H':
-       case 'h':       goto yy189;
+       case 'h':       goto yy191;
        case 'I':
-       case 'i':       goto yy190;
+       case 'i':       goto yy192;
        default:        goto yy56;
        }
 yy68:
@@ -1259,7 +1252,7 @@ yy68:
        yych = YYPEEK ();
        switch (yych) {
        case 'O':
-       case 'o':       goto yy191;
+       case 'o':       goto yy193;
        default:        goto yy56;
        }
 yy69:
@@ -1269,7 +1262,7 @@ yy69:
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '"':       goto yy192;
+       case '"':       goto yy194;
        default:        goto yy3;
        }
 yy70:
@@ -1457,16 +1450,16 @@ yy70:
        case 0xF1:
        case 0xF2:
        case 0xF3:
-       case 0xF4:      goto yy194;
+       case 0xF4:      goto yy196;
        default:        goto yy3;
        }
 yy71:
        YYDEBUG(71, YYPEEK ());
        YYSKIP ();
        YYDEBUG(72, YYPEEK ());
-#line 336 "../ada.re2c"
+#line 339 "../ada.re2c"
        {*id =  79; continue;}
-#line 1470 "../ada_re2c.c"
+#line 1463 "../ada_re2c.c"
 yy73:
        YYDEBUG(73, YYPEEK ());
        YYSKIP ();
@@ -1576,7 +1569,7 @@ yy74:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy135;
+       case 0xBF:      goto yy137;
        default:        goto yy3;
        }
 yy75:
@@ -1649,7 +1642,7 @@ yy75:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy135;
+       case 0xBF:      goto yy137;
        default:        goto yy3;
        }
 yy76:
@@ -1706,7 +1699,7 @@ yy76:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy137;
+       case 0xBF:      goto yy139;
        default:        goto yy3;
        }
 yy77:
@@ -1779,7 +1772,7 @@ yy77:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy137;
+       case 0xBF:      goto yy139;
        default:        goto yy3;
        }
 yy78:
@@ -1804,7 +1797,7 @@ yy78:
        case 0x8C:
        case 0x8D:
        case 0x8E:
-       case 0x8F:      goto yy137;
+       case 0x8F:      goto yy139;
        default:        goto yy3;
        }
 yy79:
@@ -1872,7 +1865,6 @@ yy80:
        case 'X':
        case 'Y':
        case 'Z':
-       case '[':
        case '\\':
        case ']':
        case '^':
@@ -1910,6 +1902,7 @@ yy80:
        case '~':
        case 0x7F:      goto yy79;
        case '"':       goto yy82;
+       case '[':       goto yy84;
        case 0xC2:
        case 0xC3:
        case 0xC4:
@@ -1939,8 +1932,8 @@ yy80:
        case 0xDC:
        case 0xDD:
        case 0xDE:
-       case 0xDF:      goto yy84;
-       case 0xE0:      goto yy85;
+       case 0xDF:      goto yy86;
+       case 0xE0:      goto yy87;
        case 0xE1:
        case 0xE2:
        case 0xE3:
@@ -1955,12 +1948,12 @@ yy80:
        case 0xEC:
        case 0xED:
        case 0xEE:
-       case 0xEF:      goto yy86;
-       case 0xF0:      goto yy87;
+       case 0xEF:      goto yy88;
+       case 0xF0:      goto yy89;
        case 0xF1:
        case 0xF2:
-       case 0xF3:      goto yy88;
-       case 0xF4:      goto yy89;
+       case 0xF3:      goto yy90;
+       case 0xF4:      goto yy91;
        default:        goto yy81;
        }
 yy81:
@@ -1972,81 +1965,81 @@ yy81:
        case 2:         goto yy36;
        case 3:         goto yy48;
        case 4:         goto yy83;
-       case 5:         goto yy105;
-       case 6:         goto yy133;
-       case 7:         goto yy148;
-       case 8:         goto yy157;
-       case 9:         goto yy159;
-       case 10:        goto yy161;
-       case 11:        goto yy169;
-       case 12:        goto yy171;
-       case 13:        goto yy205;
-       case 14:        goto yy218;
-       case 15:        goto yy222;
-       case 16:        goto yy224;
-       case 17:        goto yy235;
-       case 18:        goto yy240;
-       case 19:        goto yy248;
-       case 20:        goto yy250;
-       case 21:        goto yy252;
-       case 22:        goto yy256;
-       case 23:        goto yy266;
-       case 24:        goto yy283;
-       case 25:        goto yy288;
-       case 26:        goto yy310;
-       case 27:        goto yy312;
-       case 28:        goto yy319;
-       case 29:        goto yy324;
-       case 30:        goto yy328;
-       case 31:        goto yy332;
-       case 32:        goto yy334;
-       case 33:        goto yy352;
-       case 34:        goto yy357;
-       case 35:        goto yy360;
-       case 36:        goto yy362;
-       case 37:        goto yy365;
-       case 38:        goto yy368;
-       case 39:        goto yy375;
-       case 40:        goto yy381;
-       case 41:        goto yy383;
-       case 42:        goto yy387;
-       case 43:        goto yy389;
-       case 44:        goto yy392;
-       case 45:        goto yy394;
-       case 46:        goto yy408;
-       case 47:        goto yy410;
-       case 48:        goto yy423;
-       case 49:        goto yy425;
-       case 50:        goto yy430;
-       case 51:        goto yy432;
-       case 52:        goto yy437;
-       case 53:        goto yy444;
-       case 54:        goto yy448;
-       case 55:        goto yy453;
-       case 56:        goto yy457;
-       case 57:        goto yy460;
-       case 58:        goto yy465;
-       case 59:        goto yy470;
-       case 60:        goto yy473;
-       case 61:        goto yy477;
-       case 62:        goto yy480;
-       case 63:        goto yy483;
-       case 64:        goto yy485;
-       case 65:        goto yy489;
-       case 66:        goto yy491;
-       case 67:        goto yy493;
-       case 68:        goto yy496;
-       case 69:        goto yy500;
-       case 70:        goto yy502;
-       case 71:        goto yy505;
-       case 72:        goto yy511;
-       case 73:        goto yy515;
-       case 74:        goto yy517;
-       case 75:        goto yy520;
-       case 76:        goto yy522;
-       case 77:        goto yy525;
-       case 78:        goto yy527;
-       default:        goto yy531;
+       case 5:         goto yy107;
+       case 6:         goto yy135;
+       case 7:         goto yy150;
+       case 8:         goto yy159;
+       case 9:         goto yy161;
+       case 10:        goto yy163;
+       case 11:        goto yy171;
+       case 12:        goto yy173;
+       case 13:        goto yy208;
+       case 14:        goto yy223;
+       case 15:        goto yy227;
+       case 16:        goto yy229;
+       case 17:        goto yy240;
+       case 18:        goto yy245;
+       case 19:        goto yy253;
+       case 20:        goto yy255;
+       case 21:        goto yy257;
+       case 22:        goto yy261;
+       case 23:        goto yy271;
+       case 24:        goto yy288;
+       case 25:        goto yy293;
+       case 26:        goto yy317;
+       case 27:        goto yy319;
+       case 28:        goto yy326;
+       case 29:        goto yy331;
+       case 30:        goto yy335;
+       case 31:        goto yy339;
+       case 32:        goto yy341;
+       case 33:        goto yy359;
+       case 34:        goto yy364;
+       case 35:        goto yy367;
+       case 36:        goto yy369;
+       case 37:        goto yy372;
+       case 38:        goto yy375;
+       case 39:        goto yy383;
+       case 40:        goto yy389;
+       case 41:        goto yy391;
+       case 42:        goto yy395;
+       case 43:        goto yy397;
+       case 44:        goto yy400;
+       case 45:        goto yy402;
+       case 46:        goto yy416;
+       case 47:        goto yy418;
+       case 48:        goto yy431;
+       case 49:        goto yy433;
+       case 50:        goto yy438;
+       case 51:        goto yy440;
+       case 52:        goto yy445;
+       case 53:        goto yy452;
+       case 54:        goto yy456;
+       case 55:        goto yy461;
+       case 56:        goto yy465;
+       case 57:        goto yy468;
+       case 58:        goto yy473;
+       case 59:        goto yy478;
+       case 60:        goto yy481;
+       case 61:        goto yy485;
+       case 62:        goto yy488;
+       case 63:        goto yy491;
+       case 64:        goto yy493;
+       case 65:        goto yy497;
+       case 66:        goto yy499;
+       case 67:        goto yy501;
+       case 68:        goto yy504;
+       case 69:        goto yy508;
+       case 70:        goto yy510;
+       case 71:        goto yy513;
+       case 72:        goto yy519;
+       case 73:        goto yy523;
+       case 74:        goto yy525;
+       case 75:        goto yy528;
+       case 76:        goto yy530;
+       case 77:        goto yy533;
+       case 78:        goto yy535;
+       default:        goto yy539;
        }
 yy82:
        YYDEBUG(82, YYPEEK ());
@@ -2060,13 +2053,168 @@ yy82:
        }
 yy83:
        YYDEBUG(83, YYPEEK ());
-#line 362 "../ada.re2c"
+#line 365 "../ada.re2c"
        {*id =  105; continue;}
-#line 2066 "../ada_re2c.c"
+#line 2059 "../ada_re2c.c"
 yy84:
        YYDEBUG(84, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
+       YYDEBUG(85, YYPEEK ());
+       switch (yych) {
+       case ' ':
+       case '!':
+       case '#':
+       case '$':
+       case '%':
+       case '&':
+       case '\'':
+       case '(':
+       case ')':
+       case '*':
+       case '+':
+       case ',':
+       case '-':
+       case '.':
+       case '/':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case ':':
+       case ';':
+       case '<':
+       case '=':
+       case '>':
+       case '?':
+       case '@':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
+       case 'L':
+       case 'M':
+       case 'N':
+       case 'O':
+       case 'P':
+       case 'Q':
+       case 'R':
+       case 'S':
+       case 'T':
+       case 'U':
+       case 'V':
+       case 'W':
+       case 'X':
+       case 'Y':
+       case 'Z':
+       case '\\':
+       case ']':
+       case '^':
+       case '_':
+       case '`':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':
+       case 'g':
+       case 'h':
+       case 'i':
+       case 'j':
+       case 'k':
+       case 'l':
+       case 'm':
+       case 'n':
+       case 'o':
+       case 'p':
+       case 'q':
+       case 'r':
+       case 's':
+       case 't':
+       case 'u':
+       case 'v':
+       case 'w':
+       case 'x':
+       case 'y':
+       case 'z':
+       case '{':
+       case '|':
+       case '}':
+       case '~':
+       case 0x7F:      goto yy79;
+       case '"':       goto yy204;
+       case '[':       goto yy84;
+       case 0xC2:
+       case 0xC3:
+       case 0xC4:
+       case 0xC5:
+       case 0xC6:
+       case 0xC7:
+       case 0xC8:
+       case 0xC9:
+       case 0xCA:
+       case 0xCB:
+       case 0xCC:
+       case 0xCD:
+       case 0xCE:
+       case 0xCF:
+       case 0xD0:
+       case 0xD1:
+       case 0xD2:
+       case 0xD3:
+       case 0xD4:
+       case 0xD5:
+       case 0xD6:
+       case 0xD7:
+       case 0xD8:
+       case 0xD9:
+       case 0xDA:
+       case 0xDB:
+       case 0xDC:
+       case 0xDD:
+       case 0xDE:
+       case 0xDF:      goto yy86;
+       case 0xE0:      goto yy87;
+       case 0xE1:
+       case 0xE2:
+       case 0xE3:
+       case 0xE4:
+       case 0xE5:
+       case 0xE6:
+       case 0xE7:
+       case 0xE8:
+       case 0xE9:
+       case 0xEA:
+       case 0xEB:
+       case 0xEC:
+       case 0xED:
+       case 0xEE:
+       case 0xEF:      goto yy88;
+       case 0xF0:      goto yy89;
+       case 0xF1:
+       case 0xF2:
+       case 0xF3:      goto yy90;
+       case 0xF4:      goto yy91;
+       default:        goto yy81;
+       }
+yy86:
+       YYDEBUG(86, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
        switch (yych) {
        case 0x80:
        case 0x81:
@@ -2134,8 +2282,8 @@ yy84:
        case 0xBF:      goto yy79;
        default:        goto yy81;
        }
-yy85:
-       YYDEBUG(85, YYPEEK ());
+yy87:
+       YYDEBUG(87, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -2170,11 +2318,11 @@ yy85:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy84;
+       case 0xBF:      goto yy86;
        default:        goto yy81;
        }
-yy86:
-       YYDEBUG(86, YYPEEK ());
+yy88:
+       YYDEBUG(88, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -2241,11 +2389,11 @@ yy86:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy84;
+       case 0xBF:      goto yy86;
        default:        goto yy81;
        }
-yy87:
-       YYDEBUG(87, YYPEEK ());
+yy89:
+       YYDEBUG(89, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -2296,11 +2444,11 @@ yy87:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy86;
+       case 0xBF:      goto yy88;
        default:        goto yy81;
        }
-yy88:
-       YYDEBUG(88, YYPEEK ());
+yy90:
+       YYDEBUG(90, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -2367,11 +2515,11 @@ yy88:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy86;
+       case 0xBF:      goto yy88;
        default:        goto yy81;
        }
-yy89:
-       YYDEBUG(89, YYPEEK ());
+yy91:
+       YYDEBUG(91, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -2390,24 +2538,7 @@ yy89:
        case 0x8C:
        case 0x8D:
        case 0x8E:
-       case 0x8F:      goto yy86;
-       default:        goto yy81;
-       }
-yy90:
-       YYDEBUG(90, YYPEEK ());
-       YYSKIP ();
-       yych = YYPEEK ();
-       switch (yych) {
-       case 'l':       goto yy202;
-       case 'n':       goto yy203;
-       default:        goto yy81;
-       }
-yy91:
-       YYDEBUG(91, YYPEEK ());
-       YYSKIP ();
-       yych = YYPEEK ();
-       switch (yych) {
-       case 'f':       goto yy103;
+       case 0x8F:      goto yy88;
        default:        goto yy81;
        }
 yy92:
@@ -2415,7 +2546,8 @@ yy92:
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '\'':      goto yy204;
+       case 'l':       goto yy205;
+       case 'n':       goto yy206;
        default:        goto yy81;
        }
 yy93:
@@ -2423,7 +2555,7 @@ yy93:
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '\'':      goto yy206;
+       case 'f':       goto yy105;
        default:        goto yy81;
        }
 yy94:
@@ -2431,8 +2563,7 @@ yy94:
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '"':       goto yy207;
-       case '\'':      goto yy204;
+       case '\'':      goto yy207;
        default:        goto yy81;
        }
 yy95:
@@ -2440,8 +2571,25 @@ yy95:
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case 0x80:
-       case 0x81:
+       case '\'':      goto yy209;
+       default:        goto yy81;
+       }
+yy96:
+       YYDEBUG(96, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case '"':       goto yy210;
+       case '\'':      goto yy207;
+       default:        goto yy81;
+       }
+yy97:
+       YYDEBUG(97, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 0x80:
+       case 0x81:
        case 0x82:
        case 0x83:
        case 0x84:
@@ -2503,11 +2651,11 @@ yy95:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy92;
+       case 0xBF:      goto yy94;
        default:        goto yy81;
        }
-yy96:
-       YYDEBUG(96, YYPEEK ());
+yy98:
+       YYDEBUG(98, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -2542,11 +2690,11 @@ yy96:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy95;
+       case 0xBF:      goto yy97;
        default:        goto yy81;
        }
-yy97:
-       YYDEBUG(97, YYPEEK ());
+yy99:
+       YYDEBUG(99, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -2613,11 +2761,11 @@ yy97:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy95;
+       case 0xBF:      goto yy97;
        default:        goto yy81;
        }
-yy98:
-       YYDEBUG(98, YYPEEK ());
+yy100:
+       YYDEBUG(100, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -2668,11 +2816,11 @@ yy98:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy97;
+       case 0xBF:      goto yy99;
        default:        goto yy81;
        }
-yy99:
-       YYDEBUG(99, YYPEEK ());
+yy101:
+       YYDEBUG(101, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -2739,11 +2887,11 @@ yy99:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy97;
+       case 0xBF:      goto yy99;
        default:        goto yy81;
        }
-yy100:
-       YYDEBUG(100, YYPEEK ());
+yy102:
+       YYDEBUG(102, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -2762,29 +2910,28 @@ yy100:
        case 0x8C:
        case 0x8D:
        case 0x8E:
-       case 0x8F:      goto yy97;
+       case 0x8F:      goto yy99;
        default:        goto yy81;
        }
-yy101:
-       YYDEBUG(101, YYPEEK ());
-       YYSKIP ();
-       YYDEBUG(102, YYPEEK ());
-#line 357 "../ada.re2c"
-       {*id =  100; continue;}
-#line 2775 "../ada_re2c.c"
 yy103:
        YYDEBUG(103, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(104, YYPEEK ());
+#line 360 "../ada.re2c"
+       {*id =  100; continue;}
+#line 2923 "../ada_re2c.c"
+yy105:
+       YYDEBUG(105, YYPEEK ());
        yyaccept = 5;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
-       YYDEBUG(104, YYPEEK ());
+       YYDEBUG(106, YYPEEK ());
        switch (yych) {
        case 0x00:
        case 0x01:
        case 0x02:
        case 0x03:
-       case 0x04:
        case 0x05:
        case 0x06:
        case 0x07:
@@ -2906,7 +3053,7 @@ yy103:
        case '|':
        case '}':
        case '~':
-       case 0x7F:      goto yy103;
+       case 0x7F:      goto yy105;
        case 0xC2:
        case 0xC3:
        case 0xC4:
@@ -2936,8 +3083,8 @@ yy103:
        case 0xDC:
        case 0xDD:
        case 0xDE:
-       case 0xDF:      goto yy208;
-       case 0xE0:      goto yy209;
+       case 0xDF:      goto yy211;
+       case 0xE0:      goto yy212;
        case 0xE1:
        case 0xE2:
        case 0xE3:
@@ -2952,49 +3099,52 @@ yy103:
        case 0xEC:
        case 0xED:
        case 0xEE:
-       case 0xEF:      goto yy210;
-       case 0xF0:      goto yy211;
+       case 0xEF:      goto yy213;
+       case 0xF0:      goto yy214;
        case 0xF1:
        case 0xF2:
-       case 0xF3:      goto yy212;
-       case 0xF4:      goto yy213;
-       default:        goto yy105;
+       case 0xF3:      goto yy215;
+       case 0xF4:      goto yy216;
+       default:        goto yy107;
        }
-yy105:
-       YYDEBUG(105, YYPEEK ());
-#line 259 "../ada.re2c"
-       {*id =  2; continue;}
-#line 2968 "../ada_re2c.c"
-yy106:
-       YYDEBUG(106, YYPEEK ());
-       YYSKIP ();
+yy107:
        YYDEBUG(107, YYPEEK ());
-#line 342 "../ada.re2c"
-       {*id =  85; continue;}
-#line 2975 "../ada_re2c.c"
+#line 262 "../ada.re2c"
+       {*id =  2; continue;}
+#line 3115 "../ada_re2c.c"
 yy108:
        YYDEBUG(108, YYPEEK ());
        YYSKIP ();
        YYDEBUG(109, YYPEEK ());
-#line 355 "../ada.re2c"
-       {*id =  98; continue;}
-#line 2982 "../ada_re2c.c"
+#line 345 "../ada.re2c"
+       {*id =  85; continue;}
+#line 3122 "../ada_re2c.c"
 yy110:
        YYDEBUG(110, YYPEEK ());
        YYSKIP ();
+       YYDEBUG(111, YYPEEK ());
+#line 358 "../ada.re2c"
+       {*id =  98; continue;}
+#line 3129 "../ada_re2c.c"
+yy112:
+       YYDEBUG(112, YYPEEK ());
+       YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
        case '#':       goto yy81;
-       default:        goto yy215;
+       default:        goto yy218;
        }
-yy111:
-       YYDEBUG(111, YYPEEK ());
+yy113:
+       YYDEBUG(113, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
-       YYDEBUG(112, YYPEEK ());
+       YYDEBUG(114, YYPEEK ());
        switch (yych) {
        case '-':
        case '.':
+       case 'E':
+       case '_':
+       case 'e':       goto yy113;
        case '0':
        case '1':
        case '2':
@@ -3004,132 +3154,119 @@ yy111:
        case '6':
        case '7':
        case '8':
-       case '9':
-       case 'A':
-       case 'B':
-       case 'C':
-       case 'D':
-       case 'E':
-       case 'F':
-       case '_':
-       case 'a':
-       case 'b':
-       case 'c':
-       case 'd':
-       case 'e':
-       case 'f':       goto yy111;
-       default:        goto yy36;
+       case '9':       goto yy219;
+       default:        goto yy81;
        }
-yy113:
-       YYDEBUG(113, YYPEEK ());
-       YYSKIP ();
-       YYDEBUG(114, YYPEEK ());
-#line 339 "../ada.re2c"
-       {*id =  82; continue;}
-#line 3030 "../ada_re2c.c"
 yy115:
        YYDEBUG(115, YYPEEK ());
        YYSKIP ();
        YYDEBUG(116, YYPEEK ());
-#line 350 "../ada.re2c"
-       {*id =  93; continue;}
-#line 3037 "../ada_re2c.c"
+#line 342 "../ada.re2c"
+       {*id =  82; continue;}
+#line 3167 "../ada_re2c.c"
 yy117:
        YYDEBUG(117, YYPEEK ());
        YYSKIP ();
        YYDEBUG(118, YYPEEK ());
-#line 349 "../ada.re2c"
-       {*id =  92; continue;}
-#line 3044 "../ada_re2c.c"
+#line 353 "../ada.re2c"
+       {*id =  93; continue;}
+#line 3174 "../ada_re2c.c"
 yy119:
        YYDEBUG(119, YYPEEK ());
        YYSKIP ();
        YYDEBUG(120, YYPEEK ());
-#line 337 "../ada.re2c"
-       {*id =  80; continue;}
-#line 3051 "../ada_re2c.c"
+#line 352 "../ada.re2c"
+       {*id =  92; continue;}
+#line 3181 "../ada_re2c.c"
 yy121:
        YYDEBUG(121, YYPEEK ());
        YYSKIP ();
        YYDEBUG(122, YYPEEK ());
-#line 344 "../ada.re2c"
-       {*id =  87; continue;}
-#line 3058 "../ada_re2c.c"
+#line 340 "../ada.re2c"
+       {*id =  80; continue;}
+#line 3188 "../ada_re2c.c"
 yy123:
        YYDEBUG(123, YYPEEK ());
        YYSKIP ();
        YYDEBUG(124, YYPEEK ());
-#line 346 "../ada.re2c"
-       {*id =  89; continue;}
-#line 3065 "../ada_re2c.c"
+#line 347 "../ada.re2c"
+       {*id =  87; continue;}
+#line 3195 "../ada_re2c.c"
 yy125:
        YYDEBUG(125, YYPEEK ());
        YYSKIP ();
        YYDEBUG(126, YYPEEK ());
-#line 347 "../ada.re2c"
-       {*id =  90; continue;}
-#line 3072 "../ada_re2c.c"
+#line 349 "../ada.re2c"
+       {*id =  89; continue;}
+#line 3202 "../ada_re2c.c"
 yy127:
        YYDEBUG(127, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(128, YYPEEK ());
+#line 350 "../ada.re2c"
+       {*id =  90; continue;}
+#line 3209 "../ada_re2c.c"
+yy129:
+       YYDEBUG(129, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'O':
-       case 'o':       goto yy216;
+       case 'o':       goto yy221;
        case 'S':
-       case 's':       goto yy217;
+       case 's':       goto yy222;
        default:        goto yy56;
        }
-yy128:
-       YYDEBUG(128, YYPEEK ());
+yy130:
+       YYDEBUG(130, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy219;
+       case 'c':       goto yy224;
        default:        goto yy56;
        }
-yy129:
-       YYDEBUG(129, YYPEEK ());
+yy131:
+       YYDEBUG(131, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy220;
+       case 'i':       goto yy225;
        case 'L':
-       case 'l':       goto yy221;
+       case 'l':       goto yy226;
        default:        goto yy56;
        }
-yy130:
-       YYDEBUG(130, YYPEEK ());
+yy132:
+       YYDEBUG(132, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy223;
+       case 'd':       goto yy228;
        default:        goto yy56;
        }
-yy131:
-       YYDEBUG(131, YYPEEK ());
+yy133:
+       YYDEBUG(133, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy225;
+       case 'r':       goto yy230;
        default:        goto yy56;
        }
-yy132:
-       YYDEBUG(132, YYPEEK ());
+yy134:
+       YYDEBUG(134, YYPEEK ());
        yyaccept = 6;
        YYSKIP ();
        YYBACKUP ();
@@ -3250,23 +3387,23 @@ yy132:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy133;
+       default:        goto yy135;
        }
-yy133:
-       YYDEBUG(133, YYPEEK ());
-#line 269 "../ada.re2c"
+yy135:
+       YYDEBUG(135, YYPEEK ());
+#line 272 "../ada.re2c"
        {*id =  12; continue;}
-#line 3260 "../ada_re2c.c"
-yy134:
-       YYDEBUG(134, YYPEEK ());
+#line 3397 "../ada_re2c.c"
+yy136:
+       YYDEBUG(136, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '"':       goto yy192;
+       case '"':       goto yy194;
        default:        goto yy81;
        }
-yy135:
-       YYDEBUG(135, YYPEEK ());
+yy137:
+       YYDEBUG(137, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -3336,8 +3473,8 @@ yy135:
        case 0xBF:      goto yy55;
        default:        goto yy81;
        }
-yy136:
-       YYDEBUG(136, YYPEEK ());
+yy138:
+       YYDEBUG(138, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -3372,11 +3509,11 @@ yy136:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy135;
+       case 0xBF:      goto yy137;
        default:        goto yy81;
        }
-yy137:
-       YYDEBUG(137, YYPEEK ());
+yy139:
+       YYDEBUG(139, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -3443,11 +3580,11 @@ yy137:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy135;
+       case 0xBF:      goto yy137;
        default:        goto yy81;
        }
-yy138:
-       YYDEBUG(138, YYPEEK ());
+yy140:
+       YYDEBUG(140, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -3498,11 +3635,11 @@ yy138:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy137;
+       case 0xBF:      goto yy139;
        default:        goto yy81;
        }
-yy139:
-       YYDEBUG(139, YYPEEK ());
+yy141:
+       YYDEBUG(141, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -3569,11 +3706,11 @@ yy139:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy137;
+       case 0xBF:      goto yy139;
        default:        goto yy81;
        }
-yy140:
-       YYDEBUG(140, YYPEEK ());
+yy142:
+       YYDEBUG(142, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -3592,79 +3729,79 @@ yy140:
        case 0x8C:
        case 0x8D:
        case 0x8E:
-       case 0x8F:      goto yy137;
+       case 0x8F:      goto yy139;
        default:        goto yy81;
        }
-yy141:
-       YYDEBUG(141, YYPEEK ());
+yy143:
+       YYDEBUG(143, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'G':
-       case 'g':       goto yy226;
+       case 'g':       goto yy231;
        default:        goto yy56;
        }
-yy142:
-       YYDEBUG(142, YYPEEK ());
+yy144:
+       YYDEBUG(144, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy227;
+       case 'd':       goto yy232;
        default:        goto yy56;
        }
-yy143:
-       YYDEBUG(143, YYPEEK ());
+yy145:
+       YYDEBUG(145, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'S':
-       case 's':       goto yy228;
+       case 's':       goto yy233;
        default:        goto yy56;
        }
-yy144:
-       YYDEBUG(144, YYPEEK ());
+yy146:
+       YYDEBUG(146, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy229;
+       case 'n':       goto yy234;
        default:        goto yy56;
        }
-yy145:
-       YYDEBUG(145, YYPEEK ());
+yy147:
+       YYDEBUG(147, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy230;
+       case 'c':       goto yy235;
        case 'L':
-       case 'l':       goto yy231;
+       case 'l':       goto yy236;
        default:        goto yy56;
        }
-yy146:
-       YYDEBUG(146, YYPEEK ());
+yy148:
+       YYDEBUG(148, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'G':
-       case 'g':       goto yy232;
+       case 'g':       goto yy237;
        default:        goto yy56;
        }
-yy147:
-       YYDEBUG(147, YYPEEK ());
+yy149:
+       YYDEBUG(149, YYPEEK ());
        yyaccept = 7;
        YYSKIP ();
        YYBACKUP ();
@@ -3785,96 +3922,96 @@ yy147:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy148;
+       default:        goto yy150;
        }
-yy148:
-       YYDEBUG(148, YYPEEK ());
-#line 278 "../ada.re2c"
+yy150:
+       YYDEBUG(150, YYPEEK ());
+#line 281 "../ada.re2c"
        {*id =  21; continue;}
-#line 3795 "../ada_re2c.c"
-yy149:
-       YYDEBUG(149, YYPEEK ());
+#line 3932 "../ada_re2c.c"
+yy151:
+       YYDEBUG(151, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'S':
-       case 's':       goto yy233;
+       case 's':       goto yy238;
        default:        goto yy56;
        }
-yy150:
-       YYDEBUG(150, YYPEEK ());
+yy152:
+       YYDEBUG(152, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy234;
+       case 'd':       goto yy239;
        case 'T':
-       case 't':       goto yy236;
+       case 't':       goto yy241;
        default:        goto yy56;
        }
-yy151:
-       YYDEBUG(151, YYPEEK ());
+yy153:
+       YYDEBUG(153, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy237;
+       case 'c':       goto yy242;
        case 'I':
-       case 'i':       goto yy238;
+       case 'i':       goto yy243;
        default:        goto yy56;
        }
-yy152:
-       YYDEBUG(152, YYPEEK ());
+yy154:
+       YYDEBUG(154, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy239;
+       case 'r':       goto yy244;
        default:        goto yy56;
        }
-yy153:
-       YYDEBUG(153, YYPEEK ());
+yy155:
+       YYDEBUG(155, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy241;
+       case 'n':       goto yy246;
        default:        goto yy56;
        }
-yy154:
-       YYDEBUG(154, YYPEEK ());
+yy156:
+       YYDEBUG(156, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy242;
+       case 'n':       goto yy247;
        default:        goto yy56;
        }
-yy155:
-       YYDEBUG(155, YYPEEK ());
+yy157:
+       YYDEBUG(157, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy243;
+       case 't':       goto yy248;
        default:        goto yy56;
        }
-yy156:
-       YYDEBUG(156, YYPEEK ());
+yy158:
+       YYDEBUG(158, YYPEEK ());
        yyaccept = 8;
        YYSKIP ();
        YYBACKUP ();
@@ -3995,15 +4132,15 @@ yy156:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy157;
+       default:        goto yy159;
        }
-yy157:
-       YYDEBUG(157, YYPEEK ());
-#line 289 "../ada.re2c"
+yy159:
+       YYDEBUG(159, YYPEEK ());
+#line 292 "../ada.re2c"
        {*id =  32; continue;}
-#line 4005 "../ada_re2c.c"
-yy158:
-       YYDEBUG(158, YYPEEK ());
+#line 4142 "../ada_re2c.c"
+yy160:
+       YYDEBUG(160, YYPEEK ());
        yyaccept = 9;
        YYSKIP ();
        YYBACKUP ();
@@ -4123,16 +4260,16 @@ yy158:
        case 0xF3:
        case 0xF4:      goto yy56;
        case 'T':
-       case 't':       goto yy244;
-       default:        goto yy159;
+       case 't':       goto yy249;
+       default:        goto yy161;
        }
-yy159:
-       YYDEBUG(159, YYPEEK ());
-#line 290 "../ada.re2c"
+yy161:
+       YYDEBUG(161, YYPEEK ());
+#line 293 "../ada.re2c"
        {*id =  33; continue;}
-#line 4134 "../ada_re2c.c"
-yy160:
-       YYDEBUG(160, YYPEEK ());
+#line 4271 "../ada_re2c.c"
+yy162:
+       YYDEBUG(162, YYPEEK ());
        yyaccept = 10;
        YYSKIP ();
        YYBACKUP ();
@@ -4253,81 +4390,81 @@ yy160:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy161;
+       default:        goto yy163;
        }
-yy161:
-       YYDEBUG(161, YYPEEK ());
-#line 292 "../ada.re2c"
+yy163:
+       YYDEBUG(163, YYPEEK ());
+#line 295 "../ada.re2c"
        {*id =  35; continue;}
-#line 4263 "../ada_re2c.c"
-yy162:
-       YYDEBUG(162, YYPEEK ());
+#line 4400 "../ada_re2c.c"
+yy164:
+       YYDEBUG(164, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'M':
-       case 'm':       goto yy245;
+       case 'm':       goto yy250;
        default:        goto yy56;
        }
-yy163:
-       YYDEBUG(163, YYPEEK ());
+yy165:
+       YYDEBUG(165, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'O':
-       case 'o':       goto yy246;
+       case 'o':       goto yy251;
        default:        goto yy56;
        }
-yy164:
-       YYDEBUG(164, YYPEEK ());
+yy166:
+       YYDEBUG(166, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy247;
+       case 'd':       goto yy252;
        default:        goto yy56;
        }
-yy165:
-       YYDEBUG(165, YYPEEK ());
+yy167:
+       YYDEBUG(167, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'W':
-       case 'w':       goto yy249;
+       case 'w':       goto yy254;
        default:        goto yy56;
        }
-yy166:
-       YYDEBUG(166, YYPEEK ());
+yy168:
+       YYDEBUG(168, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy251;
+       case 't':       goto yy256;
        default:        goto yy56;
        }
-yy167:
-       YYDEBUG(167, YYPEEK ());
+yy169:
+       YYDEBUG(169, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'L':
-       case 'l':       goto yy253;
+       case 'l':       goto yy258;
        default:        goto yy56;
        }
-yy168:
-       YYDEBUG(168, YYPEEK ());
+yy170:
+       YYDEBUG(170, YYPEEK ());
        yyaccept = 11;
        YYSKIP ();
        YYBACKUP ();
@@ -4448,15 +4585,15 @@ yy168:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy169;
+       default:        goto yy171;
        }
-yy169:
-       YYDEBUG(169, YYPEEK ());
-#line 299 "../ada.re2c"
+yy171:
+       YYDEBUG(171, YYPEEK ());
+#line 302 "../ada.re2c"
        {*id =  42; continue;}
-#line 4458 "../ada_re2c.c"
-yy170:
-       YYDEBUG(170, YYPEEK ());
+#line 4595 "../ada_re2c.c"
+yy172:
+       YYDEBUG(172, YYPEEK ());
        yyaccept = 12;
        YYSKIP ();
        YYBACKUP ();
@@ -4577,257 +4714,257 @@ yy170:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy171;
+       default:        goto yy173;
        }
-yy171:
-       YYDEBUG(171, YYPEEK ());
-#line 300 "../ada.re2c"
+yy173:
+       YYDEBUG(173, YYPEEK ());
+#line 303 "../ada.re2c"
        {*id =  43; continue;}
-#line 4587 "../ada_re2c.c"
-yy172:
-       YYDEBUG(172, YYPEEK ());
+#line 4724 "../ada_re2c.c"
+yy174:
+       YYDEBUG(174, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'H':
-       case 'h':       goto yy254;
+       case 'h':       goto yy259;
        default:        goto yy56;
        }
-yy173:
-       YYDEBUG(173, YYPEEK ());
+yy175:
+       YYDEBUG(175, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy255;
+       case 't':       goto yy260;
        default:        goto yy56;
        }
-yy174:
-       YYDEBUG(174, YYPEEK ());
+yy176:
+       YYDEBUG(176, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy257;
+       case 'e':       goto yy262;
        default:        goto yy56;
        }
-yy175:
-       YYDEBUG(175, YYPEEK ());
+yy177:
+       YYDEBUG(177, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy258;
+       case 'c':       goto yy263;
        default:        goto yy56;
        }
-yy176:
-       YYDEBUG(176, YYPEEK ());
+yy178:
+       YYDEBUG(178, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy259;
+       case 'a':       goto yy264;
        case 'I':
-       case 'i':       goto yy260;
+       case 'i':       goto yy265;
        case 'O':
-       case 'o':       goto yy261;
+       case 'o':       goto yy266;
        default:        goto yy56;
        }
-yy177:
-       YYDEBUG(177, YYPEEK ());
+yy179:
+       YYDEBUG(179, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy262;
+       case 'i':       goto yy267;
        case 'N':
-       case 'n':       goto yy263;
+       case 'n':       goto yy268;
        default:        goto yy56;
        }
-yy178:
-       YYDEBUG(178, YYPEEK ());
+yy180:
+       YYDEBUG(180, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy264;
+       case 'c':       goto yy269;
        case 'M':
-       case 'm':       goto yy265;
+       case 'm':       goto yy270;
        case 'N':
-       case 'n':       goto yy267;
+       case 'n':       goto yy272;
        case 'Q':
-       case 'q':       goto yy268;
+       case 'q':       goto yy273;
        case 'T':
-       case 't':       goto yy269;
+       case 't':       goto yy274;
        case 'V':
-       case 'v':       goto yy270;
+       case 'v':       goto yy275;
        default:        goto yy56;
        }
-yy179:
-       YYDEBUG(179, YYPEEK ());
+yy181:
+       YYDEBUG(181, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'L':
-       case 'l':       goto yy271;
+       case 'l':       goto yy276;
        case 'P':
-       case 'p':       goto yy272;
+       case 'p':       goto yy277;
        default:        goto yy56;
        }
-yy180:
-       YYDEBUG(180, YYPEEK ());
+yy182:
+       YYDEBUG(182, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'M':
-       case 'm':       goto yy273;
+       case 'm':       goto yy278;
        default:        goto yy56;
        }
-yy181:
-       YYDEBUG(181, YYPEEK ());
+yy183:
+       YYDEBUG(183, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'B':
-       case 'b':       goto yy274;
+       case 'b':       goto yy279;
        default:        goto yy56;
        }
-yy182:
-       YYDEBUG(182, YYPEEK ());
+yy184:
+       YYDEBUG(184, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy275;
+       case 'n':       goto yy280;
        default:        goto yy56;
        }
-yy183:
-       YYDEBUG(183, YYPEEK ());
+yy185:
+       YYDEBUG(185, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'G':
-       case 'g':       goto yy276;
+       case 'g':       goto yy281;
        case 'S':
-       case 's':       goto yy277;
+       case 's':       goto yy282;
        default:        goto yy56;
        }
-yy184:
-       YYDEBUG(184, YYPEEK ());
+yy186:
+       YYDEBUG(186, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy278;
+       case 'r':       goto yy283;
        default:        goto yy56;
        }
-yy185:
-       YYDEBUG(185, YYPEEK ());
+yy187:
+       YYDEBUG(187, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy279;
+       case 'e':       goto yy284;
        default:        goto yy56;
        }
-yy186:
-       YYDEBUG(186, YYPEEK ());
+yy188:
+       YYDEBUG(188, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'P':
-       case 'p':       goto yy280;
+       case 'p':       goto yy285;
        default:        goto yy56;
        }
-yy187:
-       YYDEBUG(187, YYPEEK ());
+yy189:
+       YYDEBUG(189, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy281;
+       case 't':       goto yy286;
        default:        goto yy56;
        }
-yy188:
-       YYDEBUG(188, YYPEEK ());
+yy190:
+       YYDEBUG(190, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy282;
+       case 'e':       goto yy287;
        default:        goto yy56;
        }
-yy189:
-       YYDEBUG(189, YYPEEK ());
+yy191:
+       YYDEBUG(191, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy284;
+       case 'e':       goto yy289;
        case 'I':
-       case 'i':       goto yy285;
+       case 'i':       goto yy290;
        default:        goto yy56;
        }
-yy190:
-       YYDEBUG(190, YYPEEK ());
+yy192:
+       YYDEBUG(192, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy286;
+       case 't':       goto yy291;
        default:        goto yy56;
        }
-yy191:
-       YYDEBUG(191, YYPEEK ());
+yy193:
+       YYDEBUG(193, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy287;
+       case 'r':       goto yy292;
        default:        goto yy56;
        }
-yy192:
-       YYDEBUG(192, YYPEEK ());
+yy194:
+       YYDEBUG(194, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -4852,15 +4989,15 @@ yy192:
        case 'c':
        case 'd':
        case 'e':
-       case 'f':       goto yy289;
+       case 'f':       goto yy294;
        default:        goto yy81;
        }
-yy193:
-       YYDEBUG(193, YYPEEK ());
+yy195:
+       YYDEBUG(195, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
-yy194:
-       YYDEBUG(194, YYPEEK ());
+yy196:
+       YYDEBUG(196, YYPEEK ());
        switch (yych) {
        case 0x00:
        case 0x01:
@@ -4988,8 +5125,8 @@ yy194:
        case '{':
        case '|':
        case '~':
-       case 0x7F:      goto yy193;
-       case '}':       goto yy195;
+       case 0x7F:      goto yy195;
+       case '}':       goto yy197;
        case 0xC2:
        case 0xC3:
        case 0xC4:
@@ -5019,8 +5156,8 @@ yy194:
        case 0xDC:
        case 0xDD:
        case 0xDE:
-       case 0xDF:      goto yy196;
-       case 0xE0:      goto yy197;
+       case 0xDF:      goto yy198;
+       case 0xE0:      goto yy199;
        case 0xE1:
        case 0xE2:
        case 0xE3:
@@ -5035,20 +5172,20 @@ yy194:
        case 0xEC:
        case 0xED:
        case 0xEE:
-       case 0xEF:      goto yy198;
-       case 0xF0:      goto yy199;
+       case 0xEF:      goto yy200;
+       case 0xF0:      goto yy201;
        case 0xF1:
        case 0xF2:
-       case 0xF3:      goto yy200;
-       case 0xF4:      goto yy201;
+       case 0xF3:      goto yy202;
+       case 0xF4:      goto yy203;
        default:        goto yy81;
        }
-yy195:
-       YYDEBUG(195, YYPEEK ());
+yy197:
+       YYDEBUG(197, YYPEEK ());
        YYSKIP ();
-       goto yy105;
-yy196:
-       YYDEBUG(196, YYPEEK ());
+       goto yy107;
+yy198:
+       YYDEBUG(198, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5115,11 +5252,11 @@ yy196:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy193;
+       case 0xBF:      goto yy195;
        default:        goto yy81;
        }
-yy197:
-       YYDEBUG(197, YYPEEK ());
+yy199:
+       YYDEBUG(199, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5154,11 +5291,11 @@ yy197:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy196;
+       case 0xBF:      goto yy198;
        default:        goto yy81;
        }
-yy198:
-       YYDEBUG(198, YYPEEK ());
+yy200:
+       YYDEBUG(200, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5225,11 +5362,11 @@ yy198:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy196;
+       case 0xBF:      goto yy198;
        default:        goto yy81;
        }
-yy199:
-       YYDEBUG(199, YYPEEK ());
+yy201:
+       YYDEBUG(201, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5280,11 +5417,11 @@ yy199:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy198;
+       case 0xBF:      goto yy200;
        default:        goto yy81;
        }
-yy200:
-       YYDEBUG(200, YYPEEK ());
+yy202:
+       YYDEBUG(202, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5351,11 +5488,11 @@ yy200:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy198;
+       case 0xBF:      goto yy200;
        default:        goto yy81;
        }
-yy201:
-       YYDEBUG(201, YYPEEK ());
+yy203:
+       YYDEBUG(203, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5374,56 +5511,17 @@ yy201:
        case 0x8C:
        case 0x8D:
        case 0x8E:
-       case 0x8F:      goto yy198;
-       default:        goto yy81;
-       }
-yy202:
-       YYDEBUG(202, YYPEEK ());
-       YYSKIP ();
-       yych = YYPEEK ();
-       switch (yych) {
-       case 's':       goto yy291;
-       default:        goto yy81;
-       }
-yy203:
-       YYDEBUG(203, YYPEEK ());
-       YYSKIP ();
-       yych = YYPEEK ();
-       switch (yych) {
-       case 'd':       goto yy103;
+       case 0x8F:      goto yy200;
        default:        goto yy81;
        }
 yy204:
        YYDEBUG(204, YYPEEK ());
-       YYSKIP ();
-yy205:
-       YYDEBUG(205, YYPEEK ());
-#line 363 "../ada.re2c"
-       {*id =  106; continue;}
-#line 5404 "../ada_re2c.c"
-yy206:
-       YYDEBUG(206, YYPEEK ());
-       yyaccept = 13;
+       yyaccept = 4;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
-       case ' ':
-       case '!':
-       case '"':
-       case '#':
-       case '$':
-       case '%':
-       case '&':
-       case '\'':
-       case '(':
-       case ')':
-       case '*':
-       case '+':
-       case ',':
-       case '-':
-       case '.':
-       case '/':
+       case '"':       goto yy79;
        case '0':
        case '1':
        case '2':
@@ -5434,24 +5532,95 @@ yy206:
        case '7':
        case '8':
        case '9':
-       case ':':
-       case ';':
-       case '<':
-       case '=':
-       case '>':
-       case '?':
-       case '@':
        case 'A':
        case 'B':
        case 'C':
        case 'D':
        case 'E':
        case 'F':
-       case 'G':
-       case 'H':
-       case 'I':
-       case 'J':
-       case 'K':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':       goto yy296;
+       default:        goto yy83;
+       }
+yy205:
+       YYDEBUG(205, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 's':       goto yy298;
+       default:        goto yy81;
+       }
+yy206:
+       YYDEBUG(206, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case 'd':       goto yy105;
+       default:        goto yy81;
+       }
+yy207:
+       YYDEBUG(207, YYPEEK ());
+       YYSKIP ();
+yy208:
+       YYDEBUG(208, YYPEEK ());
+#line 366 "../ada.re2c"
+       {*id =  106; continue;}
+#line 5573 "../ada_re2c.c"
+yy209:
+       YYDEBUG(209, YYPEEK ());
+       yyaccept = 13;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       switch (yych) {
+       case ' ':
+       case '!':
+       case '"':
+       case '#':
+       case '$':
+       case '%':
+       case '&':
+       case '\'':
+       case '(':
+       case ')':
+       case '*':
+       case '+':
+       case ',':
+       case '-':
+       case '.':
+       case '/':
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case ':':
+       case ';':
+       case '<':
+       case '=':
+       case '>':
+       case '?':
+       case '@':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'G':
+       case 'H':
+       case 'I':
+       case 'J':
+       case 'K':
        case 'L':
        case 'M':
        case 'N':
@@ -5502,8 +5671,8 @@ yy206:
        case '|':
        case '}':
        case '~':
-       case 0x7F:      goto yy292;
-       case '[':       goto yy293;
+       case 0x7F:      goto yy299;
+       case '[':       goto yy300;
        case 0xC2:
        case 0xC3:
        case 0xC4:
@@ -5533,8 +5702,8 @@ yy206:
        case 0xDC:
        case 0xDD:
        case 0xDE:
-       case 0xDF:      goto yy294;
-       case 0xE0:      goto yy295;
+       case 0xDF:      goto yy301;
+       case 0xE0:      goto yy302;
        case 0xE1:
        case 0xE2:
        case 0xE3:
@@ -5549,24 +5718,24 @@ yy206:
        case 0xEC:
        case 0xED:
        case 0xEE:
-       case 0xEF:      goto yy296;
-       case 0xF0:      goto yy297;
+       case 0xEF:      goto yy303;
+       case 0xF0:      goto yy304;
        case 0xF1:
        case 0xF2:
-       case 0xF3:      goto yy298;
-       case 0xF4:      goto yy299;
-       default:        goto yy205;
+       case 0xF3:      goto yy305;
+       case 0xF4:      goto yy306;
+       default:        goto yy208;
        }
-yy207:
-       YYDEBUG(207, YYPEEK ());
+yy210:
+       YYDEBUG(210, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
        case '"':       goto yy81;
-       default:        goto yy301;
+       default:        goto yy308;
        }
-yy208:
-       YYDEBUG(208, YYPEEK ());
+yy211:
+       YYDEBUG(211, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5633,11 +5802,11 @@ yy208:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy103;
+       case 0xBF:      goto yy105;
        default:        goto yy81;
        }
-yy209:
-       YYDEBUG(209, YYPEEK ());
+yy212:
+       YYDEBUG(212, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5672,11 +5841,11 @@ yy209:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy208;
+       case 0xBF:      goto yy211;
        default:        goto yy81;
        }
-yy210:
-       YYDEBUG(210, YYPEEK ());
+yy213:
+       YYDEBUG(213, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5743,11 +5912,11 @@ yy210:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy208;
+       case 0xBF:      goto yy211;
        default:        goto yy81;
        }
-yy211:
-       YYDEBUG(211, YYPEEK ());
+yy214:
+       YYDEBUG(214, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5798,11 +5967,11 @@ yy211:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy210;
+       case 0xBF:      goto yy213;
        default:        goto yy81;
        }
-yy212:
-       YYDEBUG(212, YYPEEK ());
+yy215:
+       YYDEBUG(215, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5869,11 +6038,11 @@ yy212:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy210;
+       case 0xBF:      goto yy213;
        default:        goto yy81;
        }
-yy213:
-       YYDEBUG(213, YYPEEK ());
+yy216:
+       YYDEBUG(216, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -5892,17 +6061,17 @@ yy213:
        case 0x8C:
        case 0x8D:
        case 0x8E:
-       case 0x8F:      goto yy210;
+       case 0x8F:      goto yy213;
        default:        goto yy81;
        }
-yy214:
-       YYDEBUG(214, YYPEEK ());
+yy217:
+       YYDEBUG(217, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
-yy215:
-       YYDEBUG(215, YYPEEK ());
+yy218:
+       YYDEBUG(218, YYPEEK ());
        switch (yych) {
-       case '#':       goto yy302;
+       case '#':       goto yy309;
        case '-':
        case '.':
        case '0':
@@ -5927,22 +6096,47 @@ yy215:
        case 'c':
        case 'd':
        case 'e':
-       case 'f':       goto yy214;
+       case 'f':       goto yy217;
        default:        goto yy81;
        }
-yy216:
-       YYDEBUG(216, YYPEEK ());
+yy219:
+       YYDEBUG(219, YYPEEK ());
+       yyaccept = 2;
+       YYSKIP ();
+       YYBACKUP ();
+       yych = YYPEEK ();
+       YYDEBUG(220, YYPEEK ());
+       switch (yych) {
+       case '-':
+       case '.':
+       case 'E':
+       case '_':
+       case 'e':       goto yy113;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':       goto yy219;
+       default:        goto yy36;
+       }
+yy221:
+       YYDEBUG(221, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy303;
+       case 'r':       goto yy310;
        default:        goto yy56;
        }
-yy217:
-       YYDEBUG(217, YYPEEK ());
+yy222:
+       YYDEBUG(222, YYPEEK ());
        yyaccept = 14;
        YYSKIP ();
        YYBACKUP ();
@@ -6062,38 +6256,38 @@ yy217:
        case 0xF3:
        case 0xF4:      goto yy56;
        case 'T':
-       case 't':       goto yy304;
-       default:        goto yy218;
+       case 't':       goto yy311;
+       default:        goto yy223;
        }
-yy218:
-       YYDEBUG(218, YYPEEK ());
-#line 260 "../ada.re2c"
+yy223:
+       YYDEBUG(223, YYPEEK ());
+#line 263 "../ada.re2c"
        {*id =  3; continue;}
-#line 6073 "../ada_re2c.c"
-yy219:
-       YYDEBUG(219, YYPEEK ());
+#line 6267 "../ada_re2c.c"
+yy224:
+       YYDEBUG(224, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy305;
+       case 'e':       goto yy312;
        default:        goto yy56;
        }
-yy220:
-       YYDEBUG(220, YYPEEK ());
+yy225:
+       YYDEBUG(225, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy306;
+       case 'a':       goto yy313;
        default:        goto yy56;
        }
-yy221:
-       YYDEBUG(221, YYPEEK ());
+yy226:
+       YYDEBUG(226, YYPEEK ());
        yyaccept = 15;
        YYSKIP ();
        YYBACKUP ();
@@ -6214,15 +6408,15 @@ yy221:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy222;
+       default:        goto yy227;
        }
-yy222:
-       YYDEBUG(222, YYPEEK ());
-#line 266 "../ada.re2c"
+yy227:
+       YYDEBUG(227, YYPEEK ());
+#line 269 "../ada.re2c"
        {*id =  9; continue;}
-#line 6224 "../ada_re2c.c"
-yy223:
-       YYDEBUG(223, YYPEEK ());
+#line 6418 "../ada_re2c.c"
+yy228:
+       YYDEBUG(228, YYPEEK ());
        yyaccept = 16;
        YYSKIP ();
        YYBACKUP ();
@@ -6343,118 +6537,118 @@ yy223:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy224;
+       default:        goto yy229;
        }
-yy224:
-       YYDEBUG(224, YYPEEK ());
-#line 267 "../ada.re2c"
+yy229:
+       YYDEBUG(229, YYPEEK ());
+#line 270 "../ada.re2c"
        {*id =  10; continue;}
-#line 6353 "../ada_re2c.c"
-yy225:
-       YYDEBUG(225, YYPEEK ());
+#line 6547 "../ada_re2c.c"
+yy230:
+       YYDEBUG(230, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy307;
+       case 'a':       goto yy314;
        default:        goto yy56;
        }
-yy226:
-       YYDEBUG(226, YYPEEK ());
+yy231:
+       YYDEBUG(231, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy308;
+       case 'i':       goto yy315;
        default:        goto yy56;
        }
-yy227:
-       YYDEBUG(227, YYPEEK ());
+yy232:
+       YYDEBUG(232, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'Y':
-       case 'y':       goto yy309;
+       case 'y':       goto yy316;
        default:        goto yy56;
        }
-yy228:
-       YYDEBUG(228, YYPEEK ());
+yy233:
+       YYDEBUG(233, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy311;
+       case 'e':       goto yy318;
        default:        goto yy56;
        }
-yy229:
-       YYDEBUG(229, YYPEEK ());
+yy234:
+       YYDEBUG(234, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'S':
-       case 's':       goto yy313;
+       case 's':       goto yy320;
        default:        goto yy56;
        }
-yy230:
-       YYDEBUG(230, YYPEEK ());
+yy235:
+       YYDEBUG(235, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'L':
-       case 'l':       goto yy314;
+       case 'l':       goto yy321;
        default:        goto yy56;
        }
-yy231:
-       YYDEBUG(231, YYPEEK ());
+yy236:
+       YYDEBUG(236, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy315;
+       case 'a':       goto yy322;
        case 'T':
-       case 't':       goto yy316;
+       case 't':       goto yy323;
        default:        goto yy56;
        }
-yy232:
-       YYDEBUG(232, YYPEEK ());
+yy237:
+       YYDEBUG(237, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy317;
+       case 'i':       goto yy324;
        default:        goto yy56;
        }
-yy233:
-       YYDEBUG(233, YYPEEK ());
+yy238:
+       YYDEBUG(238, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy318;
+       case 'e':       goto yy325;
        case 'I':
-       case 'i':       goto yy320;
+       case 'i':       goto yy327;
        default:        goto yy56;
        }
-yy234:
-       YYDEBUG(234, YYPEEK ());
+yy239:
+       YYDEBUG(239, YYPEEK ());
        yyaccept = 17;
        YYSKIP ();
        YYBACKUP ();
@@ -6575,48 +6769,48 @@ yy234:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy235;
+       default:        goto yy240;
        }
-yy235:
-       YYDEBUG(235, YYPEEK ());
-#line 281 "../ada.re2c"
+yy240:
+       YYDEBUG(240, YYPEEK ());
+#line 284 "../ada.re2c"
        {*id =  24; continue;}
-#line 6585 "../ada_re2c.c"
-yy236:
-       YYDEBUG(236, YYPEEK ());
+#line 6779 "../ada_re2c.c"
+yy241:
+       YYDEBUG(241, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy321;
+       case 'r':       goto yy328;
        default:        goto yy56;
        }
-yy237:
-       YYDEBUG(237, YYPEEK ());
+yy242:
+       YYDEBUG(242, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy322;
+       case 'e':       goto yy329;
        default:        goto yy56;
        }
-yy238:
-       YYDEBUG(238, YYPEEK ());
+yy243:
+       YYDEBUG(243, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy323;
+       case 't':       goto yy330;
        default:        goto yy56;
        }
-yy239:
-       YYDEBUG(239, YYPEEK ());
+yy244:
+       YYDEBUG(244, YYPEEK ());
        yyaccept = 18;
        YYSKIP ();
        YYBACKUP ();
@@ -6737,81 +6931,81 @@ yy239:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy240;
+       default:        goto yy245;
        }
-yy240:
-       YYDEBUG(240, YYPEEK ());
-#line 285 "../ada.re2c"
+yy245:
+       YYDEBUG(245, YYPEEK ());
+#line 288 "../ada.re2c"
        {*id =  28; continue;}
-#line 6747 "../ada_re2c.c"
-yy241:
-       YYDEBUG(241, YYPEEK ());
+#line 6941 "../ada_re2c.c"
+yy246:
+       YYDEBUG(246, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy325;
+       case 'c':       goto yy332;
        default:        goto yy56;
        }
-yy242:
-       YYDEBUG(242, YYPEEK ());
+yy247:
+       YYDEBUG(247, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy326;
+       case 'e':       goto yy333;
        default:        goto yy56;
        }
-yy243:
-       YYDEBUG(243, YYPEEK ());
+yy248:
+       YYDEBUG(248, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'O':
-       case 'o':       goto yy327;
+       case 'o':       goto yy334;
        default:        goto yy56;
        }
-yy244:
-       YYDEBUG(244, YYPEEK ());
+yy249:
+       YYDEBUG(249, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy329;
+       case 'e':       goto yy336;
        default:        goto yy56;
        }
-yy245:
-       YYDEBUG(245, YYPEEK ());
+yy250:
+       YYDEBUG(250, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy330;
+       case 'i':       goto yy337;
        default:        goto yy56;
        }
-yy246:
-       YYDEBUG(246, YYPEEK ());
+yy251:
+       YYDEBUG(251, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'P':
-       case 'p':       goto yy331;
+       case 'p':       goto yy338;
        default:        goto yy56;
        }
-yy247:
-       YYDEBUG(247, YYPEEK ());
+yy252:
+       YYDEBUG(252, YYPEEK ());
        yyaccept = 19;
        YYSKIP ();
        YYBACKUP ();
@@ -6932,15 +7126,15 @@ yy247:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy248;
+       default:        goto yy253;
        }
-yy248:
-       YYDEBUG(248, YYPEEK ());
-#line 295 "../ada.re2c"
+yy253:
+       YYDEBUG(253, YYPEEK ());
+#line 298 "../ada.re2c"
        {*id =  38; continue;}
-#line 6942 "../ada_re2c.c"
-yy249:
-       YYDEBUG(249, YYPEEK ());
+#line 7136 "../ada_re2c.c"
+yy254:
+       YYDEBUG(254, YYPEEK ());
        yyaccept = 20;
        YYSKIP ();
        YYBACKUP ();
@@ -7061,15 +7255,15 @@ yy249:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy250;
+       default:        goto yy255;
        }
-yy250:
-       YYDEBUG(250, YYPEEK ());
-#line 296 "../ada.re2c"
+yy255:
+       YYDEBUG(255, YYPEEK ());
+#line 299 "../ada.re2c"
        {*id =  39; continue;}
-#line 7071 "../ada_re2c.c"
-yy251:
-       YYDEBUG(251, YYPEEK ());
+#line 7265 "../ada_re2c.c"
+yy256:
+       YYDEBUG(256, YYPEEK ());
        yyaccept = 21;
        YYSKIP ();
        YYBACKUP ();
@@ -7190,37 +7384,37 @@ yy251:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy252;
+       default:        goto yy257;
        }
-yy252:
-       YYDEBUG(252, YYPEEK ());
-#line 297 "../ada.re2c"
+yy257:
+       YYDEBUG(257, YYPEEK ());
+#line 300 "../ada.re2c"
        {*id =  40; continue;}
-#line 7200 "../ada_re2c.c"
-yy253:
-       YYDEBUG(253, YYPEEK ());
+#line 7394 "../ada_re2c.c"
+yy258:
+       YYDEBUG(258, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'L':
-       case 'l':       goto yy333;
+       case 'l':       goto yy340;
        default:        goto yy56;
        }
-yy254:
-       YYDEBUG(254, YYPEEK ());
+yy259:
+       YYDEBUG(259, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy335;
+       case 'e':       goto yy342;
        default:        goto yy56;
        }
-yy255:
-       YYDEBUG(255, YYPEEK ());
+yy260:
+       YYDEBUG(260, YYPEEK ());
        yyaccept = 22;
        YYSKIP ();
        YYBACKUP ();
@@ -7341,105 +7535,105 @@ yy255:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy256;
+       default:        goto yy261;
        }
-yy256:
-       YYDEBUG(256, YYPEEK ());
-#line 302 "../ada.re2c"
+yy261:
+       YYDEBUG(261, YYPEEK ());
+#line 305 "../ada.re2c"
        {*id =  45; continue;}
-#line 7351 "../ada_re2c.c"
-yy257:
-       YYDEBUG(257, YYPEEK ());
+#line 7545 "../ada_re2c.c"
+yy262:
+       YYDEBUG(262, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy336;
+       case 'r':       goto yy343;
        default:        goto yy56;
        }
-yy258:
-       YYDEBUG(258, YYPEEK ());
+yy263:
+       YYDEBUG(263, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'K':
-       case 'k':       goto yy337;
+       case 'k':       goto yy344;
        default:        goto yy56;
        }
-yy259:
-       YYDEBUG(259, YYPEEK ());
+yy264:
+       YYDEBUG(264, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'G':
-       case 'g':       goto yy338;
+       case 'g':       goto yy345;
        default:        goto yy56;
        }
-yy260:
-       YYDEBUG(260, YYPEEK ());
+yy265:
+       YYDEBUG(265, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'V':
-       case 'v':       goto yy339;
+       case 'v':       goto yy346;
        default:        goto yy56;
        }
-yy261:
-       YYDEBUG(261, YYPEEK ());
+yy266:
+       YYDEBUG(266, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy340;
+       case 'c':       goto yy347;
        case 'T':
-       case 't':       goto yy341;
+       case 't':       goto yy348;
        default:        goto yy56;
        }
-yy262:
-       YYDEBUG(262, YYPEEK ());
+yy267:
+       YYDEBUG(267, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'S':
-       case 's':       goto yy342;
+       case 's':       goto yy349;
        default:        goto yy56;
        }
-yy263:
-       YYDEBUG(263, YYPEEK ());
+yy268:
+       YYDEBUG(268, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'G':
-       case 'g':       goto yy343;
+       case 'g':       goto yy350;
        default:        goto yy56;
        }
-yy264:
-       YYDEBUG(264, YYPEEK ());
+yy269:
+       YYDEBUG(269, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'O':
-       case 'o':       goto yy344;
+       case 'o':       goto yy351;
        default:        goto yy56;
        }
-yy265:
-       YYDEBUG(265, YYPEEK ());
+yy270:
+       YYDEBUG(270, YYPEEK ());
        yyaccept = 23;
        YYSKIP ();
        YYBACKUP ();
@@ -7560,180 +7754,180 @@ yy265:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy266;
+       default:        goto yy271;
        }
-yy266:
-       YYDEBUG(266, YYPEEK ());
-#line 312 "../ada.re2c"
+yy271:
+       YYDEBUG(271, YYPEEK ());
+#line 315 "../ada.re2c"
        {*id =  55; continue;}
-#line 7570 "../ada_re2c.c"
-yy267:
-       YYDEBUG(267, YYPEEK ());
+#line 7764 "../ada_re2c.c"
+yy272:
+       YYDEBUG(272, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy345;
+       case 'a':       goto yy352;
        default:        goto yy56;
        }
-yy268:
-       YYDEBUG(268, YYPEEK ());
+yy273:
+       YYDEBUG(273, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'U':
-       case 'u':       goto yy346;
+       case 'u':       goto yy353;
        default:        goto yy56;
        }
-yy269:
-       YYDEBUG(269, YYPEEK ());
+yy274:
+       YYDEBUG(274, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'U':
-       case 'u':       goto yy347;
+       case 'u':       goto yy354;
        default:        goto yy56;
        }
-yy270:
-       YYDEBUG(270, YYPEEK ());
+yy275:
+       YYDEBUG(275, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy348;
+       case 'e':       goto yy355;
        default:        goto yy56;
        }
-yy271:
-       YYDEBUG(271, YYPEEK ());
+yy276:
+       YYDEBUG(276, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy349;
+       case 'e':       goto yy356;
        default:        goto yy56;
        }
-yy272:
-       YYDEBUG(272, YYPEEK ());
+yy277:
+       YYDEBUG(277, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy350;
+       case 'a':       goto yy357;
        default:        goto yy56;
        }
-yy273:
-       YYDEBUG(273, YYPEEK ());
+yy278:
+       YYDEBUG(278, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy351;
+       case 'e':       goto yy358;
        default:        goto yy56;
        }
-yy274:
-       YYDEBUG(274, YYPEEK ());
+yy279:
+       YYDEBUG(279, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy353;
+       case 't':       goto yy360;
        default:        goto yy56;
        }
-yy275:
-       YYDEBUG(275, YYPEEK ());
+yy280:
+       YYDEBUG(280, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy354;
+       case 'c':       goto yy361;
        default:        goto yy56;
        }
-yy276:
-       YYDEBUG(276, YYPEEK ());
+yy281:
+       YYDEBUG(281, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'G':
-       case 'g':       goto yy355;
+       case 'g':       goto yy362;
        default:        goto yy56;
        }
-yy277:
-       YYDEBUG(277, YYPEEK ());
+yy282:
+       YYDEBUG(282, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'K':
-       case 'k':       goto yy356;
+       case 'k':       goto yy363;
        default:        goto yy56;
        }
-yy278:
-       YYDEBUG(278, YYPEEK ());
+yy283:
+       YYDEBUG(283, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'M':
-       case 'm':       goto yy358;
+       case 'm':       goto yy365;
        default:        goto yy56;
        }
-yy279:
-       YYDEBUG(279, YYPEEK ());
+yy284:
+       YYDEBUG(284, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy359;
+       case 'n':       goto yy366;
        default:        goto yy56;
        }
-yy280:
-       YYDEBUG(280, YYPEEK ());
+yy285:
+       YYDEBUG(285, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy361;
+       case 'e':       goto yy368;
        default:        goto yy56;
        }
-yy281:
-       YYDEBUG(281, YYPEEK ());
+yy286:
+       YYDEBUG(286, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy363;
+       case 'i':       goto yy370;
        default:        goto yy56;
        }
-yy282:
-       YYDEBUG(282, YYPEEK ());
+yy287:
+       YYDEBUG(287, YYPEEK ());
        yyaccept = 24;
        YYSKIP ();
        YYBACKUP ();
@@ -7854,48 +8048,48 @@ yy282:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy283;
+       default:        goto yy288;
        }
-yy283:
-       YYDEBUG(283, YYPEEK ());
-#line 328 "../ada.re2c"
+yy288:
+       YYDEBUG(288, YYPEEK ());
+#line 331 "../ada.re2c"
        {*id =  71; continue;}
-#line 7864 "../ada_re2c.c"
-yy284:
-       YYDEBUG(284, YYPEEK ());
+#line 8058 "../ada_re2c.c"
+yy289:
+       YYDEBUG(289, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy364;
+       case 'n':       goto yy371;
        default:        goto yy56;
        }
-yy285:
-       YYDEBUG(285, YYPEEK ());
+yy290:
+       YYDEBUG(290, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'L':
-       case 'l':       goto yy366;
+       case 'l':       goto yy373;
        default:        goto yy56;
        }
-yy286:
-       YYDEBUG(286, YYPEEK ());
+yy291:
+       YYDEBUG(291, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'H':
-       case 'h':       goto yy367;
+       case 'h':       goto yy374;
        default:        goto yy56;
        }
-yy287:
-       YYDEBUG(287, YYPEEK ());
+yy292:
+       YYDEBUG(292, YYPEEK ());
        yyaccept = 25;
        YYSKIP ();
        YYBACKUP ();
@@ -8016,20 +8210,20 @@ yy287:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy288;
+       default:        goto yy293;
        }
-yy288:
-       YYDEBUG(288, YYPEEK ());
-#line 332 "../ada.re2c"
+yy293:
+       YYDEBUG(293, YYPEEK ());
+#line 335 "../ada.re2c"
        {*id =  75; continue;}
-#line 8026 "../ada_re2c.c"
-yy289:
-       YYDEBUG(289, YYPEEK ());
+#line 8220 "../ada_re2c.c"
+yy294:
+       YYDEBUG(294, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
-       YYDEBUG(290, YYPEEK ());
+       YYDEBUG(295, YYPEEK ());
        switch (yych) {
-       case '"':       goto yy369;
+       case '"':       goto yy376;
        case '0':
        case '1':
        case '2':
@@ -8051,37 +8245,68 @@ yy289:
        case 'c':
        case 'd':
        case 'e':
-       case 'f':       goto yy289;
+       case 'f':       goto yy294;
        default:        goto yy81;
        }
-yy291:
-       YYDEBUG(291, YYPEEK ());
+yy296:
+       YYDEBUG(296, YYPEEK ());
+       YYSKIP ();
+       yych = YYPEEK ();
+       YYDEBUG(297, YYPEEK ());
+       switch (yych) {
+       case '"':       goto yy377;
+       case '0':
+       case '1':
+       case '2':
+       case '3':
+       case '4':
+       case '5':
+       case '6':
+       case '7':
+       case '8':
+       case '9':
+       case 'A':
+       case 'B':
+       case 'C':
+       case 'D':
+       case 'E':
+       case 'F':
+       case 'a':
+       case 'b':
+       case 'c':
+       case 'd':
+       case 'e':
+       case 'f':       goto yy296;
+       default:        goto yy81;
+       }
+yy298:
+       YYDEBUG(298, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case 'e':       goto yy103;
-       case 'i':       goto yy91;
+       case 'e':       goto yy105;
+       case 'i':       goto yy93;
        default:        goto yy81;
        }
-yy292:
-       YYDEBUG(292, YYPEEK ());
+yy299:
+       YYDEBUG(299, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '\'':      goto yy370;
+       case '\'':      goto yy378;
        default:        goto yy81;
        }
-yy293:
-       YYDEBUG(293, YYPEEK ());
+yy300:
+       YYDEBUG(300, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case '"':       goto yy372;
-       case '\'':      goto yy370;
+       case '"':       goto yy380;
+       case '\'':      goto yy378;
        default:        goto yy81;
        }
-yy294:
-       YYDEBUG(294, YYPEEK ());
+yy301:
+       YYDEBUG(301, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -8148,11 +8373,11 @@ yy294:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy292;
+       case 0xBF:      goto yy299;
        default:        goto yy81;
        }
-yy295:
-       YYDEBUG(295, YYPEEK ());
+yy302:
+       YYDEBUG(302, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -8187,11 +8412,11 @@ yy295:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy294;
+       case 0xBF:      goto yy301;
        default:        goto yy81;
        }
-yy296:
-       YYDEBUG(296, YYPEEK ());
+yy303:
+       YYDEBUG(303, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -8258,11 +8483,11 @@ yy296:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy294;
+       case 0xBF:      goto yy301;
        default:        goto yy81;
        }
-yy297:
-       YYDEBUG(297, YYPEEK ());
+yy304:
+       YYDEBUG(304, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -8313,11 +8538,11 @@ yy297:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy296;
+       case 0xBF:      goto yy303;
        default:        goto yy81;
        }
-yy298:
-       YYDEBUG(298, YYPEEK ());
+yy305:
+       YYDEBUG(305, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -8384,11 +8609,11 @@ yy298:
        case 0xBC:
        case 0xBD:
        case 0xBE:
-       case 0xBF:      goto yy296;
+       case 0xBF:      goto yy303;
        default:        goto yy81;
        }
-yy299:
-       YYDEBUG(299, YYPEEK ());
+yy306:
+       YYDEBUG(306, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
@@ -8407,17 +8632,17 @@ yy299:
        case 0x8C:
        case 0x8D:
        case 0x8E:
-       case 0x8F:      goto yy296;
+       case 0x8F:      goto yy303;
        default:        goto yy81;
        }
-yy300:
-       YYDEBUG(300, YYPEEK ());
+yy307:
+       YYDEBUG(307, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
-yy301:
-       YYDEBUG(301, YYPEEK ());
+yy308:
+       YYDEBUG(308, YYPEEK ());
        switch (yych) {
-       case '"':       goto yy373;
+       case '"':       goto yy381;
        case '0':
        case '1':
        case '2':
@@ -8439,83 +8664,83 @@ yy301:
        case 'c':
        case 'd':
        case 'e':
-       case 'f':       goto yy300;
+       case 'f':       goto yy307;
        default:        goto yy81;
        }
-yy302:
-       YYDEBUG(302, YYPEEK ());
+yy309:
+       YYDEBUG(309, YYPEEK ());
        YYSKIP ();
        goto yy36;
-yy303:
-       YYDEBUG(303, YYPEEK ());
+yy310:
+       YYDEBUG(310, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy374;
+       case 't':       goto yy382;
        default:        goto yy56;
        }
-yy304:
-       YYDEBUG(304, YYPEEK ());
+yy311:
+       YYDEBUG(311, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy376;
+       case 'r':       goto yy384;
        default:        goto yy56;
        }
-yy305:
-       YYDEBUG(305, YYPEEK ());
+yy312:
+       YYDEBUG(312, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'P':
-       case 'p':       goto yy377;
+       case 'p':       goto yy385;
        case 'S':
-       case 's':       goto yy378;
+       case 's':       goto yy386;
        default:        goto yy56;
        }
-yy306:
-       YYDEBUG(306, YYPEEK ());
+yy313:
+       YYDEBUG(313, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'S':
-       case 's':       goto yy379;
+       case 's':       goto yy387;
        default:        goto yy56;
        }
-yy307:
-       YYDEBUG(307, YYPEEK ());
+yy314:
+       YYDEBUG(314, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'Y':
-       case 'y':       goto yy380;
+       case 'y':       goto yy388;
        default:        goto yy56;
        }
-yy308:
-       YYDEBUG(308, YYPEEK ());
+yy315:
+       YYDEBUG(315, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy382;
+       case 'n':       goto yy390;
        default:        goto yy56;
        }
-yy309:
-       YYDEBUG(309, YYPEEK ());
+yy316:
+       YYDEBUG(316, YYPEEK ());
        yyaccept = 26;
        YYSKIP ();
        YYBACKUP ();
@@ -8636,15 +8861,15 @@ yy309:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy310;
+       default:        goto yy317;
        }
-yy310:
-       YYDEBUG(310, YYPEEK ());
-#line 271 "../ada.re2c"
+yy317:
+       YYDEBUG(317, YYPEEK ());
+#line 274 "../ada.re2c"
        {*id =  14; continue;}
-#line 8646 "../ada_re2c.c"
-yy311:
-       YYDEBUG(311, YYPEEK ());
+#line 8871 "../ada_re2c.c"
+yy318:
+       YYDEBUG(318, YYPEEK ());
        yyaccept = 27;
        YYSKIP ();
        YYBACKUP ();
@@ -8765,70 +8990,70 @@ yy311:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy312;
+       default:        goto yy319;
        }
-yy312:
-       YYDEBUG(312, YYPEEK ());
-#line 272 "../ada.re2c"
+yy319:
+       YYDEBUG(319, YYPEEK ());
+#line 275 "../ada.re2c"
        {*id =  15; continue;}
-#line 8775 "../ada_re2c.c"
-yy313:
-       YYDEBUG(313, YYPEEK ());
+#line 9000 "../ada_re2c.c"
+yy320:
+       YYDEBUG(320, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy384;
+       case 't':       goto yy392;
        default:        goto yy56;
        }
-yy314:
-       YYDEBUG(314, YYPEEK ());
+yy321:
+       YYDEBUG(321, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy385;
+       case 'a':       goto yy393;
        default:        goto yy56;
        }
-yy315:
-       YYDEBUG(315, YYPEEK ());
+yy322:
+       YYDEBUG(322, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'Y':
-       case 'y':       goto yy386;
+       case 'y':       goto yy394;
        default:        goto yy56;
        }
-yy316:
-       YYDEBUG(316, YYPEEK ());
+yy323:
+       YYDEBUG(323, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy388;
+       case 'a':       goto yy396;
        default:        goto yy56;
        }
-yy317:
-       YYDEBUG(317, YYPEEK ());
+yy324:
+       YYDEBUG(324, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy390;
+       case 't':       goto yy398;
        default:        goto yy56;
        }
-yy318:
-       YYDEBUG(318, YYPEEK ());
+yy325:
+       YYDEBUG(325, YYPEEK ());
        yyaccept = 28;
        YYSKIP ();
        YYBACKUP ();
@@ -8949,48 +9174,48 @@ yy318:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy319;
+       default:        goto yy326;
        }
-yy319:
-       YYDEBUG(319, YYPEEK ());
-#line 279 "../ada.re2c"
+yy326:
+       YYDEBUG(326, YYPEEK ());
+#line 282 "../ada.re2c"
        {*id =  22; continue;}
-#line 8959 "../ada_re2c.c"
-yy320:
-       YYDEBUG(320, YYPEEK ());
+#line 9184 "../ada_re2c.c"
+yy327:
+       YYDEBUG(327, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'F':
-       case 'f':       goto yy391;
+       case 'f':       goto yy399;
        default:        goto yy56;
        }
-yy321:
-       YYDEBUG(321, YYPEEK ());
+yy328:
+       YYDEBUG(328, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'Y':
-       case 'y':       goto yy393;
+       case 'y':       goto yy401;
        default:        goto yy56;
        }
-yy322:
-       YYDEBUG(322, YYPEEK ());
+yy329:
+       YYDEBUG(329, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'P':
-       case 'p':       goto yy395;
+       case 'p':       goto yy403;
        default:        goto yy56;
        }
-yy323:
-       YYDEBUG(323, YYPEEK ());
+yy330:
+       YYDEBUG(330, YYPEEK ());
        yyaccept = 29;
        YYSKIP ();
        YYBACKUP ();
@@ -9111,37 +9336,37 @@ yy323:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy324;
+       default:        goto yy331;
        }
-yy324:
-       YYDEBUG(324, YYPEEK ());
-#line 284 "../ada.re2c"
+yy331:
+       YYDEBUG(331, YYPEEK ());
+#line 287 "../ada.re2c"
        {*id =  27; continue;}
-#line 9121 "../ada_re2c.c"
-yy325:
-       YYDEBUG(325, YYPEEK ());
+#line 9346 "../ada_re2c.c"
+yy332:
+       YYDEBUG(332, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy396;
+       case 't':       goto yy404;
        default:        goto yy56;
        }
-yy326:
-       YYDEBUG(326, YYPEEK ());
+yy333:
+       YYDEBUG(333, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy397;
+       case 'r':       goto yy405;
        default:        goto yy56;
        }
-yy327:
-       YYDEBUG(327, YYPEEK ());
+yy334:
+       YYDEBUG(334, YYPEEK ());
        yyaccept = 30;
        YYSKIP ();
        YYBACKUP ();
@@ -9262,37 +9487,37 @@ yy327:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy328;
+       default:        goto yy335;
        }
-yy328:
-       YYDEBUG(328, YYPEEK ());
-#line 288 "../ada.re2c"
+yy335:
+       YYDEBUG(335, YYPEEK ());
+#line 291 "../ada.re2c"
        {*id =  31; continue;}
-#line 9272 "../ada_re2c.c"
-yy329:
-       YYDEBUG(329, YYPEEK ());
+#line 9497 "../ada_re2c.c"
+yy336:
+       YYDEBUG(336, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy398;
+       case 'r':       goto yy406;
        default:        goto yy56;
        }
-yy330:
-       YYDEBUG(330, YYPEEK ());
+yy337:
+       YYDEBUG(337, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy399;
+       case 't':       goto yy407;
        default:        goto yy56;
        }
-yy331:
-       YYDEBUG(331, YYPEEK ());
+yy338:
+       YYDEBUG(338, YYPEEK ());
        yyaccept = 31;
        YYSKIP ();
        YYBACKUP ();
@@ -9413,15 +9638,15 @@ yy331:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy332;
+       default:        goto yy339;
        }
-yy332:
-       YYDEBUG(332, YYPEEK ());
-#line 294 "../ada.re2c"
+yy339:
+       YYDEBUG(339, YYPEEK ());
+#line 297 "../ada.re2c"
        {*id =  37; continue;}
-#line 9423 "../ada_re2c.c"
-yy333:
-       YYDEBUG(333, YYPEEK ());
+#line 9648 "../ada_re2c.c"
+yy340:
+       YYDEBUG(340, YYPEEK ());
        yyaccept = 32;
        YYSKIP ();
        YYBACKUP ();
@@ -9542,191 +9767,191 @@ yy333:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy334;
+       default:        goto yy341;
        }
-yy334:
-       YYDEBUG(334, YYPEEK ());
-#line 298 "../ada.re2c"
+yy341:
+       YYDEBUG(341, YYPEEK ());
+#line 301 "../ada.re2c"
        {*id =  41; continue;}
-#line 9552 "../ada_re2c.c"
-yy335:
-       YYDEBUG(335, YYPEEK ());
+#line 9777 "../ada_re2c.c"
+yy342:
+       YYDEBUG(342, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy400;
+       case 'r':       goto yy408;
        default:        goto yy56;
        }
-yy336:
-       YYDEBUG(336, YYPEEK ());
+yy343:
+       YYDEBUG(343, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy401;
+       case 'r':       goto yy409;
        default:        goto yy56;
        }
-yy337:
-       YYDEBUG(337, YYPEEK ());
+yy344:
+       YYDEBUG(344, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy402;
+       case 'a':       goto yy410;
        default:        goto yy56;
        }
-yy338:
-       YYDEBUG(338, YYPEEK ());
+yy345:
+       YYDEBUG(345, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'M':
-       case 'm':       goto yy403;
+       case 'm':       goto yy411;
        default:        goto yy56;
        }
-yy339:
-       YYDEBUG(339, YYPEEK ());
+yy346:
+       YYDEBUG(346, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy404;
+       case 'a':       goto yy412;
        default:        goto yy56;
        }
-yy340:
-       YYDEBUG(340, YYPEEK ());
+yy347:
+       YYDEBUG(347, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy405;
+       case 'e':       goto yy413;
        default:        goto yy56;
        }
-yy341:
-       YYDEBUG(341, YYPEEK ());
+yy348:
+       YYDEBUG(348, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy406;
+       case 'e':       goto yy414;
        default:        goto yy56;
        }
-yy342:
-       YYDEBUG(342, YYPEEK ());
+yy349:
+       YYDEBUG(349, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy407;
+       case 'e':       goto yy415;
        default:        goto yy56;
        }
-yy343:
-       YYDEBUG(343, YYPEEK ());
+yy350:
+       YYDEBUG(350, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy409;
+       case 'e':       goto yy417;
        default:        goto yy56;
        }
-yy344:
-       YYDEBUG(344, YYPEEK ());
+yy351:
+       YYDEBUG(351, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy411;
+       case 'r':       goto yy419;
        default:        goto yy56;
        }
-yy345:
-       YYDEBUG(345, YYPEEK ());
+yy352:
+       YYDEBUG(352, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'M':
-       case 'm':       goto yy412;
+       case 'm':       goto yy420;
        default:        goto yy56;
        }
-yy346:
-       YYDEBUG(346, YYPEEK ());
+yy353:
+       YYDEBUG(353, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy413;
+       case 'e':       goto yy421;
        default:        goto yy56;
        }
-yy347:
-       YYDEBUG(347, YYPEEK ());
+yy354:
+       YYDEBUG(354, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy414;
+       case 'r':       goto yy422;
        default:        goto yy56;
        }
-yy348:
-       YYDEBUG(348, YYPEEK ());
+yy355:
+       YYDEBUG(355, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy415;
+       case 'r':       goto yy423;
        default:        goto yy56;
        }
-yy349:
-       YYDEBUG(349, YYPEEK ());
+yy356:
+       YYDEBUG(356, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy416;
+       case 'c':       goto yy424;
        default:        goto yy56;
        }
-yy350:
-       YYDEBUG(350, YYPEEK ());
+yy357:
+       YYDEBUG(357, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy417;
+       case 'r':       goto yy425;
        default:        goto yy56;
        }
-yy351:
-       YYDEBUG(351, YYPEEK ());
+yy358:
+       YYDEBUG(358, YYPEEK ());
        yyaccept = 33;
        YYSKIP ();
        YYBACKUP ();
@@ -9847,48 +10072,48 @@ yy351:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy352;
+       default:        goto yy359;
        }
-yy352:
-       YYDEBUG(352, YYPEEK ());
-#line 319 "../ada.re2c"
+yy359:
+       YYDEBUG(359, YYPEEK ());
+#line 322 "../ada.re2c"
        {*id =  62; continue;}
-#line 9857 "../ada_re2c.c"
-yy353:
-       YYDEBUG(353, YYPEEK ());
+#line 10082 "../ada_re2c.c"
+yy360:
+       YYDEBUG(360, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'Y':
-       case 'y':       goto yy418;
+       case 'y':       goto yy426;
        default:        goto yy56;
        }
-yy354:
-       YYDEBUG(354, YYPEEK ());
+yy361:
+       YYDEBUG(361, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'H':
-       case 'h':       goto yy419;
+       case 'h':       goto yy427;
        default:        goto yy56;
        }
-yy355:
-       YYDEBUG(355, YYPEEK ());
+yy362:
+       YYDEBUG(362, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy420;
+       case 'e':       goto yy428;
        default:        goto yy56;
        }
-yy356:
-       YYDEBUG(356, YYPEEK ());
+yy363:
+       YYDEBUG(363, YYPEEK ());
        yyaccept = 34;
        YYSKIP ();
        YYBACKUP ();
@@ -10009,26 +10234,26 @@ yy356:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy357;
+       default:        goto yy364;
        }
-yy357:
-       YYDEBUG(357, YYPEEK ());
-#line 323 "../ada.re2c"
+yy364:
+       YYDEBUG(364, YYPEEK ());
+#line 326 "../ada.re2c"
        {*id =  66; continue;}
-#line 10019 "../ada_re2c.c"
-yy358:
-       YYDEBUG(358, YYPEEK ());
+#line 10244 "../ada_re2c.c"
+yy365:
+       YYDEBUG(365, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy421;
+       case 'i':       goto yy429;
        default:        goto yy56;
        }
-yy359:
-       YYDEBUG(359, YYPEEK ());
+yy366:
+       YYDEBUG(366, YYPEEK ());
        yyaccept = 35;
        YYSKIP ();
        YYBACKUP ();
@@ -10149,15 +10374,15 @@ yy359:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy360;
+       default:        goto yy367;
        }
-yy360:
-       YYDEBUG(360, YYPEEK ());
-#line 325 "../ada.re2c"
+yy367:
+       YYDEBUG(367, YYPEEK ());
+#line 328 "../ada.re2c"
        {*id =  68; continue;}
-#line 10159 "../ada_re2c.c"
-yy361:
-       YYDEBUG(361, YYPEEK ());
+#line 10384 "../ada_re2c.c"
+yy368:
+       YYDEBUG(368, YYPEEK ());
        yyaccept = 36;
        YYSKIP ();
        YYBACKUP ();
@@ -10278,26 +10503,26 @@ yy361:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy362;
+       default:        goto yy369;
        }
-yy362:
-       YYDEBUG(362, YYPEEK ());
-#line 326 "../ada.re2c"
+yy369:
+       YYDEBUG(369, YYPEEK ());
+#line 329 "../ada.re2c"
        {*id =  69; continue;}
-#line 10288 "../ada_re2c.c"
-yy363:
-       YYDEBUG(363, YYPEEK ());
+#line 10513 "../ada_re2c.c"
+yy370:
+       YYDEBUG(370, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'L':
-       case 'l':       goto yy422;
+       case 'l':       goto yy430;
        default:        goto yy56;
        }
-yy364:
-       YYDEBUG(364, YYPEEK ());
+yy371:
+       YYDEBUG(371, YYPEEK ());
        yyaccept = 37;
        YYSKIP ();
        YYBACKUP ();
@@ -10418,26 +10643,26 @@ yy364:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy365;
+       default:        goto yy372;
        }
-yy365:
-       YYDEBUG(365, YYPEEK ());
-#line 329 "../ada.re2c"
+yy372:
+       YYDEBUG(372, YYPEEK ());
+#line 332 "../ada.re2c"
        {*id =  72; continue;}
-#line 10428 "../ada_re2c.c"
-yy366:
-       YYDEBUG(366, YYPEEK ());
+#line 10653 "../ada_re2c.c"
+yy373:
+       YYDEBUG(373, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy424;
+       case 'e':       goto yy432;
        default:        goto yy56;
        }
-yy367:
-       YYDEBUG(367, YYPEEK ());
+yy374:
+       YYDEBUG(374, YYPEEK ());
        yyaccept = 38;
        YYSKIP ();
        YYBACKUP ();
@@ -10558,47 +10783,55 @@ yy367:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy368;
+       default:        goto yy375;
        }
-yy368:
-       YYDEBUG(368, YYPEEK ());
-#line 331 "../ada.re2c"
+yy375:
+       YYDEBUG(375, YYPEEK ());
+#line 334 "../ada.re2c"
        {*id =  74; continue;}
-#line 10568 "../ada_re2c.c"
-yy369:
-       YYDEBUG(369, YYPEEK ());
+#line 10793 "../ada_re2c.c"
+yy376:
+       YYDEBUG(376, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
        case ']':       goto yy55;
        default:        goto yy81;
        }
-yy370:
-       YYDEBUG(370, YYPEEK ());
+yy377:
+       YYDEBUG(377, YYPEEK ());
        YYSKIP ();
-       YYDEBUG(371, YYPEEK ());
+       yych = YYPEEK ();
+       switch (yych) {
+       case ']':       goto yy79;
+       default:        goto yy81;
+       }
+yy378:
+       YYDEBUG(378, YYPEEK ());
+       YYSKIP ();
+       YYDEBUG(379, YYPEEK ());
        YYRESTORECTX ();
-#line 359 "../ada.re2c"
+#line 362 "../ada.re2c"
        {*id =  102; continue;}
-#line 10584 "../ada_re2c.c"
-yy372:
-       YYDEBUG(372, YYPEEK ());
+#line 10817 "../ada_re2c.c"
+yy380:
+       YYDEBUG(380, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
        case '"':       goto yy81;
-       default:        goto yy427;
+       default:        goto yy435;
        }
-yy373:
-       YYDEBUG(373, YYPEEK ());
+yy381:
+       YYDEBUG(381, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case ']':       goto yy92;
+       case ']':       goto yy94;
        default:        goto yy81;
        }
-yy374:
-       YYDEBUG(374, YYPEEK ());
+yy382:
+       YYDEBUG(382, YYPEEK ());
        yyaccept = 39;
        YYSKIP ();
        YYBACKUP ();
@@ -10719,59 +10952,59 @@ yy374:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy375;
+       default:        goto yy383;
        }
-yy375:
-       YYDEBUG(375, YYPEEK ());
-#line 262 "../ada.re2c"
+yy383:
+       YYDEBUG(383, YYPEEK ());
+#line 265 "../ada.re2c"
        {*id =  5; continue;}
-#line 10729 "../ada_re2c.c"
-yy376:
-       YYDEBUG(376, YYPEEK ());
+#line 10962 "../ada_re2c.c"
+yy384:
+       YYDEBUG(384, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy428;
+       case 'a':       goto yy436;
        default:        goto yy56;
        }
-yy377:
-       YYDEBUG(377, YYPEEK ());
+yy385:
+       YYDEBUG(385, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy429;
+       case 't':       goto yy437;
        default:        goto yy56;
        }
-yy378:
-       YYDEBUG(378, YYPEEK ());
+yy386:
+       YYDEBUG(386, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'S':
-       case 's':       goto yy431;
+       case 's':       goto yy439;
        default:        goto yy56;
        }
-yy379:
-       YYDEBUG(379, YYPEEK ());
+yy387:
+       YYDEBUG(387, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy433;
+       case 'e':       goto yy441;
        default:        goto yy56;
        }
-yy380:
-       YYDEBUG(380, YYPEEK ());
+yy388:
+       YYDEBUG(388, YYPEEK ());
        yyaccept = 40;
        YYSKIP ();
        YYBACKUP ();
@@ -10892,15 +11125,15 @@ yy380:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy381;
+       default:        goto yy389;
        }
-yy381:
-       YYDEBUG(381, YYPEEK ());
-#line 268 "../ada.re2c"
+yy389:
+       YYDEBUG(389, YYPEEK ());
+#line 271 "../ada.re2c"
        {*id =  11; continue;}
-#line 10902 "../ada_re2c.c"
-yy382:
-       YYDEBUG(382, YYPEEK ());
+#line 11135 "../ada_re2c.c"
+yy390:
+       YYDEBUG(390, YYPEEK ());
        yyaccept = 41;
        YYSKIP ();
        YYBACKUP ();
@@ -11021,37 +11254,37 @@ yy382:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy383;
+       default:        goto yy391;
        }
-yy383:
-       YYDEBUG(383, YYPEEK ());
-#line 270 "../ada.re2c"
+yy391:
+       YYDEBUG(391, YYPEEK ());
+#line 273 "../ada.re2c"
        {*id =  13; continue;}
-#line 11031 "../ada_re2c.c"
-yy384:
-       YYDEBUG(384, YYPEEK ());
+#line 11264 "../ada_re2c.c"
+yy392:
+       YYDEBUG(392, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy434;
+       case 'a':       goto yy442;
        default:        goto yy56;
        }
-yy385:
-       YYDEBUG(385, YYPEEK ());
+yy393:
+       YYDEBUG(393, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy435;
+       case 'r':       goto yy443;
        default:        goto yy56;
        }
-yy386:
-       YYDEBUG(386, YYPEEK ());
+yy394:
+       YYDEBUG(394, YYPEEK ());
        yyaccept = 42;
        YYSKIP ();
        YYBACKUP ();
@@ -11172,15 +11405,15 @@ yy386:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy387;
+       default:        goto yy395;
        }
-yy387:
-       YYDEBUG(387, YYPEEK ());
-#line 275 "../ada.re2c"
+yy395:
+       YYDEBUG(395, YYPEEK ());
+#line 278 "../ada.re2c"
        {*id =  18; continue;}
-#line 11182 "../ada_re2c.c"
-yy388:
-       YYDEBUG(388, YYPEEK ());
+#line 11415 "../ada_re2c.c"
+yy396:
+       YYDEBUG(396, YYPEEK ());
        yyaccept = 43;
        YYSKIP ();
        YYBACKUP ();
@@ -11301,26 +11534,26 @@ yy388:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy389;
+       default:        goto yy397;
        }
-yy389:
-       YYDEBUG(389, YYPEEK ());
-#line 276 "../ada.re2c"
+yy397:
+       YYDEBUG(397, YYPEEK ());
+#line 279 "../ada.re2c"
        {*id =  19; continue;}
-#line 11311 "../ada_re2c.c"
-yy390:
-       YYDEBUG(390, YYPEEK ());
+#line 11544 "../ada_re2c.c"
+yy398:
+       YYDEBUG(398, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'S':
-       case 's':       goto yy436;
+       case 's':       goto yy444;
        default:        goto yy56;
        }
-yy391:
-       YYDEBUG(391, YYPEEK ());
+yy399:
+       YYDEBUG(399, YYPEEK ());
        yyaccept = 44;
        YYSKIP ();
        YYBACKUP ();
@@ -11441,15 +11674,15 @@ yy391:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy392;
+       default:        goto yy400;
        }
-yy392:
-       YYDEBUG(392, YYPEEK ());
-#line 280 "../ada.re2c"
+yy400:
+       YYDEBUG(400, YYPEEK ());
+#line 283 "../ada.re2c"
        {*id =  23; continue;}
-#line 11451 "../ada_re2c.c"
-yy393:
-       YYDEBUG(393, YYPEEK ());
+#line 11684 "../ada_re2c.c"
+yy401:
+       YYDEBUG(401, YYPEEK ());
        yyaccept = 45;
        YYSKIP ();
        YYBACKUP ();
@@ -11570,147 +11803,147 @@ yy393:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy394;
+       default:        goto yy402;
        }
-yy394:
-       YYDEBUG(394, YYPEEK ());
-#line 282 "../ada.re2c"
+yy402:
+       YYDEBUG(402, YYPEEK ());
+#line 285 "../ada.re2c"
        {*id =  25; continue;}
-#line 11580 "../ada_re2c.c"
-yy395:
-       YYDEBUG(395, YYPEEK ());
+#line 11813 "../ada_re2c.c"
+yy403:
+       YYDEBUG(403, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy438;
+       case 't':       goto yy446;
        default:        goto yy56;
        }
-yy396:
-       YYDEBUG(396, YYPEEK ());
+yy404:
+       YYDEBUG(404, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy439;
+       case 'i':       goto yy447;
        default:        goto yy56;
        }
-yy397:
-       YYDEBUG(397, YYPEEK ());
+yy405:
+       YYDEBUG(405, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy440;
+       case 'i':       goto yy448;
        default:        goto yy56;
        }
-yy398:
-       YYDEBUG(398, YYPEEK ());
+yy406:
+       YYDEBUG(406, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'F':
-       case 'f':       goto yy441;
+       case 'f':       goto yy449;
        default:        goto yy56;
        }
-yy399:
-       YYDEBUG(399, YYPEEK ());
+yy407:
+       YYDEBUG(407, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy442;
+       case 'e':       goto yy450;
        default:        goto yy56;
        }
-yy400:
-       YYDEBUG(400, YYPEEK ());
+yy408:
+       YYDEBUG(408, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'S':
-       case 's':       goto yy443;
+       case 's':       goto yy451;
        default:        goto yy56;
        }
-yy401:
-       YYDEBUG(401, YYPEEK ());
+yy409:
+       YYDEBUG(409, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy445;
+       case 'i':       goto yy453;
        default:        goto yy56;
        }
-yy402:
-       YYDEBUG(402, YYPEEK ());
+yy410:
+       YYDEBUG(410, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'G':
-       case 'g':       goto yy446;
+       case 'g':       goto yy454;
        default:        goto yy56;
        }
-yy403:
-       YYDEBUG(403, YYPEEK ());
+yy411:
+       YYDEBUG(411, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy447;
+       case 'a':       goto yy455;
        default:        goto yy56;
        }
-yy404:
-       YYDEBUG(404, YYPEEK ());
+yy412:
+       YYDEBUG(412, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy449;
+       case 't':       goto yy457;
        default:        goto yy56;
        }
-yy405:
-       YYDEBUG(405, YYPEEK ());
+yy413:
+       YYDEBUG(413, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy450;
+       case 'd':       goto yy458;
        default:        goto yy56;
        }
-yy406:
-       YYDEBUG(406, YYPEEK ());
+yy414:
+       YYDEBUG(414, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy451;
+       case 'c':       goto yy459;
        default:        goto yy56;
        }
-yy407:
-       YYDEBUG(407, YYPEEK ());
+yy415:
+       YYDEBUG(415, YYPEEK ());
        yyaccept = 46;
        YYSKIP ();
        YYBACKUP ();
@@ -11831,15 +12064,15 @@ yy407:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy408;
+       default:        goto yy416;
        }
-yy408:
-       YYDEBUG(408, YYPEEK ());
-#line 309 "../ada.re2c"
+yy416:
+       YYDEBUG(416, YYPEEK ());
+#line 312 "../ada.re2c"
        {*id =  52; continue;}
-#line 11841 "../ada_re2c.c"
-yy409:
-       YYDEBUG(409, YYPEEK ());
+#line 12074 "../ada_re2c.c"
+yy417:
+       YYDEBUG(417, YYPEEK ());
        yyaccept = 47;
        YYSKIP ();
        YYBACKUP ();
@@ -11960,136 +12193,136 @@ yy409:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy410;
+       default:        goto yy418;
        }
-yy410:
-       YYDEBUG(410, YYPEEK ());
-#line 310 "../ada.re2c"
+yy418:
+       YYDEBUG(418, YYPEEK ());
+#line 313 "../ada.re2c"
        {*id =  53; continue;}
-#line 11970 "../ada_re2c.c"
-yy411:
-       YYDEBUG(411, YYPEEK ());
+#line 12203 "../ada_re2c.c"
+yy419:
+       YYDEBUG(419, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy452;
+       case 'd':       goto yy460;
        default:        goto yy56;
        }
-yy412:
-       YYDEBUG(412, YYPEEK ());
+yy420:
+       YYDEBUG(420, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy454;
+       case 'e':       goto yy462;
        default:        goto yy56;
        }
-yy413:
-       YYDEBUG(413, YYPEEK ());
+yy421:
+       YYDEBUG(421, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'U':
-       case 'u':       goto yy455;
+       case 'u':       goto yy463;
        default:        goto yy56;
        }
-yy414:
-       YYDEBUG(414, YYPEEK ());
+yy422:
+       YYDEBUG(422, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy456;
+       case 'n':       goto yy464;
        default:        goto yy56;
        }
-yy415:
-       YYDEBUG(415, YYPEEK ());
+yy423:
+       YYDEBUG(423, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'S':
-       case 's':       goto yy458;
+       case 's':       goto yy466;
        default:        goto yy56;
        }
-yy416:
-       YYDEBUG(416, YYPEEK ());
+yy424:
+       YYDEBUG(424, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy459;
+       case 't':       goto yy467;
        default:        goto yy56;
        }
-yy417:
-       YYDEBUG(417, YYPEEK ());
+yy425:
+       YYDEBUG(425, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy461;
+       case 'a':       goto yy469;
        default:        goto yy56;
        }
-yy418:
-       YYDEBUG(418, YYPEEK ());
+yy426:
+       YYDEBUG(426, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'P':
-       case 'p':       goto yy462;
+       case 'p':       goto yy470;
        default:        goto yy56;
        }
-yy419:
-       YYDEBUG(419, YYPEEK ());
+yy427:
+       YYDEBUG(427, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy463;
+       case 'r':       goto yy471;
        default:        goto yy56;
        }
-yy420:
-       YYDEBUG(420, YYPEEK ());
+yy428:
+       YYDEBUG(428, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy464;
+       case 'd':       goto yy472;
        default:        goto yy56;
        }
-yy421:
-       YYDEBUG(421, YYPEEK ());
+yy429:
+       YYDEBUG(429, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy466;
+       case 'n':       goto yy474;
        default:        goto yy56;
        }
-yy422:
-       YYDEBUG(422, YYPEEK ());
+yy430:
+       YYDEBUG(430, YYPEEK ());
        yyaccept = 48;
        YYSKIP ();
        YYBACKUP ();
@@ -12210,15 +12443,15 @@ yy422:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy423;
+       default:        goto yy431;
        }
-yy423:
-       YYDEBUG(423, YYPEEK ());
-#line 327 "../ada.re2c"
+yy431:
+       YYDEBUG(431, YYPEEK ());
+#line 330 "../ada.re2c"
        {*id =  70; continue;}
-#line 12220 "../ada_re2c.c"
-yy424:
-       YYDEBUG(424, YYPEEK ());
+#line 12453 "../ada_re2c.c"
+yy432:
+       YYDEBUG(432, YYPEEK ());
        yyaccept = 49;
        YYSKIP ();
        YYBACKUP ();
@@ -12339,21 +12572,21 @@ yy424:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy425;
+       default:        goto yy433;
        }
-yy425:
-       YYDEBUG(425, YYPEEK ());
-#line 330 "../ada.re2c"
+yy433:
+       YYDEBUG(433, YYPEEK ());
+#line 333 "../ada.re2c"
        {*id =  73; continue;}
-#line 12349 "../ada_re2c.c"
-yy426:
-       YYDEBUG(426, YYPEEK ());
+#line 12582 "../ada_re2c.c"
+yy434:
+       YYDEBUG(434, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
-yy427:
-       YYDEBUG(427, YYPEEK ());
+yy435:
+       YYDEBUG(435, YYPEEK ());
        switch (yych) {
-       case '"':       goto yy467;
+       case '"':       goto yy475;
        case '0':
        case '1':
        case '2':
@@ -12375,22 +12608,22 @@ yy427:
        case 'c':
        case 'd':
        case 'e':
-       case 'f':       goto yy426;
+       case 'f':       goto yy434;
        default:        goto yy81;
        }
-yy428:
-       YYDEBUG(428, YYPEEK ());
+yy436:
+       YYDEBUG(436, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy468;
+       case 'c':       goto yy476;
        default:        goto yy56;
        }
-yy429:
-       YYDEBUG(429, YYPEEK ());
+yy437:
+       YYDEBUG(437, YYPEEK ());
        yyaccept = 50;
        YYSKIP ();
        YYBACKUP ();
@@ -12511,15 +12744,15 @@ yy429:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy430;
+       default:        goto yy438;
        }
-yy430:
-       YYDEBUG(430, YYPEEK ());
-#line 261 "../ada.re2c"
+yy438:
+       YYDEBUG(438, YYPEEK ());
+#line 264 "../ada.re2c"
        {*id =  4; continue;}
-#line 12521 "../ada_re2c.c"
-yy431:
-       YYDEBUG(431, YYPEEK ());
+#line 12754 "../ada_re2c.c"
+yy439:
+       YYDEBUG(439, YYPEEK ());
        yyaccept = 51;
        YYSKIP ();
        YYBACKUP ();
@@ -12640,48 +12873,48 @@ yy431:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy432;
+       default:        goto yy440;
        }
-yy432:
-       YYDEBUG(432, YYPEEK ());
-#line 264 "../ada.re2c"
+yy440:
+       YYDEBUG(440, YYPEEK ());
+#line 267 "../ada.re2c"
        {*id =  7; continue;}
-#line 12650 "../ada_re2c.c"
-yy433:
-       YYDEBUG(433, YYPEEK ());
+#line 12883 "../ada_re2c.c"
+yy441:
+       YYDEBUG(441, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy469;
+       case 'd':       goto yy477;
        default:        goto yy56;
        }
-yy434:
-       YYDEBUG(434, YYPEEK ());
+yy442:
+       YYDEBUG(442, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy471;
+       case 'n':       goto yy479;
        default:        goto yy56;
        }
-yy435:
-       YYDEBUG(435, YYPEEK ());
+yy443:
+       YYDEBUG(443, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy472;
+       case 'e':       goto yy480;
        default:        goto yy56;
        }
-yy436:
-       YYDEBUG(436, YYPEEK ());
+yy444:
+       YYDEBUG(444, YYPEEK ());
        yyaccept = 52;
        YYSKIP ();
        YYBACKUP ();
@@ -12802,70 +13035,70 @@ yy436:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy437;
+       default:        goto yy445;
        }
-yy437:
-       YYDEBUG(437, YYPEEK ());
-#line 277 "../ada.re2c"
+yy445:
+       YYDEBUG(445, YYPEEK ());
+#line 280 "../ada.re2c"
        {*id =  20; continue;}
-#line 12812 "../ada_re2c.c"
-yy438:
-       YYDEBUG(438, YYPEEK ());
+#line 13045 "../ada_re2c.c"
+yy446:
+       YYDEBUG(446, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy474;
+       case 'i':       goto yy482;
        default:        goto yy56;
        }
-yy439:
-       YYDEBUG(439, YYPEEK ());
+yy447:
+       YYDEBUG(447, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'O':
-       case 'o':       goto yy475;
+       case 'o':       goto yy483;
        default:        goto yy56;
        }
-yy440:
-       YYDEBUG(440, YYPEEK ());
+yy448:
+       YYDEBUG(448, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy476;
+       case 'c':       goto yy484;
        default:        goto yy56;
        }
-yy441:
-       YYDEBUG(441, YYPEEK ());
+yy449:
+       YYDEBUG(449, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy478;
+       case 'a':       goto yy486;
        default:        goto yy56;
        }
-yy442:
-       YYDEBUG(442, YYPEEK ());
+yy450:
+       YYDEBUG(450, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy479;
+       case 'd':       goto yy487;
        default:        goto yy56;
        }
-yy443:
-       YYDEBUG(443, YYPEEK ());
+yy451:
+       YYDEBUG(451, YYPEEK ());
        yyaccept = 53;
        YYSKIP ();
        YYBACKUP ();
@@ -12986,37 +13219,37 @@ yy443:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy444;
+       default:        goto yy452;
        }
-yy444:
-       YYDEBUG(444, YYPEEK ());
-#line 301 "../ada.re2c"
+yy452:
+       YYDEBUG(452, YYPEEK ());
+#line 304 "../ada.re2c"
        {*id =  44; continue;}
-#line 12996 "../ada_re2c.c"
-yy445:
-       YYDEBUG(445, YYPEEK ());
+#line 13229 "../ada_re2c.c"
+yy453:
+       YYDEBUG(453, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy481;
+       case 'd':       goto yy489;
        default:        goto yy56;
        }
-yy446:
-       YYDEBUG(446, YYPEEK ());
+yy454:
+       YYDEBUG(454, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy482;
+       case 'e':       goto yy490;
        default:        goto yy56;
        }
-yy447:
-       YYDEBUG(447, YYPEEK ());
+yy455:
+       YYDEBUG(455, YYPEEK ());
        yyaccept = 54;
        YYSKIP ();
        YYBACKUP ();
@@ -13137,48 +13370,48 @@ yy447:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy448;
+       default:        goto yy456;
        }
-yy448:
-       YYDEBUG(448, YYPEEK ());
-#line 305 "../ada.re2c"
+yy456:
+       YYDEBUG(456, YYPEEK ());
+#line 308 "../ada.re2c"
        {*id =  48; continue;}
-#line 13147 "../ada_re2c.c"
-yy449:
-       YYDEBUG(449, YYPEEK ());
+#line 13380 "../ada_re2c.c"
+yy457:
+       YYDEBUG(457, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy484;
+       case 'e':       goto yy492;
        default:        goto yy56;
        }
-yy450:
-       YYDEBUG(450, YYPEEK ());
+yy458:
+       YYDEBUG(458, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'U':
-       case 'u':       goto yy486;
+       case 'u':       goto yy494;
        default:        goto yy56;
        }
-yy451:
-       YYDEBUG(451, YYPEEK ());
+yy459:
+       YYDEBUG(459, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy487;
+       case 't':       goto yy495;
        default:        goto yy56;
        }
-yy452:
-       YYDEBUG(452, YYPEEK ());
+yy460:
+       YYDEBUG(460, YYPEEK ());
        yyaccept = 55;
        YYSKIP ();
        YYBACKUP ();
@@ -13299,37 +13532,37 @@ yy452:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy453;
+       default:        goto yy461;
        }
-yy453:
-       YYDEBUG(453, YYPEEK ());
-#line 311 "../ada.re2c"
+yy461:
+       YYDEBUG(461, YYPEEK ());
+#line 314 "../ada.re2c"
        {*id =  54; continue;}
-#line 13309 "../ada_re2c.c"
-yy454:
-       YYDEBUG(454, YYPEEK ());
+#line 13542 "../ada_re2c.c"
+yy462:
+       YYDEBUG(462, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'S':
-       case 's':       goto yy488;
+       case 's':       goto yy496;
        default:        goto yy56;
        }
-yy455:
-       YYDEBUG(455, YYPEEK ());
+yy463:
+       YYDEBUG(463, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy490;
+       case 'e':       goto yy498;
        default:        goto yy56;
        }
-yy456:
-       YYDEBUG(456, YYPEEK ());
+yy464:
+       YYDEBUG(464, YYPEEK ());
        yyaccept = 56;
        YYSKIP ();
        YYBACKUP ();
@@ -13450,26 +13683,26 @@ yy456:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy457;
+       default:        goto yy465;
        }
-yy457:
-       YYDEBUG(457, YYPEEK ());
-#line 315 "../ada.re2c"
+yy465:
+       YYDEBUG(465, YYPEEK ());
+#line 318 "../ada.re2c"
        {*id =  58; continue;}
-#line 13460 "../ada_re2c.c"
-yy458:
-       YYDEBUG(458, YYPEEK ());
+#line 13693 "../ada_re2c.c"
+yy466:
+       YYDEBUG(466, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy492;
+       case 'e':       goto yy500;
        default:        goto yy56;
        }
-yy459:
-       YYDEBUG(459, YYPEEK ());
+yy467:
+       YYDEBUG(467, YYPEEK ());
        yyaccept = 57;
        YYSKIP ();
        YYBACKUP ();
@@ -13590,48 +13823,48 @@ yy459:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy460;
+       default:        goto yy468;
        }
-yy460:
-       YYDEBUG(460, YYPEEK ());
-#line 318 "../ada.re2c"
+yy468:
+       YYDEBUG(468, YYPEEK ());
+#line 321 "../ada.re2c"
        {*id =  61; continue;}
-#line 13600 "../ada_re2c.c"
-yy461:
-       YYDEBUG(461, YYPEEK ());
+#line 13833 "../ada_re2c.c"
+yy469:
+       YYDEBUG(469, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy494;
+       case 't':       goto yy502;
        default:        goto yy56;
        }
-yy462:
-       YYDEBUG(462, YYPEEK ());
+yy470:
+       YYDEBUG(470, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy495;
+       case 'e':       goto yy503;
        default:        goto yy56;
        }
-yy463:
-       YYDEBUG(463, YYPEEK ());
+yy471:
+       YYDEBUG(471, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'O':
-       case 'o':       goto yy497;
+       case 'o':       goto yy505;
        default:        goto yy56;
        }
-yy464:
-       YYDEBUG(464, YYPEEK ());
+yy472:
+       YYDEBUG(472, YYPEEK ());
        yyaccept = 58;
        YYSKIP ();
        YYBACKUP ();
@@ -13752,45 +13985,45 @@ yy464:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy465;
+       default:        goto yy473;
        }
-yy465:
-       YYDEBUG(465, YYPEEK ());
-#line 322 "../ada.re2c"
+yy473:
+       YYDEBUG(473, YYPEEK ());
+#line 325 "../ada.re2c"
        {*id =  65; continue;}
-#line 13762 "../ada_re2c.c"
-yy466:
-       YYDEBUG(466, YYPEEK ());
+#line 13995 "../ada_re2c.c"
+yy474:
+       YYDEBUG(474, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'A':
-       case 'a':       goto yy498;
+       case 'a':       goto yy506;
        default:        goto yy56;
        }
-yy467:
-       YYDEBUG(467, YYPEEK ());
+yy475:
+       YYDEBUG(475, YYPEEK ());
        YYSKIP ();
        yych = YYPEEK ();
        switch (yych) {
-       case ']':       goto yy292;
+       case ']':       goto yy299;
        default:        goto yy81;
        }
-yy468:
-       YYDEBUG(468, YYPEEK ());
+yy476:
+       YYDEBUG(476, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy499;
+       case 't':       goto yy507;
        default:        goto yy56;
        }
-yy469:
-       YYDEBUG(469, YYPEEK ());
+yy477:
+       YYDEBUG(477, YYPEEK ());
        yyaccept = 59;
        YYSKIP ();
        YYBACKUP ();
@@ -13911,26 +14144,26 @@ yy469:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy470;
+       default:        goto yy478;
        }
-yy470:
-       YYDEBUG(470, YYPEEK ());
-#line 265 "../ada.re2c"
+yy478:
+       YYDEBUG(478, YYPEEK ());
+#line 268 "../ada.re2c"
        {*id =  8; continue;}
-#line 13921 "../ada_re2c.c"
-yy471:
-       YYDEBUG(471, YYPEEK ());
+#line 14154 "../ada_re2c.c"
+yy479:
+       YYDEBUG(479, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy501;
+       case 't':       goto yy509;
        default:        goto yy56;
        }
-yy472:
-       YYDEBUG(472, YYPEEK ());
+yy480:
+       YYDEBUG(480, YYPEEK ());
        yyaccept = 60;
        YYSKIP ();
        YYBACKUP ();
@@ -14051,37 +14284,37 @@ yy472:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy473;
+       default:        goto yy481;
        }
-yy473:
-       YYDEBUG(473, YYPEEK ());
-#line 274 "../ada.re2c"
+yy481:
+       YYDEBUG(481, YYPEEK ());
+#line 277 "../ada.re2c"
        {*id =  17; continue;}
-#line 14061 "../ada_re2c.c"
-yy474:
-       YYDEBUG(474, YYPEEK ());
+#line 14294 "../ada_re2c.c"
+yy482:
+       YYDEBUG(482, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'O':
-       case 'o':       goto yy503;
+       case 'o':       goto yy511;
        default:        goto yy56;
        }
-yy475:
-       YYDEBUG(475, YYPEEK ());
+yy483:
+       YYDEBUG(483, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy504;
+       case 'n':       goto yy512;
        default:        goto yy56;
        }
-yy476:
-       YYDEBUG(476, YYPEEK ());
+yy484:
+       YYDEBUG(484, YYPEEK ());
        yyaccept = 61;
        YYSKIP ();
        YYBACKUP ();
@@ -14202,26 +14435,26 @@ yy476:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy477;
+       default:        goto yy485;
        }
-yy477:
-       YYDEBUG(477, YYPEEK ());
-#line 287 "../ada.re2c"
+yy485:
+       YYDEBUG(485, YYPEEK ());
+#line 290 "../ada.re2c"
        {*id =  30; continue;}
-#line 14212 "../ada_re2c.c"
-yy478:
-       YYDEBUG(478, YYPEEK ());
+#line 14445 "../ada_re2c.c"
+yy486:
+       YYDEBUG(486, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'C':
-       case 'c':       goto yy506;
+       case 'c':       goto yy514;
        default:        goto yy56;
        }
-yy479:
-       YYDEBUG(479, YYPEEK ());
+yy487:
+       YYDEBUG(487, YYPEEK ());
        yyaccept = 62;
        YYSKIP ();
        YYBACKUP ();
@@ -14342,26 +14575,26 @@ yy479:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy480;
+       default:        goto yy488;
        }
-yy480:
-       YYDEBUG(480, YYPEEK ());
-#line 293 "../ada.re2c"
+yy488:
+       YYDEBUG(488, YYPEEK ());
+#line 296 "../ada.re2c"
        {*id =  36; continue;}
-#line 14352 "../ada_re2c.c"
-yy481:
-       YYDEBUG(481, YYPEEK ());
+#line 14585 "../ada_re2c.c"
+yy489:
+       YYDEBUG(489, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy507;
+       case 'i':       goto yy515;
        default:        goto yy56;
        }
-yy482:
-       YYDEBUG(482, YYPEEK ());
+yy490:
+       YYDEBUG(490, YYPEEK ());
        yyaccept = 63;
        YYSKIP ();
        YYBACKUP ();
@@ -14482,15 +14715,15 @@ yy482:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy483;
+       default:        goto yy491;
        }
-yy483:
-       YYDEBUG(483, YYPEEK ());
-#line 304 "../ada.re2c"
+yy491:
+       YYDEBUG(491, YYPEEK ());
+#line 307 "../ada.re2c"
        {*id =  47; continue;}
-#line 14492 "../ada_re2c.c"
-yy484:
-       YYDEBUG(484, YYPEEK ());
+#line 14725 "../ada_re2c.c"
+yy492:
+       YYDEBUG(492, YYPEEK ());
        yyaccept = 64;
        YYSKIP ();
        YYBACKUP ();
@@ -14611,37 +14844,37 @@ yy484:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy485;
+       default:        goto yy493;
        }
-yy485:
-       YYDEBUG(485, YYPEEK ());
-#line 306 "../ada.re2c"
+yy493:
+       YYDEBUG(493, YYPEEK ());
+#line 309 "../ada.re2c"
        {*id =  49; continue;}
-#line 14621 "../ada_re2c.c"
-yy486:
-       YYDEBUG(486, YYPEEK ());
+#line 14854 "../ada_re2c.c"
+yy494:
+       YYDEBUG(494, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'R':
-       case 'r':       goto yy508;
+       case 'r':       goto yy516;
        default:        goto yy56;
        }
-yy487:
-       YYDEBUG(487, YYPEEK ());
+yy495:
+       YYDEBUG(495, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy509;
+       case 'e':       goto yy517;
        default:        goto yy56;
        }
-yy488:
-       YYDEBUG(488, YYPEEK ());
+yy496:
+       YYDEBUG(496, YYPEEK ());
        yyaccept = 65;
        YYSKIP ();
        YYBACKUP ();
@@ -14762,15 +14995,15 @@ yy488:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy489;
+       default:        goto yy497;
        }
-yy489:
-       YYDEBUG(489, YYPEEK ());
-#line 313 "../ada.re2c"
+yy497:
+       YYDEBUG(497, YYPEEK ());
+#line 316 "../ada.re2c"
        {*id =  56; continue;}
-#line 14772 "../ada_re2c.c"
-yy490:
-       YYDEBUG(490, YYPEEK ());
+#line 15005 "../ada_re2c.c"
+yy498:
+       YYDEBUG(498, YYPEEK ());
        yyaccept = 66;
        YYSKIP ();
        YYBACKUP ();
@@ -14891,15 +15124,15 @@ yy490:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy491;
+       default:        goto yy499;
        }
-yy491:
-       YYDEBUG(491, YYPEEK ());
-#line 314 "../ada.re2c"
+yy499:
+       YYDEBUG(499, YYPEEK ());
+#line 317 "../ada.re2c"
        {*id =  57; continue;}
-#line 14901 "../ada_re2c.c"
-yy492:
-       YYDEBUG(492, YYPEEK ());
+#line 15134 "../ada_re2c.c"
+yy500:
+       YYDEBUG(500, YYPEEK ());
        yyaccept = 67;
        YYSKIP ();
        YYBACKUP ();
@@ -15020,26 +15253,26 @@ yy492:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy493;
+       default:        goto yy501;
        }
-yy493:
-       YYDEBUG(493, YYPEEK ());
-#line 316 "../ada.re2c"
+yy501:
+       YYDEBUG(501, YYPEEK ());
+#line 319 "../ada.re2c"
        {*id =  59; continue;}
-#line 15030 "../ada_re2c.c"
-yy494:
-       YYDEBUG(494, YYPEEK ());
+#line 15263 "../ada_re2c.c"
+yy502:
+       YYDEBUG(502, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy510;
+       case 'e':       goto yy518;
        default:        goto yy56;
        }
-yy495:
-       YYDEBUG(495, YYPEEK ());
+yy503:
+       YYDEBUG(503, YYPEEK ());
        yyaccept = 68;
        YYSKIP ();
        YYBACKUP ();
@@ -15160,37 +15393,37 @@ yy495:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy496;
+       default:        goto yy504;
        }
-yy496:
-       YYDEBUG(496, YYPEEK ());
-#line 320 "../ada.re2c"
+yy504:
+       YYDEBUG(504, YYPEEK ());
+#line 323 "../ada.re2c"
        {*id =  63; continue;}
-#line 15170 "../ada_re2c.c"
-yy497:
-       YYDEBUG(497, YYPEEK ());
+#line 15403 "../ada_re2c.c"
+yy505:
+       YYDEBUG(505, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy512;
+       case 'n':       goto yy520;
        default:        goto yy56;
        }
-yy498:
-       YYDEBUG(498, YYPEEK ());
+yy506:
+       YYDEBUG(506, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'T':
-       case 't':       goto yy513;
+       case 't':       goto yy521;
        default:        goto yy56;
        }
-yy499:
-       YYDEBUG(499, YYPEEK ());
+yy507:
+       YYDEBUG(507, YYPEEK ());
        yyaccept = 69;
        YYSKIP ();
        YYBACKUP ();
@@ -15311,15 +15544,15 @@ yy499:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy500;
+       default:        goto yy508;
        }
-yy500:
-       YYDEBUG(500, YYPEEK ());
-#line 263 "../ada.re2c"
+yy508:
+       YYDEBUG(508, YYPEEK ());
+#line 266 "../ada.re2c"
        {*id =  6; continue;}
-#line 15321 "../ada_re2c.c"
-yy501:
-       YYDEBUG(501, YYPEEK ());
+#line 15554 "../ada_re2c.c"
+yy509:
+       YYDEBUG(509, YYPEEK ());
        yyaccept = 70;
        YYSKIP ();
        YYBACKUP ();
@@ -15440,26 +15673,26 @@ yy501:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy502;
+       default:        goto yy510;
        }
-yy502:
-       YYDEBUG(502, YYPEEK ());
-#line 273 "../ada.re2c"
+yy510:
+       YYDEBUG(510, YYPEEK ());
+#line 276 "../ada.re2c"
        {*id =  16; continue;}
-#line 15450 "../ada_re2c.c"
-yy503:
-       YYDEBUG(503, YYPEEK ());
+#line 15683 "../ada_re2c.c"
+yy511:
+       YYDEBUG(511, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy514;
+       case 'n':       goto yy522;
        default:        goto yy56;
        }
-yy504:
-       YYDEBUG(504, YYPEEK ());
+yy512:
+       YYDEBUG(512, YYPEEK ());
        yyaccept = 71;
        YYSKIP ();
        YYBACKUP ();
@@ -15580,59 +15813,59 @@ yy504:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy505;
+       default:        goto yy513;
        }
-yy505:
-       YYDEBUG(505, YYPEEK ());
-#line 286 "../ada.re2c"
+yy513:
+       YYDEBUG(513, YYPEEK ());
+#line 289 "../ada.re2c"
        {*id =  29; continue;}
-#line 15590 "../ada_re2c.c"
-yy506:
-       YYDEBUG(506, YYPEEK ());
+#line 15823 "../ada_re2c.c"
+yy514:
+       YYDEBUG(514, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy516;
+       case 'e':       goto yy524;
        default:        goto yy56;
        }
-yy507:
-       YYDEBUG(507, YYPEEK ());
+yy515:
+       YYDEBUG(515, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'N':
-       case 'n':       goto yy518;
+       case 'n':       goto yy526;
        default:        goto yy56;
        }
-yy508:
-       YYDEBUG(508, YYPEEK ());
+yy516:
+       YYDEBUG(516, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy519;
+       case 'e':       goto yy527;
        default:        goto yy56;
        }
-yy509:
-       YYDEBUG(509, YYPEEK ());
+yy517:
+       YYDEBUG(517, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy521;
+       case 'd':       goto yy529;
        default:        goto yy56;
        }
-yy510:
-       YYDEBUG(510, YYPEEK ());
+yy518:
+       YYDEBUG(518, YYPEEK ());
        yyaccept = 72;
        YYSKIP ();
        YYBACKUP ();
@@ -15753,37 +15986,37 @@ yy510:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy511;
+       default:        goto yy519;
        }
-yy511:
-       YYDEBUG(511, YYPEEK ());
-#line 317 "../ada.re2c"
+yy519:
+       YYDEBUG(519, YYPEEK ());
+#line 320 "../ada.re2c"
        {*id =  60; continue;}
-#line 15763 "../ada_re2c.c"
-yy512:
-       YYDEBUG(512, YYPEEK ());
+#line 15996 "../ada_re2c.c"
+yy520:
+       YYDEBUG(520, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'I':
-       case 'i':       goto yy523;
+       case 'i':       goto yy531;
        default:        goto yy56;
        }
-yy513:
-       YYDEBUG(513, YYPEEK ());
+yy521:
+       YYDEBUG(521, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy524;
+       case 'e':       goto yy532;
        default:        goto yy56;
        }
-yy514:
-       YYDEBUG(514, YYPEEK ());
+yy522:
+       YYDEBUG(522, YYPEEK ());
        yyaccept = 73;
        YYSKIP ();
        YYBACKUP ();
@@ -15904,15 +16137,15 @@ yy514:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy515;
+       default:        goto yy523;
        }
-yy515:
-       YYDEBUG(515, YYPEEK ());
-#line 283 "../ada.re2c"
+yy523:
+       YYDEBUG(523, YYPEEK ());
+#line 286 "../ada.re2c"
        {*id =  26; continue;}
-#line 15914 "../ada_re2c.c"
-yy516:
-       YYDEBUG(516, YYPEEK ());
+#line 16147 "../ada_re2c.c"
+yy524:
+       YYDEBUG(524, YYPEEK ());
        yyaccept = 74;
        YYSKIP ();
        YYBACKUP ();
@@ -16033,26 +16266,26 @@ yy516:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy517;
+       default:        goto yy525;
        }
-yy517:
-       YYDEBUG(517, YYPEEK ());
-#line 291 "../ada.re2c"
+yy525:
+       YYDEBUG(525, YYPEEK ());
+#line 294 "../ada.re2c"
        {*id =  34; continue;}
-#line 16043 "../ada_re2c.c"
-yy518:
-       YYDEBUG(518, YYPEEK ());
+#line 16276 "../ada_re2c.c"
+yy526:
+       YYDEBUG(526, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'G':
-       case 'g':       goto yy526;
+       case 'g':       goto yy534;
        default:        goto yy56;
        }
-yy519:
-       YYDEBUG(519, YYPEEK ());
+yy527:
+       YYDEBUG(527, YYPEEK ());
        yyaccept = 75;
        YYSKIP ();
        YYBACKUP ();
@@ -16173,15 +16406,15 @@ yy519:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy520;
+       default:        goto yy528;
        }
-yy520:
-       YYDEBUG(520, YYPEEK ());
-#line 307 "../ada.re2c"
+yy528:
+       YYDEBUG(528, YYPEEK ());
+#line 310 "../ada.re2c"
        {*id =  50; continue;}
-#line 16183 "../ada_re2c.c"
-yy521:
-       YYDEBUG(521, YYPEEK ());
+#line 16416 "../ada_re2c.c"
+yy529:
+       YYDEBUG(529, YYPEEK ());
        yyaccept = 76;
        YYSKIP ();
        YYBACKUP ();
@@ -16302,26 +16535,26 @@ yy521:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy522;
+       default:        goto yy530;
        }
-yy522:
-       YYDEBUG(522, YYPEEK ());
-#line 308 "../ada.re2c"
+yy530:
+       YYDEBUG(530, YYPEEK ());
+#line 311 "../ada.re2c"
        {*id =  51; continue;}
-#line 16312 "../ada_re2c.c"
-yy523:
-       YYDEBUG(523, YYPEEK ());
+#line 16545 "../ada_re2c.c"
+yy531:
+       YYDEBUG(531, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'Z':
-       case 'z':       goto yy528;
+       case 'z':       goto yy536;
        default:        goto yy56;
        }
-yy524:
-       YYDEBUG(524, YYPEEK ());
+yy532:
+       YYDEBUG(532, YYPEEK ());
        yyaccept = 77;
        YYSKIP ();
        YYBACKUP ();
@@ -16442,15 +16675,15 @@ yy524:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy525;
+       default:        goto yy533;
        }
-yy525:
-       YYDEBUG(525, YYPEEK ());
-#line 324 "../ada.re2c"
+yy533:
+       YYDEBUG(533, YYPEEK ());
+#line 327 "../ada.re2c"
        {*id =  67; continue;}
-#line 16452 "../ada_re2c.c"
-yy526:
-       YYDEBUG(526, YYPEEK ());
+#line 16685 "../ada_re2c.c"
+yy534:
+       YYDEBUG(534, YYPEEK ());
        yyaccept = 78;
        YYSKIP ();
        YYBACKUP ();
@@ -16571,37 +16804,37 @@ yy526:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy527;
+       default:        goto yy535;
        }
-yy527:
-       YYDEBUG(527, YYPEEK ());
-#line 303 "../ada.re2c"
+yy535:
+       YYDEBUG(535, YYPEEK ());
+#line 306 "../ada.re2c"
        {*id =  46; continue;}
-#line 16581 "../ada_re2c.c"
-yy528:
-       YYDEBUG(528, YYPEEK ());
+#line 16814 "../ada_re2c.c"
+yy536:
+       YYDEBUG(536, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'E':
-       case 'e':       goto yy529;
+       case 'e':       goto yy537;
        default:        goto yy56;
        }
-yy529:
-       YYDEBUG(529, YYPEEK ());
+yy537:
+       YYDEBUG(537, YYPEEK ());
        yyaccept = 3;
        YYSKIP ();
        YYBACKUP ();
        yych = YYPEEK ();
        switch (yych) {
        case 'D':
-       case 'd':       goto yy530;
+       case 'd':       goto yy538;
        default:        goto yy56;
        }
-yy530:
-       YYDEBUG(530, YYPEEK ());
+yy538:
+       YYDEBUG(538, YYPEEK ());
        yyaccept = 79;
        YYSKIP ();
        YYBACKUP ();
@@ -16722,15 +16955,15 @@ yy530:
        case 0xF2:
        case 0xF3:
        case 0xF4:      goto yy56;
-       default:        goto yy531;
+       default:        goto yy539;
        }
-yy531:
-       YYDEBUG(531, YYPEEK ());
-#line 321 "../ada.re2c"
+yy539:
+       YYDEBUG(539, YYPEEK ());
+#line 324 "../ada.re2c"
        {*id =  64; continue;}
-#line 16732 "../ada_re2c.c"
+#line 16965 "../ada_re2c.c"
 }
-#line 367 "../ada.re2c"
+#line 370 "../ada.re2c"
 
       }
    *byte_position = lexer->byte_token_start - lexer->buffer + 1;
diff --git a/packages/ada-mode/ada_re2c_c.ads b/packages/ada-mode/ada_re2c_c.ads
index 0b21cb4..276e763 100644
--- a/packages/ada-mode/ada_re2c_c.ads
+++ b/packages/ada-mode/ada_re2c_c.ads
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LALR Ada_Emacs re2c 
PROCESS ada.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
diff --git a/packages/ada-mode/build.sh b/packages/ada-mode/build.sh
index f496251..8b5099a 100755
--- a/packages/ada-mode/build.sh
+++ b/packages/ada-mode/build.sh
@@ -1,3 +1,4 @@
+#!/bin/sh
 # Build and install executables for Ada mode.
 
 # In December 2016, GNATCOLL changed its Xref interface. First, the
@@ -17,15 +18,11 @@ gnatprep -DHAVE_GNATCOLL_XREF=$HAVE_GNATCOLL_XREF 
gpr_query.gpr.gp gpr_query.gpr
 # support for libadalang is still experimental
 gnatprep -DHAVE_LIBADALANG="no" ada_mode_wisi_parse.gpr.gp 
ada_mode_wisi_parse.gpr
 
-export GPR_PROJECT_PATH="../wisi-2.0.1"
+export GPR_PROJECT_PATH="../wisi-2.1.0"
 
 gprbuild -p -P gpr_query.gpr
 gprinstall -f -p -P gpr_query.gpr --install-name=gpr_query
 
-gnatprep -DHAVE_GNATCOLL_XREF=$HAVE_GNATCOLL_XREF ada_mode_gps_indent.gpr.gp 
ada_mode_gps_indent.gpr
-gprbuild -p -P ada_mode_gps_indent.gpr
-gprinstall -f -p -P ada_mode_gps_indent.gpr --install-name=ada_mode_gps_indent
-
 gprbuild -p -P ada_mode_wisi_parse.gpr
 gzip -d -q ada_lr1_parse_table.txt.gz
 gprinstall -f -p -P ada_mode_wisi_parse.gpr --install-name=ada_mode_wisi_parse
diff --git a/packages/ada-mode/config.pragmas b/packages/ada-mode/config.pragmas
new file mode 100644
index 0000000..3d0b1a8
--- /dev/null
+++ b/packages/ada-mode/config.pragmas
@@ -0,0 +1,6 @@
+pragma No_Heap_Finalization;
+pragma Restrictions (No_Initialize_Scalars);
+pragma Restrictions (No_Abort_Statements);
+pragma Restrictions (Max_Asynchronous_Select_Nesting => 0);
+pragma Restrictions (No_Asynchronous_Control);
+pragma Restrictions (No_Dynamic_Priorities);
diff --git a/packages/ada-mode/emacs_wisi_common_parse.adb 
b/packages/ada-mode/emacs_wisi_common_parse.adb
index 210e008..7a2716e 100644
--- a/packages/ada-mode/emacs_wisi_common_parse.adb
+++ b/packages/ada-mode/emacs_wisi_common_parse.adb
@@ -1,198 +1,400 @@
---  Abstract :
---
---  See spec.
---
---  Copyright (C) 2018 Free Software Foundation, Inc.
---
---  This program is free software; you can redistribute it and/or
---  modify it under terms of the GNU General Public License as
---  published by the Free Software Foundation; either version 3, or (at
---  your option) any later version. This program is distributed in the
---  hope that it will be useful, but WITHOUT ANY WARRANTY; without even
---  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
---  PURPOSE. See the GNU General Public License for more details. You
---  should have received a copy of the GNU General Public License
---  distributed with this program; see file COPYING. If not, write to
---  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
---  MA 02110-1335, USA.
-
-pragma License (GPL);
-
-with Ada.Command_Line;
-with Ada.Strings.Fixed;
-with Ada.Text_IO;
-with GNAT.OS_Lib;
-with SAL;
-with System.Storage_Elements;
-package body Emacs_Wisi_Common_Parse is
-
-   procedure Usage (Name : in String)
-   is
-      use Ada.Text_IO;
-   begin
-      Put_Line ("usage: " & Name & "[--recover-log <file-name>]");
-      Put_Line ("enters a loop waiting for commands:");
-      Put_Line ("Prompt is '" & Prompt & "'");
-      Put_Line ("commands are case sensitive");
-      Put_Line ("each command starts with a two-character decimal count of 
bytes in command");
-      New_Line;
-      Put_Line ("Commands: ");
-      New_Line;
-      Put_Line
-        ("NNNparse <action> <source_file_name> <line_count> <parse_verbosity> 
<mckenzie_verbosity>"  &
-           " <action_verbosity> <mckenzie_disable> <mckenzie_cost_limit> 
<mckenzie_check_limit>" &
-           " <mckenzie_enqueue_limit> <source_byte_count> <language-specific 
params> <source bytes>");
-      Put_Line ("  NNN excludes <source bytes>");
-      Put_Line ("  <action> is an integer; 0 - navigate, 1 - face, 2 - 
indent");
-      Put_Line ("  <line-count> is integer count of lines in source");
-      Put_Line ("  <*verbosity> is an integer; set parse trace output level");
-      Put_Line ("  <mckenzie_disable> is 0 | 1; 0 = use default, 1 = disable");
-      Put_Line ("  <*_limit> is integer; -1 means use default");
-      Put_Line ("  outputs: elisp vectors for set-text-property from parser 
actions or elisp forms for errors.");
-      New_Line;
-      Put_Line ("NNNnoop <source_byte_count> <source bytes>");
-      Put_Line ("  Just receive source; otherwise no operation. NN excludes 
<source bytes>");
-      New_Line;
-      Put_Line ("04quit");
-   end Usage;
-
-   procedure Read_Input (A : System.Address; N : Integer)
-   is
-      use System.Storage_Elements;
-
-      B         : System.Address := A;
-      Remaining : Integer        := N;
-      Read      : Integer;
-   begin
-      --  We use GNAT.OS_Lib because it does not buffer input, so it runs
-      --  under Emacs nicely; GNAT Text_IO does not return text until
-      --  some fairly large buffer is filled.
-      --
-      --  With GNAT GPL 2016, GNAT.OS_Lib.Read does _not_ wait for all N
-      --  bytes or EOF; it returns as soon as it gets some bytes.
-      loop
-         Read := GNAT.OS_Lib.Read (GNAT.OS_Lib.Standin, B, Remaining);
-         if Read = 0 then
-            --  Pipe closed; probably parent Emacs crashed. Force exit.
-            raise SAL.Programmer_Error with "input pipe closed";
-         end if;
-         Remaining := Remaining - Read;
-         exit when Remaining <= 0;
-         B := B + Storage_Offset (Read);
-      end loop;
-   end Read_Input;
-
-   function Get_Command_Length return Integer
-   is
-      Temp : aliased String (1 .. 3) := (others => ' '); -- initialize for 
error message
-   begin
-      Read_Input (Temp'Address, Temp'Length);
-      return Integer'Value (Temp);
-   exception
-   when Constraint_Error =>
-      --  From Integer'Value
-      raise Protocol_Error with "invalid command byte count; '" & Temp & "'";
-   end Get_Command_Length;
-
-   function Get_String
-     (Source : in     String;
-      Last   : in out Integer)
-     return String
-   is
-      use Ada.Strings.Fixed;
-      First : constant Integer := Index
-        (Source  => Source,
-         Pattern => """",
-         From    => Last + 1);
-   begin
-      Last := Index
-        (Source  => Source,
-         Pattern => """",
-         From    => First + 1);
-
-      if First = 0 or Last = 0 then
-         raise Protocol_Error with "no '""' found for string";
-      end if;
-
-      return Source (First + 1 .. Last - 1);
-   end Get_String;
-
-   function Get_Integer
-     (Source : in     String;
-      Last   : in out Integer)
-     return Integer
-   is
-      use Ada.Strings.Fixed;
-      First : constant Integer := Last + 2; -- final char of previous item, 
space
-   begin
-      Last := Index
-        (Source  => Source,
-         Pattern => " ",
-         From    => First);
-
-      if Last = 0 then
-         Last := Source'Last;
-      else
-         Last := Last - 1;
-      end if;
-
-      return Integer'Value (Source (First .. Last));
-   exception
-   when others =>
-      Ada.Text_IO.Put_Line ("bad integer '" & Source (First .. Source'Last) & 
"'");
-      raise;
-   end Get_Integer;
-
-   function Get_Process_Start_Params return Process_Start_Params
-   is
-      use Ada.Command_Line;
-      procedure Put_Usage
-      is
-         use Ada.Text_IO;
-      begin
-         Put_Line (Standard_Error, "process start args:");
-         Put_Line (Standard_Error, "--help : put this help");
-         Put_Line (Standard_Error, "--recover-log <file_name> : log recover 
actions to file");
-      end Put_Usage;
-
-      Next_Arg : Integer := 1;
-   begin
-      return Result : Process_Start_Params do
-         loop
-            exit when Next_Arg > Argument_Count;
-
-            if Next_Arg <= Argument_Count and then Argument (Next_Arg) = 
"--help" then
-               Put_Usage;
-               raise Finish;
-
-            elsif Next_Arg + 1 <= Argument_Count and then Argument (Next_Arg) 
= "--recover-log" then
-               Result.Recover_Log_File_Name := 
Ada.Strings.Unbounded.To_Unbounded_String (Argument (Next_Arg + 1));
-               Next_Arg := Next_Arg + 2;
-            end if;
-         end loop;
-      end return;
-   end Get_Process_Start_Params;
-
-   function Get_Parse_Params (Command_Line : in String; Last : in out Integer) 
return Parse_Params
-   is
-      use WisiToken;
-   begin
-      return Result : Parse_Params do
-
-         Result.Post_Parse_Action  := Wisi.Post_Parse_Action_Type'Val 
(Get_Integer (Command_Line, Last));
-         Result.Source_File_Name   := +Get_String (Command_Line, Last);
-         Result.Line_Count         := WisiToken.Line_Number_Type (Get_Integer 
(Command_Line, Last));
-         Result.Debug_Mode         := 1 = Get_Integer (Command_Line, Last);
-         Result.Parse_Verbosity    := Get_Integer (Command_Line, Last);
-         Result.McKenzie_Verbosity := Get_Integer (Command_Line, Last);
-         Result.Action_Verbosity   := Get_Integer (Command_Line, Last);
-         Result.McKenzie_Disable   := Get_Integer (Command_Line, Last);
-         Result.Task_Count         := Get_Integer (Command_Line, Last);
-         Result.Cost_Limit         := Get_Integer (Command_Line, Last);
-         Result.Check_Limit        := Get_Integer (Command_Line, Last);
-         Result.Enqueue_Limit      := Get_Integer (Command_Line, Last);
-         Result.Byte_Count         := Get_Integer (Command_Line, Last);
-      end return;
-   end Get_Parse_Params;
-
-end Emacs_Wisi_Common_Parse;
+--  Abstract :
+--
+--  See spec.
+--
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
+--
+--  This program is free software; you can redistribute it and/or
+--  modify it under terms of the GNU General Public License as
+--  published by the Free Software Foundation; either version 3, or (at
+--  your option) any later version. This program is distributed in the
+--  hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+--  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+--  PURPOSE. See the GNU General Public License for more details. You
+--  should have received a copy of the GNU General Public License
+--  distributed with this program; see file COPYING. If not, write to
+--  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
+--  MA 02110-1335, USA.
+
+pragma License (GPL);
+
+with Ada.Command_Line;
+with Ada.Directories;
+with Ada.Exceptions;
+with Ada.Strings.Fixed;
+with Ada.Text_IO;
+with GNAT.OS_Lib;
+with GNAT.Traceback.Symbolic;
+with SAL;
+with System.Multiprocessors;
+with System.Storage_Elements;
+with WisiToken.Lexer;
+package body Emacs_Wisi_Common_Parse is
+
+   procedure Usage (Name : in String)
+   is
+      use Ada.Text_IO;
+   begin
+      Put_Line ("usage: " & Name & "[--recover-log <file-name>]");
+      Put_Line ("enters a loop waiting for commands:");
+      Put_Line ("Prompt is '" & Prompt & "'");
+      Put_Line ("commands are case sensitive");
+      Put_Line ("See wisi-process-parse.el *--send-parse, *--send-noop for 
arguments.");
+   end Usage;
+
+   procedure Read_Input (A : System.Address; N : Integer)
+   is
+      use System.Storage_Elements;
+
+      B         : System.Address := A;
+      Remaining : Integer        := N;
+      Read      : Integer;
+   begin
+      --  We use GNAT.OS_Lib because it does not buffer input, so it runs
+      --  under Emacs nicely; GNAT Text_IO does not return text until
+      --  some fairly large buffer is filled.
+      --
+      --  With GNAT GPL 2016, GNAT.OS_Lib.Read does _not_ wait for all N
+      --  bytes or EOF; it returns as soon as it gets some bytes.
+      loop
+         Read := GNAT.OS_Lib.Read (GNAT.OS_Lib.Standin, B, Remaining);
+         if Read = 0 then
+            --  Pipe closed; probably parent Emacs crashed. Force exit.
+            raise SAL.Programmer_Error with "input pipe closed";
+         end if;
+         Remaining := Remaining - Read;
+         exit when Remaining <= 0;
+         B := B + Storage_Offset (Read);
+      end loop;
+   end Read_Input;
+
+   function Get_Command_Length return Integer
+   is
+      Temp : aliased String (1 .. 3) := (others => ' '); -- initialize for 
error message
+   begin
+      Read_Input (Temp'Address, Temp'Length);
+      return Integer'Value (Temp);
+   exception
+   when Constraint_Error =>
+      --  From Integer'Value
+      raise Protocol_Error with "invalid command byte count; '" & Temp & "'";
+   end Get_Command_Length;
+
+   function Get_String
+     (Source : in     String;
+      Last   : in out Integer)
+     return String
+   is
+      use Ada.Strings.Fixed;
+      First : constant Integer := Index
+        (Source  => Source,
+         Pattern => """",
+         From    => Last + 1);
+   begin
+      Last := Index
+        (Source  => Source,
+         Pattern => """",
+         From    => First + 1);
+
+      if First = 0 or Last = 0 then
+         raise Protocol_Error with "no '""' found for string";
+      end if;
+
+      return Source (First + 1 .. Last - 1);
+   end Get_String;
+
+   function Get_Integer
+     (Source : in     String;
+      Last   : in out Integer)
+     return Integer
+   is
+      use Ada.Strings.Fixed;
+      First : constant Integer := Last + 2; -- final char of previous item, 
space
+   begin
+      Last := Index
+        (Source  => Source,
+         Pattern => " ",
+         From    => First);
+
+      if Last = 0 then
+         Last := Source'Last;
+      else
+         Last := Last - 1;
+      end if;
+
+      return Integer'Value (Source (First .. Last));
+   exception
+   when others =>
+      Ada.Text_IO.Put_Line ("bad integer '" & Source (First .. Source'Last) & 
"'");
+      raise;
+   end Get_Integer;
+
+   function Get_Process_Start_Params return Process_Start_Params
+   is
+      use Ada.Command_Line;
+      procedure Put_Usage
+      is
+         use Ada.Text_IO;
+      begin
+         Put_Line (Standard_Error, "process start args:");
+         Put_Line (Standard_Error, "--help : put this help");
+         Put_Line (Standard_Error, "--recover-log <file_name> : log recover 
actions to file");
+      end Put_Usage;
+
+      Next_Arg : Integer := 1;
+   begin
+      return Result : Process_Start_Params do
+         loop
+            exit when Next_Arg > Argument_Count;
+
+            if Next_Arg <= Argument_Count and then Argument (Next_Arg) = 
"--help" then
+               Put_Usage;
+               raise Finish;
+
+            elsif Next_Arg + 1 <= Argument_Count and then Argument (Next_Arg) 
= "--recover-log" then
+               Result.Recover_Log_File_Name := 
Ada.Strings.Unbounded.To_Unbounded_String (Argument (Next_Arg + 1));
+               Next_Arg := Next_Arg + 2;
+            end if;
+         end loop;
+      end return;
+   end Get_Process_Start_Params;
+
+   function Get_Parse_Params (Command_Line : in String; Last : in out Integer) 
return Parse_Params
+   is
+      use WisiToken;
+   begin
+      return Result : Parse_Params do
+         --  We don't use an aggregate, to enforce execution order.
+
+         Result.Post_Parse_Action    := Wisi.Post_Parse_Action_Type'Val 
(Get_Integer (Command_Line, Last));
+         Result.Source_File_Name     := +Get_String (Command_Line, Last);
+         Result.Begin_Byte_Pos       := Get_Integer (Command_Line, Last);
+
+         --  Emacs end is after last char.
+         Result.End_Byte_Pos         := Get_Integer (Command_Line, Last) - 1;
+
+         Result.Goal_Byte_Pos        := Get_Integer (Command_Line, Last);
+         Result.Begin_Char_Pos       := WisiToken.Buffer_Pos (Get_Integer 
(Command_Line, Last));
+         Result.Begin_Line           := WisiToken.Line_Number_Type 
(Get_Integer (Command_Line, Last));
+         Result.End_Line             := WisiToken.Line_Number_Type 
(Get_Integer (Command_Line, Last));
+         Result.Begin_Indent         := Get_Integer (Command_Line, Last);
+         Result.Partial_Parse_Active := 1 = Get_Integer (Command_Line, Last);
+         Result.Debug_Mode           := 1 = Get_Integer (Command_Line, Last);
+         Result.Parse_Verbosity      := Get_Integer (Command_Line, Last);
+         Result.McKenzie_Verbosity   := Get_Integer (Command_Line, Last);
+         Result.Action_Verbosity     := Get_Integer (Command_Line, Last);
+         Result.McKenzie_Disable     := Get_Integer (Command_Line, Last);
+         Result.Task_Count           := Get_Integer (Command_Line, Last);
+         Result.Cost_Limit           := Get_Integer (Command_Line, Last);
+         Result.Check_Limit          := Get_Integer (Command_Line, Last);
+         Result.Enqueue_Limit        := Get_Integer (Command_Line, Last);
+         Result.Byte_Count           := Get_Integer (Command_Line, Last);
+      end return;
+   end Get_Parse_Params;
+
+   procedure Parse_Stream
+     (Name                 : in     String;
+      Partial_Parse_Active : in out Boolean;
+      Params               : in     Process_Start_Params;
+      Parser               : in out WisiToken.Parse.LR.Parser.Parser;
+      Parse_Data           : in out Wisi.Parse_Data_Type'Class;
+      Descriptor           : in     WisiToken.Descriptor)
+   is
+      use Ada.Text_IO;
+      use WisiToken; -- "+", "-" Unbounded_string
+
+      procedure Cleanup
+      is begin
+         if Is_Open (Parser.Recover_Log_File) then
+            Close (Parser.Recover_Log_File);
+         end if;
+      end Cleanup;
+
+   begin
+      declare
+         use Ada.Directories;
+         use Ada.Strings.Unbounded;
+      begin
+         if Length (Params.Recover_Log_File_Name) > 0 then
+            Put_Line (";; logging to '" & (-Params.Recover_Log_File_Name) & 
"'");
+            --  to Current_Output, visible from Emacs
+
+            if Exists (-Params.Recover_Log_File_Name) then
+               Open (Parser.Recover_Log_File, Append_File, 
-Params.Recover_Log_File_Name);
+            else
+               Create (Parser.Recover_Log_File, Out_File, 
-Params.Recover_Log_File_Name);
+            end if;
+         end if;
+      end;
+
+      Parser.Trace.Set_Prefix (";; "); -- so debug messages don't confuse 
Emacs.
+
+      Put_Line (Name & " " & Version & ", protocol version " & 
Protocol_Version);
+
+      --  Read commands and tokens from standard_input via GNAT.OS_Lib,
+      --  send results to standard_output.
+      loop
+         Put (Prompt); Flush;
+         declare
+            Command_Length : constant Integer := Get_Command_Length;
+            Command_Line   : aliased String (1 .. Command_Length);
+            Last           : Integer;
+
+            function Match (Target : in String) return Boolean
+            is begin
+               Last := Command_Line'First + Target'Length - 1;
+               return Last <= Command_Line'Last and then Command_Line 
(Command_Line'First .. Last) = Target;
+            end Match;
+         begin
+            Read_Input (Command_Line'Address, Command_Length);
+
+            Put_Line (";; " & Command_Line);
+
+            if Match ("parse") then
+               --  Args: see wisi-process-parse.el 
wisi-process-parse--send-parse, --send-noop
+               --  Input: <source text>
+               --  Response:
+               --  [response elisp vector]...
+               --  [elisp error form]...
+               --  prompt
+               declare
+                  Params : constant Parse_Params := Get_Parse_Params 
(Command_Line, Last);
+                  Buffer : Ada.Strings.Unbounded.String_Access;
+
+                  procedure Clean_Up
+                  is
+                     use all type SAL.Base_Peek_Type;
+                  begin
+                     Parser.Lexer.Discard_Rest_Of_Input;
+                     if Parser.Parsers.Count > 0 then
+                        Parse_Data.Put
+                          (Parser.Lexer.Errors,
+                           Parser.Parsers.First.State_Ref.Errors,
+                           Parser.Parsers.First.State_Ref.Tree);
+                     end if;
+                     Ada.Strings.Unbounded.Free (Buffer);
+                  end Clean_Up;
+
+               begin
+                  --  Computing Line_Count in elisp allows parsing in parallel 
with
+                  --  sending source text.
+
+                  Trace_Parse    := Params.Parse_Verbosity;
+                  Trace_McKenzie := Params.McKenzie_Verbosity;
+                  Trace_Action   := Params.Action_Verbosity;
+                  Debug_Mode     := Params.Debug_Mode;
+
+                  Partial_Parse_Active := Params.Partial_Parse_Active;
+
+                  --  Default Enable_McKenzie_Recover is False if there is no 
McKenzie
+                  --  information; don't override that.
+                  Parser.Enable_McKenzie_Recover :=
+                    (if Params.McKenzie_Disable = 0
+                     then Parser.Enable_McKenzie_Recover
+                     else False);
+
+                  Parse_Data.Initialize
+                    (Post_Parse_Action => Params.Post_Parse_Action,
+                     Descriptor        => Descriptor'Unrestricted_Access,
+                     Source_File_Name  => -Params.Source_File_Name,
+                     Begin_Line        => Params.Begin_Line,
+                     End_Line          => Params.End_Line,
+                     Begin_Indent      => Params.Begin_Indent,
+                     Params            => Command_Line (Last + 2 .. 
Command_Line'Last));
+
+                  if Params.Task_Count > 0 then
+                     Parser.Table.McKenzie_Param.Task_Count := 
System.Multiprocessors.CPU_Range (Params.Task_Count);
+                  end if;
+                  if Params.Cost_Limit > 0 then
+                     Parser.Table.McKenzie_Param.Cost_Limit := 
Params.Cost_Limit;
+                  end if;
+                  if Params.Check_Limit > 0 then
+                     Parser.Table.McKenzie_Param.Check_Limit := 
Base_Token_Index (Params.Check_Limit);
+                  end if;
+                  if Params.Enqueue_Limit > 0 then
+                     Parser.Table.McKenzie_Param.Enqueue_Limit := 
Params.Enqueue_Limit;
+                  end if;
+
+                  Buffer := new String (Params.Begin_Byte_Pos .. 
Params.End_Byte_Pos);
+
+                  Read_Input (Buffer (Params.Begin_Byte_Pos)'Address, 
Params.Byte_Count);
+
+                  Parser.Lexer.Reset_With_String_Access
+                    (Buffer, Params.Source_File_Name, Params.Begin_Char_Pos, 
Params.Begin_Line);
+                  begin
+                     Parser.Parse;
+                  exception
+                  when WisiToken.Partial_Parse =>
+                     null;
+                  end;
+                  Parser.Execute_Actions;
+                  Parse_Data.Put (Parser);
+                  Clean_Up;
+
+               exception
+               when Syntax_Error =>
+                  Clean_Up;
+                  Put_Line ("(parse_error)");
+
+               when E : Parse_Error =>
+                  Clean_Up;
+                  Put_Line ("(parse_error """ & 
Ada.Exceptions.Exception_Message (E) & """)");
+
+               when E : Fatal_Error =>
+                  Clean_Up;
+                  Put_Line ("(error """ & Ada.Exceptions.Exception_Message (E) 
& """)");
+               end;
+
+            elsif Match ("noop") then
+               --  Args: <source byte count>
+               --  Input: <source text>
+               --  Response: prompt
+               declare
+                  Byte_Count  : constant Integer                             
:= Get_Integer (Command_Line, Last);
+                  Buffer      : constant Ada.Strings.Unbounded.String_Access 
:= new String (1 .. Byte_Count);
+                  Token       : Base_Token;
+                  Lexer_Error : Boolean;
+                  pragma Unreferenced (Lexer_Error);
+               begin
+                  Token.ID := Invalid_Token_ID;
+                  Read_Input (Buffer (1)'Address, Byte_Count);
+
+                  Parser.Lexer.Reset_With_String_Access (Buffer, +"");
+                  loop
+                     exit when Token.ID = Parser.Trace.Descriptor.EOI_ID;
+                     Lexer_Error := Parser.Lexer.Find_Next (Token);
+                  end loop;
+               exception
+               when Syntax_Error =>
+                  Parser.Lexer.Discard_Rest_Of_Input;
+               end;
+
+            elsif Match ("quit") then
+               exit;
+
+            else
+               Put_Line ("(error ""bad command: '" & Command_Line & "'"")");
+            end if;
+         exception
+         when E : Protocol_Error =>
+            --  don't exit the loop; allow debugging bad elisp
+            Put_Line ("(error ""protocol error "": " & 
Ada.Exceptions.Exception_Message (E) & """)");
+         end;
+      end loop;
+      Cleanup;
+   exception
+   when Finish =>
+      null;
+
+   when E : others =>
+      Cleanup;
+      Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
+      New_Line (2);
+      Put_Line
+        ("(error ""unhandled exception: " & Ada.Exceptions.Exception_Name (E) 
& ": " &
+           Ada.Exceptions.Exception_Message (E) & """)");
+      Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E));
+
+   end Parse_Stream;
+
+end Emacs_Wisi_Common_Parse;
diff --git a/packages/ada-mode/emacs_wisi_common_parse.ads 
b/packages/ada-mode/emacs_wisi_common_parse.ads
index bbef949..b6da3b4 100644
--- a/packages/ada-mode/emacs_wisi_common_parse.ads
+++ b/packages/ada-mode/emacs_wisi_common_parse.ads
@@ -2,7 +2,7 @@
 --
 --  Common utilities for Gen_Emacs_Wisi_*_Parse
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -21,11 +21,11 @@ pragma License (GPL);
 with Ada.Strings.Unbounded;
 with System;
 with Wisi;
-with WisiToken;
+with WisiToken.Parse.LR.Parser;
 package Emacs_Wisi_Common_Parse is
 
-   Protocol_Version : constant String := "1";
-   Version          : constant String := "1.0";
+   Protocol_Version : constant String := "2";
+   Version          : constant String := "2.0";
 
    Prompt : constant String := ";;> ";
 
@@ -58,21 +58,51 @@ package Emacs_Wisi_Common_Parse is
    --  raising Finish.
 
    type Parse_Params is record
-      Post_Parse_Action  : Wisi.Post_Parse_Action_Type;
-      Source_File_Name   : Ada.Strings.Unbounded.Unbounded_String;
-      Line_Count         : WisiToken.Line_Number_Type;
-      Debug_Mode         : Boolean;
-      Parse_Verbosity    : Integer;
-      McKenzie_Verbosity : Integer;
-      Action_Verbosity   : Integer;
-      McKenzie_Disable   : Integer;
-      Task_Count         : Integer;
-      Cost_Limit         : Integer;
-      Check_Limit        : Integer;
-      Enqueue_Limit      : Integer;
-      Byte_Count         : Integer;
+      Post_Parse_Action : Wisi.Post_Parse_Action_Type;
+      Source_File_Name  : Ada.Strings.Unbounded.Unbounded_String;
+
+      Begin_Byte_Pos : Integer;
+      --  Source file byte position of first char sent; start parse here.
+
+      End_Byte_Pos : Integer;
+      --  Byte position of last char sent.
+
+      Goal_Byte_Pos : Integer;
+      --  Byte position of end of desired parse region; terminate parse at
+      --  or after here.
+
+      Begin_Char_Pos : WisiToken.Buffer_Pos;
+      --  Char position of first char sent.
+
+      Begin_Line : WisiToken.Line_Number_Type;
+      End_Line   : WisiToken.Line_Number_Type;
+      --  Line number of line containing Begin_Byte_Pos, End_Byte_Pos
+
+      Begin_Indent : Integer;
+      --  Indentation of Line_Begin
+
+      Partial_Parse_Active : Boolean;
+      Debug_Mode           : Boolean;
+      Parse_Verbosity      : Integer;
+      McKenzie_Verbosity   : Integer;
+      Action_Verbosity     : Integer;
+      McKenzie_Disable     : Integer;
+      Task_Count           : Integer;
+      Cost_Limit           : Integer;
+      Check_Limit          : Integer;
+      Enqueue_Limit        : Integer;
+      Byte_Count           : Integer;
+      --  Count of bytes of source file sent.
    end record;
 
    function Get_Parse_Params (Command_Line : in String; Last : in out Integer) 
return Parse_Params;
 
+   procedure Parse_Stream
+     (Name                 : in     String;
+      Partial_Parse_Active : in out Boolean;
+      Params               : in     Process_Start_Params;
+      Parser               : in out WisiToken.Parse.LR.Parser.Parser;
+      Parse_Data           : in out Wisi.Parse_Data_Type'Class;
+      Descriptor           : in     WisiToken.Descriptor);
+
 end Emacs_Wisi_Common_Parse;
diff --git a/packages/ada-mode/env-project.el b/packages/ada-mode/env-project.el
deleted file mode 100644
index 53dc99b..0000000
--- a/packages/ada-mode/env-project.el
+++ /dev/null
@@ -1,70 +0,0 @@
-;;; env-project.el --- provide a root project type that holds a list of env 
vars  -*- lexical-binding:t -*-
-;;
-;; Copyright (C) 2017, 2019  Free Software Foundation, Inc.
-;;
-;; Author: Stephen Leake <address@hidden>
-;; Maintainer: Stephen Leake <address@hidden>
-;; Keywords: projects
-;; Version: 0
-;; package-requires: ((emacs "25.0"))
-;;
-;; This file is part of GNU Emacs.
-;;
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-;;
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'cl-lib)
-(require 'cl-generic)
-(require 'project)
-
-(eval-and-compile
-  (unless (fboundp 'refresh-project)
-  ;; In emacs 27
-
-  (cl-defgeneric project-refresh (prj)
-    "Refresh all cached data in PRJ.")
-
-  (defun refresh-project ()
-    (interactive)
-    (project-refresh (project-current)))
-
-  (cl-defgeneric project-select (prj)
-    "User has selected PRJ as the active project; take actions to make that 
so."
-    (setq compilation-search-path
-         (append (project-roots prj)
-                 (project-external-roots prj)))
-    )
-
-  (cl-defgeneric project-deselect (_prj)
-    "PRJ is the current project; user has selected another project.
-Undo actions done in `project-select'."
-    (setq compilation-search-path nil)
-    )
-  ))
-
-(cl-defstruct env-project
-  env-vars ;; a list of (NAME . VALUE)
-  )
-
-(cl-defmethod project-select :before ((prj env-project))
-  "Set the project env vars in ’process-environment’."
-  (dolist (pair (env-project-env-vars prj))
-    (setenv (car pair) (cdr pair))))
-
-(cl-defmethod project-deselect :after ((prj env-project))
-  "Unset the project env vars in ’process-environment’."
-  (dolist (pair (env-project-env-vars prj))
-    (setenv (car pair) nil)))
-
-(provide 'env-project)
-;; end of file
diff --git a/packages/ada-mode/gen_emacs_wisi_lr_parse.adb 
b/packages/ada-mode/gen_emacs_wisi_lr_parse.adb
index 1aa392c..caf4049 100644
--- a/packages/ada-mode/gen_emacs_wisi_lr_parse.adb
+++ b/packages/ada-mode/gen_emacs_wisi_lr_parse.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2014, 2017, 2018 All Rights Reserved.
+--  Copyright (C) 2014, 2017 - 2019 All Rights Reserved.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -18,201 +18,22 @@
 
 pragma License (GPL);
 
-with Ada.Command_Line;
-with Ada.Directories;
-with Ada.Exceptions;
-with Ada.Strings.Unbounded;
-with Ada.Text_IO; use Ada.Text_IO;
 with Emacs_Wisi_Common_Parse; use Emacs_Wisi_Common_Parse;
-with GNAT.Traceback.Symbolic;
-with System.Multiprocessors;
-with WisiToken.Lexer;
 with WisiToken.Parse.LR.Parser;
 with WisiToken.Text_IO_Trace;
 procedure Gen_Emacs_Wisi_LR_Parse
 is
-   use WisiToken; -- "+", "-" Unbounded_string
-
    Trace      : aliased WisiToken.Text_IO_Trace.Trace 
(Descriptor'Unrestricted_Access);
    Parser     : WisiToken.Parse.LR.Parser.Parser;
    Parse_Data : aliased Parse_Data_Type (Parser.Line_Begin_Token'Access);
 
-   procedure Cleanup
-   is begin
-      if Is_Open (Parser.Recover_Log_File) then
-         Close (Parser.Recover_Log_File);
-      end if;
-   end Cleanup;
-
+   Params : constant Process_Start_Params := Get_Process_Start_Params;
 begin
-   declare
-      use Ada.Directories;
-      use Ada.Strings.Unbounded;
-      Params : constant Process_Start_Params := Get_Process_Start_Params;
-   begin
-      Create_Parser
-        (Parser, Language_Fixes, Language_Use_Minimal_Complete_Actions, 
Language_String_ID_Set,
-         Trace'Unrestricted_Access,
-         Parse_Data'Unchecked_Access);
-
-      if Length (Params.Recover_Log_File_Name) > 0 then
-         Put_Line (";; logging to '" & (-Params.Recover_Log_File_Name) & "'"); 
--  to Current_Output, visible from Emacs
-         if Exists (-Params.Recover_Log_File_Name) then
-            Open (Parser.Recover_Log_File, Append_File, 
-Params.Recover_Log_File_Name);
-         else
-            Create (Parser.Recover_Log_File, Out_File, 
-Params.Recover_Log_File_Name);
-         end if;
-      end if;
-   end;
-
-   Put_Line (Name & " " & Version & ", protocol version " & Protocol_Version);
-
-   --  Read commands and tokens from standard_input via GNAT.OS_Lib,
-   --  send results to standard_output.
-   loop
-      Put (Prompt); Flush;
-      declare
-         Command_Length : constant Integer := Get_Command_Length;
-         Command_Line   : aliased String (1 .. Command_Length);
-         Last           : Integer;
-
-         function Match (Target : in String) return Boolean
-         is begin
-            Last := Command_Line'First + Target'Length - 1;
-            return Last <= Command_Line'Last and then Command_Line 
(Command_Line'First .. Last) = Target;
-         end Match;
-      begin
-         Read_Input (Command_Line'Address, Command_Length);
-
-         Put_Line (";; " & Command_Line);
-
-         if Match ("parse") then
-            --  Args: see Usage
-            --  Input: <source text>
-            --  Response:
-            --  [response elisp vector]...
-            --  [elisp error form]...
-            --  prompt
-            declare
-               Params : constant Parse_Params := Get_Parse_Params 
(Command_Line, Last);
-               Buffer : Ada.Strings.Unbounded.String_Access;
-
-               procedure Clean_Up
-               is begin
-                  Parser.Lexer.Discard_Rest_Of_Input;
-                  Parse_Data.Put
-                    (Parser.Lexer.Errors,
-                     Parser.Parsers.First.State_Ref.Errors,
-                     Parser.Parsers.First.State_Ref.Tree);
-                  Ada.Strings.Unbounded.Free (Buffer);
-               end Clean_Up;
-
-            begin
-               --  Computing Line_Count in elisp allows parsing in parallel 
with
-               --  sending source text.
-
-               Trace_Parse    := Params.Parse_Verbosity;
-               Trace_McKenzie := Params.McKenzie_Verbosity;
-               Trace_Action   := Params.Action_Verbosity;
-               Debug_Mode     := Params.Debug_Mode;
-
-               --  Default Enable_McKenzie_Recover is False if there is no 
McKenzie
-               --  information; don't override that.
-               Parser.Enable_McKenzie_Recover :=
-                 (if Params.McKenzie_Disable = 0
-                  then Parser.Enable_McKenzie_Recover
-                  else False);
-
-               Parse_Data.Initialize
-                 (Post_Parse_Action => Params.Post_Parse_Action,
-                  Descriptor        => Descriptor'Unrestricted_Access,
-                  Source_File_Name  => -Params.Source_File_Name,
-                  Line_Count        => Params.Line_Count,
-                  Params            => Command_Line (Last + 2 .. 
Command_Line'Last));
-
-               if Params.Task_Count > 0 then
-                  Parser.Table.McKenzie_Param.Task_Count := 
System.Multiprocessors.CPU_Range (Params.Task_Count);
-               end if;
-               if Params.Cost_Limit > 0 then
-                  Parser.Table.McKenzie_Param.Cost_Limit := Params.Cost_Limit;
-               end if;
-               if Params.Check_Limit > 0 then
-                  Parser.Table.McKenzie_Param.Check_Limit := Base_Token_Index 
(Params.Check_Limit);
-               end if;
-               if Params.Enqueue_Limit > 0 then
-                  Parser.Table.McKenzie_Param.Enqueue_Limit := 
Params.Enqueue_Limit;
-               end if;
-
-               Buffer := new String (1 .. Params.Byte_Count);
-               Read_Input (Buffer (1)'Address, Params.Byte_Count);
-
-               Parser.Lexer.Reset_With_String_Access (Buffer, 
Params.Source_File_Name);
-               Parser.Parse;
-               Parser.Execute_Actions;
-               Put (Parse_Data);
-               Clean_Up;
-
-            exception
-            when Syntax_Error =>
-               Clean_Up;
-               Put_Line ("(parse_error)");
-
-            when E : Parse_Error =>
-               Clean_Up;
-               Put_Line ("(parse_error """ & Ada.Exceptions.Exception_Message 
(E) & """)");
-
-            when E : Fatal_Error =>
-               Clean_Up;
-               Put_Line ("(error """ & Ada.Exceptions.Exception_Message (E) & 
""")");
-            end;
-
-         elsif Match ("noop") then
-            --  Args: <source byte count>
-            --  Input: <source text>
-            --  Response: prompt
-            declare
-               Byte_Count  : constant Integer                             := 
Get_Integer (Command_Line, Last);
-               Buffer      : constant Ada.Strings.Unbounded.String_Access := 
new String (1 .. Byte_Count);
-               Token       : Base_Token;
-               Lexer_Error : Boolean;
-               pragma Unreferenced (Lexer_Error);
-            begin
-               Token.ID := Invalid_Token_ID;
-               Read_Input (Buffer (1)'Address, Byte_Count);
-
-               Parser.Lexer.Reset_With_String_Access (Buffer, +"");
-               loop
-                  exit when Token.ID = Parser.Trace.Descriptor.EOF_ID;
-                  Lexer_Error := Parser.Lexer.Find_Next (Token);
-               end loop;
-            exception
-            when Syntax_Error =>
-               Parser.Lexer.Discard_Rest_Of_Input;
-            end;
-
-         elsif Match ("quit") then
-            exit;
+   Create_Parser
+     (Parser, Language_Fixes, Language_Use_Minimal_Complete_Actions, 
Language_String_ID_Set,
+      Trace'Unrestricted_Access,
+      Parse_Data'Unchecked_Access);
 
-         else
-            Put_Line ("(error ""bad command: '" & Command_Line & "'"")");
-         end if;
-      exception
-      when E : Protocol_Error =>
-         --  don't exit the loop; allow debugging bad elisp
-         Put_Line ("(error ""protocol error "": " & 
Ada.Exceptions.Exception_Message (E) & """)");
-      end;
-   end loop;
-   Cleanup;
-exception
-when Finish =>
-   null;
+   Parse_Stream (Name, Partial_Parse_Active, Params, Parser, Parse_Data, 
Descriptor);
 
-when E : others =>
-   Cleanup;
-   Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
-   New_Line (2);
-   Put_Line
-     ("(error ""unhandled exception: " & Ada.Exceptions.Exception_Name (E) & 
": " &
-        Ada.Exceptions.Exception_Message (E) & """)");
-   Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E));
 end Gen_Emacs_Wisi_LR_Parse;
diff --git a/packages/ada-mode/gen_emacs_wisi_lr_parse.ads 
b/packages/ada-mode/gen_emacs_wisi_lr_parse.ads
index 3d9ec4d..1e8eb2d 100644
--- a/packages/ada-mode/gen_emacs_wisi_lr_parse.ads
+++ b/packages/ada-mode/gen_emacs_wisi_lr_parse.ads
@@ -14,7 +14,7 @@
 --  [2] On the Ada side, it is defined here, and in
 --  wisitoken-wisi_runtime.adb
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -36,11 +36,12 @@ with Wisi;
 generic
    type Parse_Data_Type  is new Wisi.Parse_Data_Type with private;
 
-   Name                         : in String; --  for Usage, error messages.
-   Descriptor                   : in WisiToken.Descriptor;
-   Language_Fixes               : in 
WisiToken.Parse.LR.Parser.Language_Fixes_Access;
+   Name                                  : in String; --  for Usage, error 
messages.
+   Descriptor                            : in WisiToken.Descriptor;
+   Partial_Parse_Active                  : in out Boolean;
+   Language_Fixes                        : in 
WisiToken.Parse.LR.Parser.Language_Fixes_Access;
    Language_Use_Minimal_Complete_Actions : in 
WisiToken.Parse.LR.Parser.Language_Use_Minimal_Complete_Actions_Access;
-   Language_String_ID_Set       : in 
WisiToken.Parse.LR.Parser.Language_String_ID_Set_Access;
+   Language_String_ID_Set                : in 
WisiToken.Parse.LR.Parser.Language_String_ID_Set_Access;
 
    with procedure Create_Parser
      (Parser                       :    out          
WisiToken.Parse.LR.Parser.Parser;
diff --git a/packages/ada-mode/gen_emacs_wisi_lr_text_rep_parse.adb 
b/packages/ada-mode/gen_emacs_wisi_lr_text_rep_parse.adb
index e044a42..43d7403 100644
--- a/packages/ada-mode/gen_emacs_wisi_lr_text_rep_parse.adb
+++ b/packages/ada-mode/gen_emacs_wisi_lr_text_rep_parse.adb
@@ -1,220 +1,44 @@
---  Abstract :
---
---  See spec.
---
---  Copyright (C) 2014, 2017, 2018 All Rights Reserved.
---
---  This program is free software; you can redistribute it and/or
---  modify it under terms of the GNU General Public License as
---  published by the Free Software Foundation; either version 3, or (at
---  your option) any later version. This program is distributed in the
---  hope that it will be useful, but WITHOUT ANY WARRANTY; without even
---  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
---  PURPOSE. See the GNU General Public License for more details. You
---  should have received a copy of the GNU General Public License
---  distributed with this program; see file COPYING. If not, write to
---  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
---  MA 02110-1335, USA.
-
-pragma License (GPL);
-
-with Ada.Command_Line;
-with Ada.Directories;
-with Ada.Exceptions;
-with Ada.Strings.Unbounded;
-with Ada.Text_IO; use Ada.Text_IO;
-with Emacs_Wisi_Common_Parse; use Emacs_Wisi_Common_Parse;
-with GNAT.Traceback.Symbolic;
-with System.Multiprocessors;
-with WisiToken.Lexer;
-with WisiToken.Parse.LR.Parser;
-with WisiToken.Text_IO_Trace;
-procedure Gen_Emacs_Wisi_LR_Text_Rep_Parse
-is
-   use WisiToken; -- "+", "-" Unbounded_string
-
-   Trace      : aliased WisiToken.Text_IO_Trace.Trace 
(Descriptor'Unrestricted_Access);
-   Parser     : WisiToken.Parse.LR.Parser.Parser;
-   Parse_Data : aliased Parse_Data_Type (Parser.Line_Begin_Token'Access);
-
-   procedure Cleanup
-   is begin
-      if Is_Open (Parser.Recover_Log_File) then
-         Close (Parser.Recover_Log_File);
-      end if;
-   end Cleanup;
-
-begin
-
-   declare
-      use Ada.Directories;
-      use Ada.Strings.Unbounded;
-      Params : constant Process_Start_Params := Get_Process_Start_Params;
-   begin
-      Create_Parser
-        (Parser, Language_Fixes, Language_Use_Minimal_Complete_Actions, 
Language_String_ID_Set,
-         Trace'Unrestricted_Access,
-         Parse_Data'Unchecked_Access,
-         Ada.Directories.Containing_Directory (Ada.Command_Line.Command_Name) 
& "/" & Text_Rep_File_Name);
-
-      if Length (Params.Recover_Log_File_Name) > 0 then
-         Put_Line (";; logging to '" & (-Params.Recover_Log_File_Name) & "'"); 
--  to Current_Output, visible from Emacs
-         if Exists (-Params.Recover_Log_File_Name) then
-            Open (Parser.Recover_Log_File, Append_File, 
-Params.Recover_Log_File_Name);
-         else
-            Create (Parser.Recover_Log_File, Out_File, 
-Params.Recover_Log_File_Name);
-         end if;
-      end if;
-   end;
-
-   Put_Line (Name & " " & Version & ", protocol version " & Protocol_Version);
-
-   --  Read commands and tokens from standard_input via GNAT.OS_Lib,
-   --  send results to standard_output.
-   loop
-      Put (Prompt); Flush;
-      declare
-         Command_Length : constant Integer := Get_Command_Length;
-         Command_Line   : aliased String (1 .. Command_Length);
-         Last           : Integer;
-
-         function Match (Target : in String) return Boolean
-         is begin
-            Last := Command_Line'First + Target'Length - 1;
-            return Last <= Command_Line'Last and then Command_Line 
(Command_Line'First .. Last) = Target;
-         end Match;
-      begin
-         Read_Input (Command_Line'Address, Command_Length);
-
-         Put_Line (";; " & Command_Line);
-
-         if Match ("parse") then
-            --  Args: see Usage
-            --  Input: <source text>
-            --  Response:
-            --  [response elisp vector]...
-            --  [elisp error form]...
-            --  prompt
-            declare
-               Params : constant Parse_Params := Get_Parse_Params 
(Command_Line, Last);
-               Buffer : Ada.Strings.Unbounded.String_Access;
-
-               procedure Clean_Up
-               is begin
-                  Parser.Lexer.Discard_Rest_Of_Input;
-                  Parse_Data.Put
-                    (Parser.Lexer.Errors,
-                     Parser.Parsers.First.State_Ref.Errors,
-                     Parser.Parsers.First.State_Ref.Tree);
-                  Ada.Strings.Unbounded.Free (Buffer);
-               end Clean_Up;
-
-            begin
-               --  Computing Line_Count in elisp allows parsing in parallel 
with
-               --  sending source text.
-
-               Trace_Parse    := Params.Parse_Verbosity;
-               Trace_McKenzie := Params.McKenzie_Verbosity;
-               Trace_Action   := Params.Action_Verbosity;
-               Debug_Mode     := Params.Debug_Mode;
-
-               --  Default Enable_McKenzie_Recover is False if there is no 
McKenzie
-               --  information; don't override that.
-               Parser.Enable_McKenzie_Recover :=
-                 (if Params.McKenzie_Disable = 0
-                  then Parser.Enable_McKenzie_Recover
-                  else False);
-
-               Parse_Data.Initialize
-                 (Post_Parse_Action => Params.Post_Parse_Action,
-                  Descriptor        => Descriptor'Unrestricted_Access,
-                  Source_File_Name  => -Params.Source_File_Name,
-                  Line_Count        => Params.Line_Count,
-                  Params            => Command_Line (Last + 2 .. 
Command_Line'Last));
-
-               if Params.Task_Count > 0 then
-                  Parser.Table.McKenzie_Param.Task_Count := 
System.Multiprocessors.CPU_Range (Params.Task_Count);
-               end if;
-               if Params.Cost_Limit > 0 then
-                  Parser.Table.McKenzie_Param.Cost_Limit := Params.Cost_Limit;
-               end if;
-               if Params.Check_Limit > 0 then
-                  Parser.Table.McKenzie_Param.Check_Limit := Base_Token_Index 
(Params.Check_Limit);
-               end if;
-               if Params.Enqueue_Limit > 0 then
-                  Parser.Table.McKenzie_Param.Enqueue_Limit := 
Params.Enqueue_Limit;
-               end if;
-
-               Buffer := new String (1 .. Params.Byte_Count);
-               Read_Input (Buffer (1)'Address, Params.Byte_Count);
-
-               Parser.Lexer.Reset_With_String_Access (Buffer, 
Params.Source_File_Name);
-               Parser.Parse;
-               Parser.Execute_Actions;
-               Put (Parse_Data);
-               Clean_Up;
-
-            exception
-            when Syntax_Error =>
-               Clean_Up;
-               Put_Line ("(parse_error)");
-
-            when E : Parse_Error =>
-               Clean_Up;
-               Put_Line ("(parse_error """ & Ada.Exceptions.Exception_Message 
(E) & """)");
-
-            when E : Fatal_Error =>
-               Clean_Up;
-               Put_Line ("(error """ & Ada.Exceptions.Exception_Message (E) & 
""")");
-            end;
-
-         elsif Match ("noop") then
-            --  Args: <source byte count>
-            --  Input: <source text>
-            --  Response: prompt
-            declare
-               Byte_Count  : constant Integer                             := 
Get_Integer (Command_Line, Last);
-               Buffer      : constant Ada.Strings.Unbounded.String_Access := 
new String (1 .. Byte_Count);
-               Token       : Base_Token;
-               Lexer_Error : Boolean;
-               pragma Unreferenced (Lexer_Error);
-            begin
-               Token.ID := Invalid_Token_ID;
-               Read_Input (Buffer (1)'Address, Byte_Count);
-
-               Parser.Lexer.Reset_With_String_Access (Buffer, +"");
-               loop
-                  exit when Token.ID = Parser.Trace.Descriptor.EOF_ID;
-                  Lexer_Error := Parser.Lexer.Find_Next (Token);
-               end loop;
-            exception
-            when Syntax_Error =>
-               Parser.Lexer.Discard_Rest_Of_Input;
-            end;
-
-         elsif Match ("quit") then
-            exit;
-
-         else
-            Put_Line ("(error ""bad command: '" & Command_Line & "'"")");
-         end if;
-      exception
-      when E : Protocol_Error =>
-         --  don't exit the loop; allow debugging bad elisp
-         Put_Line ("(error ""protocol error "": " & 
Ada.Exceptions.Exception_Message (E) & """)");
-      end;
-   end loop;
-   Cleanup;
-exception
-when Finish =>
-   null;
-
-when E : others =>
-   Cleanup;
-   Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
-   New_Line (2);
-   Put_Line
-     ("(error ""unhandled exception: " & Ada.Exceptions.Exception_Name (E) & 
": " &
-        Ada.Exceptions.Exception_Message (E) & """)");
-   Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E));
-end Gen_Emacs_Wisi_LR_Text_Rep_Parse;
+--  Abstract :
+--
+--  See spec.
+--
+--  Copyright (C) 2014, 2017 - 2019 All Rights Reserved.
+--
+--  This program is free software; you can redistribute it and/or
+--  modify it under terms of the GNU General Public License as
+--  published by the Free Software Foundation; either version 3, or (at
+--  your option) any later version. This program is distributed in the
+--  hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+--  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+--  PURPOSE. See the GNU General Public License for more details. You
+--  should have received a copy of the GNU General Public License
+--  distributed with this program; see file COPYING. If not, write to
+--  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
+--  MA 02110-1335, USA.
+
+pragma License (GPL);
+
+with Ada.Command_Line;
+with Ada.Directories;
+with Emacs_Wisi_Common_Parse; use Emacs_Wisi_Common_Parse;
+
+with WisiToken.Text_IO_Trace;
+procedure Gen_Emacs_Wisi_LR_Text_Rep_Parse
+is
+   use WisiToken; -- "+", "-" Unbounded_string
+
+   Trace      : aliased WisiToken.Text_IO_Trace.Trace 
(Descriptor'Unrestricted_Access);
+   Parser     : WisiToken.Parse.LR.Parser.Parser;
+   Parse_Data : aliased Parse_Data_Type (Parser.Line_Begin_Token'Access);
+
+   Params : constant Process_Start_Params := Get_Process_Start_Params;
+begin
+   Create_Parser
+     (Parser, Language_Fixes, Language_Use_Minimal_Complete_Actions, 
Language_String_ID_Set,
+      Trace'Unrestricted_Access,
+      Parse_Data'Unchecked_Access,
+      Ada.Directories.Containing_Directory (Ada.Command_Line.Command_Name) & 
"/" & Text_Rep_File_Name);
+
+   Parse_Stream (Name, Partial_Parse_Active, Params, Parser, Parse_Data, 
Descriptor);
+
+end Gen_Emacs_Wisi_LR_Text_Rep_Parse;
diff --git a/packages/ada-mode/gen_emacs_wisi_lr_text_rep_parse.ads 
b/packages/ada-mode/gen_emacs_wisi_lr_text_rep_parse.ads
index e00ed6d..fe97433 100644
--- a/packages/ada-mode/gen_emacs_wisi_lr_text_rep_parse.ads
+++ b/packages/ada-mode/gen_emacs_wisi_lr_text_rep_parse.ads
@@ -7,7 +7,7 @@
 --
 --  References : see gen_emacs_wisi_lr_parse.ads
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017, 2018, 2019 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -29,12 +29,13 @@ with Wisi;
 generic
    type Parse_Data_Type  is new Wisi.Parse_Data_Type with private;
 
-   Name                         : in String; --  for Usage, error messages. 
"_wisi_parse" will be appended
-   Descriptor                   : in WisiToken.Descriptor;
-   Language_Fixes               : in 
WisiToken.Parse.LR.Parser.Language_Fixes_Access;
+   Name                                  : in String; --  for Usage, error 
messages. "_wisi_parse" will be appended
+   Descriptor                            : in WisiToken.Descriptor;
+   Partial_Parse_Active                  : in out Boolean;
+   Language_Fixes                        : in 
WisiToken.Parse.LR.Parser.Language_Fixes_Access;
    Language_Use_Minimal_Complete_Actions : in 
WisiToken.Parse.LR.Parser.Language_Use_Minimal_Complete_Actions_Access;
-   Language_String_ID_Set       : in 
WisiToken.Parse.LR.Parser.Language_String_ID_Set_Access;
-   Text_Rep_File_Name           : in String;
+   Language_String_ID_Set                : in 
WisiToken.Parse.LR.Parser.Language_String_ID_Set_Access;
+   Text_Rep_File_Name                    : in String;
 
    with procedure Create_Parser
      (Parser                       :    out          
WisiToken.Parse.LR.Parser.Parser;
diff --git a/packages/ada-mode/gen_run_wisi_lr_parse.adb 
b/packages/ada-mode/gen_run_wisi_lr_parse.adb
index dd36990..63fd7ec 100644
--- a/packages/ada-mode/gen_run_wisi_lr_parse.adb
+++ b/packages/ada-mode/gen_run_wisi_lr_parse.adb
@@ -1,163 +1,37 @@
---  Abstract :
---
---  See spec.
---
---  Copyright (C) 2017, 2018 All Rights Reserved.
---
---  This program is free software; you can redistribute it and/or
---  modify it under terms of the GNU General Public License as
---  published by the Free Software Foundation; either version 3, or (at
---  your option) any later version. This program is distributed in the
---  hope that it will be useful, but WITHOUT ANY WARRANTY; without even
---  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
---  PURPOSE. See the GNU General Public License for more details. You
---  should have received a copy of the GNU General Public License
---  distributed with this program; see file COPYING. If not, write to
---  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
---  MA 02110-1335, USA.
-
-pragma License (GPL);
-
-with Ada.Command_Line;
-with Ada.Exceptions;
-with Ada.IO_Exceptions;
-with Ada.Real_Time;
-with Ada.Text_IO; use Ada.Text_IO;
-with GNAT.Traceback.Symbolic;
-with Run_Wisi_Common_Parse; use Run_Wisi_Common_Parse;
-with SAL;
-with WisiToken.Lexer;
-with WisiToken.Parse.LR.Parser;
-with WisiToken.Text_IO_Trace;
-procedure Gen_Run_Wisi_LR_Parse
-is
-   use WisiToken; -- Token_ID, "+", "-" Unbounded_string
-
-   Trace      : aliased WisiToken.Text_IO_Trace.Trace 
(Descriptor'Unrestricted_Access);
-   Parser     : WisiToken.Parse.LR.Parser.Parser;
-   Parse_Data : aliased Parse_Data_Type (Parser.Line_Begin_Token'Access);
-
-   Cl_Params  : Command_Line_Params;
-   Line_Count : WisiToken.Line_Number_Type := 1;
-   Start      : Ada.Real_Time.Time;
-begin
-   --  Create parser first so Put_Usage has defaults from Parser.Table,
-   --  and Get_CL_Params can override them.
-   Create_Parser
-     (Parser, Language_Fixes, Language_Use_Minimal_Complete_Actions, 
Language_String_ID_Set,
-      Trace'Unrestricted_Access, Parse_Data'Unchecked_Access);
-
-   Cl_Params := Get_CL_Params (Parser);
-
-   --  Do this after setting Trace_Parse so lexer verbosity is set
-   begin
-      Parser.Lexer.Reset_With_File (-Cl_Params.Source_File_Name);
-   exception
-   when Ada.IO_Exceptions.Name_Error =>
-      Put_Line (Standard_Error, "'" & (-Cl_Params.Source_File_Name) & "' 
cannot be opened");
-      return;
-   end;
-
-   --  See comment in wisi.ads for why we still need this.
-   declare
-      Token : Base_Token;
-      Lexer_Error : Boolean;
-      pragma Unreferenced (Lexer_Error);
-   begin
-      loop
-         begin
-            Lexer_Error := Parser.Lexer.Find_Next (Token);
-            exit when Token.ID = Descriptor.EOF_ID;
-         exception
-         when WisiToken.Syntax_Error =>
-            Parser.Lexer.Discard_Rest_Of_Input;
-            Parse_Data.Put
-              (Parser.Lexer.Errors,
-               Parser.Parsers.First.State_Ref.Errors,
-               Parser.Parsers.First.State_Ref.Tree);
-            Put_Line ("(lexer_error)");
-         end;
-      end loop;
-      Line_Count := Token.Line;
-   end;
-
-   if WisiToken.Trace_Action > WisiToken.Outline then
-      Put_Line ("line_count:" & Line_Number_Type'Image (Line_Count));
-   end if;
-
-   Parse_Data.Initialize
-     (Post_Parse_Action => Cl_Params.Post_Parse_Action,
-      Descriptor        => Descriptor'Unrestricted_Access,
-      Source_File_Name  => -Cl_Params.Source_File_Name,
-      Line_Count        => Line_Count,
-      Params            => -Cl_Params.Lang_Params);
-
-   if Cl_Params.Repeat_Count > 1 then
-      Start := Ada.Real_Time.Clock;
-   end if;
-
-   for I in 1 .. Cl_Params.Repeat_Count loop
-      declare
-         procedure Clean_Up
-         is begin
-            Parser.Lexer.Discard_Rest_Of_Input;
-            if Cl_Params.Repeat_Count = 1 then
-               Parse_Data.Put
-                 (Parser.Lexer.Errors,
-                  Parser.Parsers.First.State_Ref.Errors,
-                  Parser.Parsers.First.State_Ref.Tree);
-            end if;
-         end Clean_Up;
-
-      begin
-         Parse_Data.Reset;
-         Parser.Lexer.Reset;
-
-         Parser.Parse;
-         Parser.Execute_Actions;
-
-         if Cl_Params.Repeat_Count = 1 then
-            Parse_Data.Put;
-            Parse_Data.Put
-              (Parser.Lexer.Errors,
-               Parser.Parsers.First.State_Ref.Errors,
-               Parser.Parsers.First.State_Ref.Tree);
-         end if;
-      exception
-      when WisiToken.Syntax_Error =>
-         Clean_Up;
-         Put_Line ("(parse_error)");
-
-      when E : WisiToken.Parse_Error =>
-         Clean_Up;
-         Put_Line ("(parse_error """ & Ada.Exceptions.Exception_Message (E) & 
""")");
-
-      when E : WisiToken.Fatal_Error =>
-         Clean_Up;
-         Put_Line ("(error """ & Ada.Exceptions.Exception_Message (E) & """)");
-      end;
-   end loop;
-
-   if Cl_Params.Repeat_Count > 1 then
-      declare
-         use Ada.Real_Time;
-         Finish : constant Time := Clock;
-      begin
-         Put_Line ("Total time:" & Duration'Image (To_Duration (Finish - 
Start)));
-         Put_Line ("per iteration:" & Duration'Image (To_Duration ((Finish - 
Start) / Cl_Params.Repeat_Count)));
-      end;
-   end if;
-
-exception
-when SAL.Parameter_Error | Finish =>
-   --  From Get_CL_Params; already handled.
-   null;
-
-when E : others =>
-   Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
-   New_Line (2);
-   Put_Line
-     ("(error ""unhandled exception: " & Ada.Exceptions.Exception_Name (E) & 
": " &
-        Ada.Exceptions.Exception_Message (E) & """)");
-   Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E));
-end Gen_Run_Wisi_LR_Parse;
+--  Abstract :
+--
+--  See spec.
+--
+--  Copyright (C) 2017 - 2019 All Rights Reserved.
+--
+--  This program is free software; you can redistribute it and/or
+--  modify it under terms of the GNU General Public License as
+--  published by the Free Software Foundation; either version 3, or (at
+--  your option) any later version. This program is distributed in the
+--  hope that it will be useful, but WITHOUT ANY WARRANTY; without even
+--  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+--  PURPOSE. See the GNU General Public License for more details. You
+--  should have received a copy of the GNU General Public License
+--  distributed with this program; see file COPYING. If not, write to
+--  the Free Software Foundation, 51 Franklin Street, Suite 500, Boston,
+--  MA 02110-1335, USA.
+
+pragma License (GPL);
+
+with Run_Wisi_Common_Parse;
+with WisiToken.Text_IO_Trace;
+procedure Gen_Run_Wisi_LR_Parse
+is
+   Trace      : aliased WisiToken.Text_IO_Trace.Trace 
(Descriptor'Unrestricted_Access);
+   Parser     : WisiToken.Parse.LR.Parser.Parser;
+   Parse_Data : aliased Parse_Data_Type (Parser.Line_Begin_Token'Access);
+begin
+   --  Create parser first so Put_Usage has defaults from Parser.Table,
+   --  and Get_CL_Params can override them.
+   Create_Parser
+     (Parser, Language_Fixes, Language_Use_Minimal_Complete_Actions, 
Language_String_ID_Set,
+      Trace'Unrestricted_Access, Parse_Data'Unchecked_Access);
+
+   Run_Wisi_Common_Parse.Parse_File (Parser, Parse_Data, Descriptor);
+
+end Gen_Run_Wisi_LR_Parse;
diff --git a/packages/ada-mode/gen_run_wisi_lr_text_rep_parse.adb 
b/packages/ada-mode/gen_run_wisi_lr_text_rep_parse.adb
index b3a7283..f95a395 100644
--- a/packages/ada-mode/gen_run_wisi_lr_text_rep_parse.adb
+++ b/packages/ada-mode/gen_run_wisi_lr_text_rep_parse.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 All Rights Reserved.
+--  Copyright (C) 2017 - 2019 All Rights Reserved.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -20,28 +20,16 @@ pragma License (GPL);
 
 with Ada.Command_Line;
 with Ada.Directories;
-with Ada.Exceptions;
-with Ada.IO_Exceptions;
-with Ada.Real_Time;
-with Ada.Text_IO; use Ada.Text_IO;
-with GNAT.Traceback.Symbolic;
-with Run_Wisi_Common_Parse; use Run_Wisi_Common_Parse;
-with SAL;
-with WisiToken.Lexer;
-with WisiToken.Parse.LR.Parser;
+with Run_Wisi_Common_Parse;
 with WisiToken.Text_IO_Trace;
 procedure Gen_Run_Wisi_LR_Text_Rep_Parse
 is
-   use WisiToken; -- Token_ID, "+", "-" Unbounded_string
-
    Trace      : aliased WisiToken.Text_IO_Trace.Trace 
(Descriptor'Unrestricted_Access);
    Parser     : WisiToken.Parse.LR.Parser.Parser;
    Parse_Data : aliased Parse_Data_Type (Parser.Line_Begin_Token'Access);
-
-   Cl_Params  : Command_Line_Params;
-   Line_Count : WisiToken.Line_Number_Type := 1;
-   Start      : Ada.Real_Time.Time;
 begin
+   --  Create parser first so Put_Usage has defaults from Parser.Table,
+   --  and Get_CL_Params can override them.
    declare
       use Ada.Command_Line;
    begin
@@ -50,120 +38,7 @@ begin
         (Parser, Language_Fixes, Language_Use_Minimal_Complete_Actions, 
Language_String_ID_Set,
          Trace'Unrestricted_Access, Parse_Data'Unchecked_Access,
          Ada.Directories.Containing_Directory (Command_Name) & "/" & 
Text_Rep_File_Name);
-   end;
 
-   --  Some command line params set params in the parser.
-   Cl_Params := Get_CL_Params (Parser);
-
-   --  Do this after setting Trace_Parse so lexer verbosity is set
-   begin
-      Parser.Lexer.Reset_With_File (-Cl_Params.Source_File_Name);
-   exception
-   when Ada.IO_Exceptions.Name_Error =>
-      Put_Line (Standard_Error, "'" & (-Cl_Params.Source_File_Name) & "' 
cannot be opened");
-      return;
+      Run_Wisi_Common_Parse.Parse_File (Parser, Parse_Data, Descriptor);
    end;
-
-   --  See comment in wisi.ads for why we still need this.
-   declare
-      Token : Base_Token;
-      Lexer_Error : Boolean;
-      pragma Unreferenced (Lexer_Error);
-   begin
-      loop
-         begin
-            Lexer_Error := Parser.Lexer.Find_Next (Token);
-            exit when Token.ID = Descriptor.EOF_ID;
-         exception
-         when WisiToken.Syntax_Error =>
-            Parser.Lexer.Discard_Rest_Of_Input;
-            Parse_Data.Put
-              (Parser.Lexer.Errors,
-               Parser.Parsers.First.State_Ref.Errors,
-               Parser.Parsers.First.State_Ref.Tree);
-            Put_Line ("(lexer_error)");
-         end;
-      end loop;
-      Line_Count := Token.Line;
-   end;
-
-   if WisiToken.Trace_Action > WisiToken.Outline then
-      Put_Line ("line_count:" & Line_Number_Type'Image (Line_Count));
-   end if;
-
-   Parse_Data.Initialize
-     (Post_Parse_Action => Cl_Params.Post_Parse_Action,
-      Descriptor        => Descriptor'Unrestricted_Access,
-      Source_File_Name  => -Cl_Params.Source_File_Name,
-      Line_Count        => Line_Count,
-      Params            => -Cl_Params.Lang_Params);
-
-   if Cl_Params.Repeat_Count > 1 then
-      Start := Ada.Real_Time.Clock;
-   end if;
-
-   for I in 1 .. Cl_Params.Repeat_Count loop
-      declare
-         procedure Clean_Up
-         is begin
-            Parser.Lexer.Discard_Rest_Of_Input;
-            if Cl_Params.Repeat_Count = 1 then
-               Parse_Data.Put
-                 (Parser.Lexer.Errors,
-                  Parser.Parsers.First.State_Ref.Errors,
-                  Parser.Parsers.First.State_Ref.Tree);
-            end if;
-         end Clean_Up;
-
-      begin
-         Parse_Data.Reset;
-         Parser.Lexer.Reset;
-
-            Parser.Parse;
-            Parser.Execute_Actions;
-
-         if Cl_Params.Repeat_Count = 1 then
-            Parse_Data.Put;
-            Parse_Data.Put
-              (Parser.Lexer.Errors,
-               Parser.Parsers.First.State_Ref.Errors,
-               Parser.Parsers.First.State_Ref.Tree);
-         end if;
-      exception
-      when WisiToken.Syntax_Error =>
-         Clean_Up;
-         Put_Line ("(parse_error)");
-
-      when E : WisiToken.Parse_Error =>
-         Clean_Up;
-         Put_Line ("(parse_error """ & Ada.Exceptions.Exception_Message (E) & 
""")");
-
-      when E : WisiToken.Fatal_Error =>
-         Clean_Up;
-         Put_Line ("(error """ & Ada.Exceptions.Exception_Message (E) & """)");
-      end;
-   end loop;
-
-   if Cl_Params.Repeat_Count > 1 then
-      declare
-         use Ada.Real_Time;
-         Finish : constant Time := Clock;
-      begin
-         Put_Line ("Total time:" & Duration'Image (To_Duration (Finish - 
Start)));
-         Put_Line ("per iteration:" & Duration'Image (To_Duration ((Finish - 
Start) / Cl_Params.Repeat_Count)));
-      end;
-   end if;
-
-exception
-when SAL.Parameter_Error | Finish =>
-   --  From Get_CL_Params; already handled.
-   null;
-
-when E : others =>
-   Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
-   New_Line (2);
-   Put_Line
-     ("(error ""unhandled exception: " & Ada.Exceptions.Exception_Name (E) & 
": " &
-        Ada.Exceptions.Exception_Message (E) & """)");
-   Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E));
 end Gen_Run_Wisi_LR_Text_Rep_Parse;
diff --git a/packages/ada-mode/gnat-core.el b/packages/ada-mode/gnat-core.el
index 4291fe4..2569ef9 100644
--- a/packages/ada-mode/gnat-core.el
+++ b/packages/ada-mode/gnat-core.el
@@ -3,7 +3,7 @@
 ;;
 ;; GNAT is provided by AdaCore; see http://libre.adacore.com/
 ;;
-;;; Copyright (C) 2012 - 2018  Free Software Foundation, Inc.
+;;; Copyright (C) 2012 - 2019  Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;; Maintainer: Stephen Leake <address@hidden>
@@ -440,6 +440,7 @@ list."
     ("a-chahan" . "Ada.Characters.Handling")
     ("a-comlin" . "Ada.Command_Line")
     ("a-contai" . "Ada.Containers")
+    ("a-direct" . "Ada.Directories")
     ("a-except" . "Ada.Exceptions")
     ("a-ioexce" . "Ada.IO_Exceptions")
     ("a-numeri" . "Ada.Numerics")
diff --git a/packages/ada-mode/gpr-lalr-elisp.el 
b/packages/ada-mode/gpr-lalr-elisp.el
index 32a6225..6873bc8 100644
--- a/packages/ada-mode/gpr-lalr-elisp.el
+++ b/packages/ada-mode/gpr-lalr-elisp.el
@@ -1,7 +1,7 @@
 ;;; gpr-lalr-elisp.el --- Generated parser support file  -*- lexical-binding:t 
-*-
 ;;  command line: wisitoken-bnf-generate.exe  --generate LALR elisp elisp 
gpr.wy
 
-;;  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+;;  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 ;;  This program is free software; you can redistribute it and/or
 ;;  modify it under the terms of the GNU General Public License as
@@ -75,20 +75,20 @@
         (wisi-indent-action [0 (wisi-anchored 1 1) (wisi-anchored 1 0)])))
       (attribute_declaration
        ((FOR IDENTIFIER USE expression SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-function-name-face])
       (wisi-indent-action [0 gpr-indent-broken 0 gpr-indent-broken 0])))
        ((FOR IDENTIFIER LEFT_PAREN discrete_choice RIGHT_PAREN USE expression 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 8 statement-end])
-      (wisi-face-apply-action [2 nil font-lock-function-name-face])
-      (wisi-indent-action [0 gpr-indent-broken (- gpr-indent-broken 1) 
gpr-indent-broken (- gpr-indent-broken 1) 0
+        (progn
+      (wisi-statement-action [1 statement-start 8 statement-end])
+      (wisi-face-apply-action [2 nil font-lock-function-name-face])
+      (wisi-indent-action [0 gpr-indent-broken (- gpr-indent-broken 1) 
gpr-indent-broken (- gpr-indent-broken 1) 0
                              gpr-indent-broken 0])))
        ((FOR EXTERNAL LEFT_PAREN STRING_LITERAL RIGHT_PAREN USE expression 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 8 statement-end])
-      (wisi-indent-action [0 gpr-indent-broken (- gpr-indent-broken 1) 
gpr-indent-broken (- gpr-indent-broken 1) 0
+        (progn
+      (wisi-statement-action [1 statement-start 8 statement-end])
+      (wisi-indent-action [0 gpr-indent-broken (- gpr-indent-broken 1) 
gpr-indent-broken (- gpr-indent-broken 1) 0
                              gpr-indent-broken 0]))))
       (attribute_prefix
        ((PROJECT ))
@@ -98,21 +98,22 @@
        ((attribute_prefix QUOTE IDENTIFIER LEFT_PAREN STRING_LITERAL 
RIGHT_PAREN )))
       (case_statement
        ((CASE name IS case_items END CASE SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-containing-action 1 4);; for gpr-which-function
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-containing-action 1 4);; for gpr-which-function
       (wisi-indent-action [0 gpr-indent-broken 0 [gpr-indent-when 
gpr-indent-when] 0 0 0]))))
       (case_item
        ((WHEN discrete_choice_list EQUAL_GREATER declarative_items_opt )
-        (progn
-      (wisi-statement-action [1 motion])
+        (progn
+      (wisi-statement-action [1 motion])
       (wisi-indent-action [0 gpr-indent-broken gpr-indent gpr-indent]))))
       (case_items
        (())
        ((case_item ))
        ((case_items case_item )))
       (compilation_unit
-       ((context_clause_opt project_qualifier_opt project_declaration_opt )))
+       ((context_clause_opt project_qualifier_opt project_declaration_opt )
+        (wisi-indent-action [0 0 [0 0]])))
       (context_clause
        ((with_clause ))
        ((context_clause with_clause )))
@@ -154,22 +155,22 @@
        ((package_renaming )))
       (package_spec
        ((PACKAGE identifier_opt IS declarative_items_opt END identifier_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-containing-action 1 4)
-      (wisi-face-apply-action [2 nil font-lock-function-name-face 6 nil 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-containing-action 1 4)
+      (wisi-face-apply-action [2 nil font-lock-function-name-face 6 nil 
font-lock-function-name-face])
       (wisi-indent-action [0 gpr-indent-broken 0 [gpr-indent gpr-indent] 0 0 
0]))))
       (package_extension
        ((PACKAGE identifier_opt EXTENDS name IS declarative_items_opt END 
identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 9 statement-end])
-      (wisi-containing-action 1 6)
-      (wisi-face-apply-action [2 nil font-lock-function-name-face 8 nil 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 9 statement-end])
+      (wisi-containing-action 1 6)
+      (wisi-face-apply-action [2 nil font-lock-function-name-face 8 nil 
font-lock-function-name-face])
       (wisi-indent-action [0 gpr-indent-broken 0 gpr-indent-broken 0 
[gpr-indent gpr-indent] 0 0 0]))))
       (package_renaming
        ((PACKAGE identifier_opt RENAMES name SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
       (wisi-face-apply-action [2 nil font-lock-function-name-face 4 nil 
font-lock-function-name-face]))))
       (project_declaration_opt
        (())
@@ -177,10 +178,10 @@
        ((project_extension )))
       (project_extension
        ((PROJECT identifier_opt EXTENDS STRING_LITERAL IS 
declarative_items_opt END identifier_opt SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 9 statement-end])
-      (wisi-containing-action 1 6)
-      (wisi-face-apply-action [2 nil font-lock-function-name-face 8 nil 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 9 statement-end])
+      (wisi-containing-action 1 6)
+      (wisi-face-apply-action [2 nil font-lock-function-name-face 8 nil 
font-lock-function-name-face])
       (wisi-indent-action [0 gpr-indent-broken 0 gpr-indent-broken 0 
[gpr-indent gpr-indent] 0 0 0]))))
       (project_qualifier_opt
        (())
@@ -192,12 +193,12 @@
        ((CONFIGURATION )))
       (simple_declarative_item
        ((IDENTIFIER COLON_EQUALS expression SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 4 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 4 statement-end])
       (wisi-indent-action [0 gpr-indent-broken gpr-indent-broken 0])))
        ((IDENTIFIER COLON IDENTIFIER COLON_EQUALS expression SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 6 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 6 statement-end])
       (wisi-indent-action [0 gpr-indent-broken gpr-indent-broken 
gpr-indent-broken gpr-indent-broken 0])))
        ((attribute_declaration ))
        ((case_statement ))
@@ -205,10 +206,10 @@
         (wisi-statement-action [1 statement-start 2 statement-end])))
       (simple_project_declaration
        ((PROJECT identifier_opt IS declarative_items_opt END identifier_opt 
SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 7 statement-end])
-      (wisi-containing-action 1 4)
-      (wisi-face-apply-action [2 nil font-lock-function-name-face 6 nil 
font-lock-function-name-face])
+        (progn
+      (wisi-statement-action [1 statement-start 7 statement-end])
+      (wisi-containing-action 1 4)
+      (wisi-face-apply-action [2 nil font-lock-function-name-face 6 nil 
font-lock-function-name-face])
       (wisi-indent-action [0 gpr-indent-broken 0 [gpr-indent gpr-indent] 0 0 
0]))))
       (string_primary
        ((STRING_LITERAL ))
@@ -224,8 +225,8 @@
        ((aggregate_g )))
       (typed_string_declaration
        ((TYPE IDENTIFIER IS aggregate_g SEMICOLON )
-        (progn
-      (wisi-statement-action [1 statement-start 5 statement-end])
+        (progn
+      (wisi-statement-action [1 statement-start 5 statement-end])
       (wisi-indent-action [0 gpr-indent-broken gpr-indent-broken 
gpr-indent-broken 0]))))
       (with_clause
        ((WITH string_list SEMICOLON ))))
diff --git a/packages/ada-mode/gpr-process.el b/packages/ada-mode/gpr-process.el
index 4b2c5d7..0030835 100644
--- a/packages/ada-mode/gpr-process.el
+++ b/packages/ada-mode/gpr-process.el
@@ -1,7 +1,7 @@
 ;;; gpr-process.el --- Generated parser support file  -*- lexical-binding:t -*-
 ;;  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS gpr.wy
 
-;;  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+;;  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 ;;  This program is free software; you can redistribute it and/or
 ;;  modify it under the terms of the GNU General Public License as
diff --git a/packages/ada-mode/gpr-wisi.el b/packages/ada-mode/gpr-wisi.el
index 6214959..8e46bf1 100644
--- a/packages/ada-mode/gpr-wisi.el
+++ b/packages/ada-mode/gpr-wisi.el
@@ -1,6 +1,6 @@
 ;; gpr-wisi.el --- Indentation engine for gpr mode, using the wisi parser  -*- 
lexical-binding:t -*-
 ;;
-;; Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+;; Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;;
@@ -33,9 +33,9 @@
 
 (defun gpr-wisi-which-function ()
   "For `gpr-which-function'."
-  (wisi-validate-cache (point) nil 'navigate)
-  ;; no message on parse fail, since this could be called from which-func-mode
-  (when (> (wisi-cache-max 'navigate) (point))
+  (wisi-validate-cache (point-min) (point) nil 'navigate)
+  ;; No message on parse fail, since this could be called from 
which-function-mode
+  (when (wisi-cache-covers-pos 'navigate (point))
     (let ((cache (wisi-backward-cache))
          done
          project-pos
diff --git a/packages/ada-mode/gpr_mode_wisi_parse.ads 
b/packages/ada-mode/gpr_mode_wisi_parse.ads
index 09c5848..e384473 100644
--- a/packages/ada-mode/gpr_mode_wisi_parse.ads
+++ b/packages/ada-mode/gpr_mode_wisi_parse.ads
@@ -2,7 +2,7 @@
 --
 --  External process parser for gpr mode
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -26,6 +26,7 @@ procedure Gpr_Mode_Wisi_Parse is new Gen_Emacs_Wisi_LR_Parse
   (Parse_Data_Type                       => Wisi.Gpr.Parse_Data_Type,
    Name                                  => "gpr_mode_wisi_parse",
    Descriptor                            => Gpr_Process_Actions.Descriptor,
+   Partial_Parse_Active                  => 
Gpr_Process_Actions.Partial_Parse_Active,
    Language_Fixes                        => null,
    Language_Use_Minimal_Complete_Actions => null,
    Language_String_ID_Set                => null,
diff --git a/packages/ada-mode/gpr_process_actions.adb 
b/packages/ada-mode/gpr_process_actions.adb
index c0faa3a..6b63d40 100644
--- a/packages/ada-mode/gpr_process_actions.adb
+++ b/packages/ada-mode/gpr_process_actions.adb
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS gpr.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
@@ -144,13 +144,34 @@ package body Gpr_Process_Actions is
       end case;
    end case_item_0;
 
+   procedure compilation_unit_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array)
+   is
+      Parse_Data : Wisi.Parse_Data_Type renames Wisi.Parse_Data_Type 
(User_Data);
+   begin
+      case Parse_Data.Post_Parse_Action is
+      when Navigate =>
+         null;
+      when Face =>
+         null;
+      when Indent =>
+         Indent_Action_0 (Parse_Data, Tree, Nonterm, Tokens, ((False, (Simple, 
(Int, 0))), (False, (Simple, (Int, 0))),
+         (True, (Simple, (Int, 0)), (Simple, (Int, 0)))));
+      end case;
+   end compilation_unit_0;
+
    function identifier_opt_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Lexer);
+      pragma Unreferenced (Recover_Active);
    begin
       return Propagate_Name (Nonterm, Tokens, 1);
    end identifier_opt_1_check;
@@ -177,12 +198,14 @@ package body Gpr_Process_Actions is
    end package_spec_0;
 
    function package_spec_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 6, End_Names_Optional);
    end package_spec_0_check;
@@ -210,12 +233,14 @@ package body Gpr_Process_Actions is
    end package_extension_0;
 
    function package_extension_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 8, End_Names_Optional);
    end package_extension_0_check;
@@ -261,12 +286,14 @@ package body Gpr_Process_Actions is
    end project_extension_0;
 
    function project_extension_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 8, End_Names_Optional);
    end project_extension_0_check;
@@ -350,12 +377,14 @@ package body Gpr_Process_Actions is
    end simple_project_declaration_0;
 
    function simple_project_declaration_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status
    is
       pragma Unreferenced (Nonterm);
+      pragma Unreferenced (Recover_Active);
    begin
       return Match_Names (Lexer, Descriptor, Tokens, 2, 6, End_Names_Optional);
    end simple_project_declaration_0_check;
diff --git a/packages/ada-mode/gpr_process_actions.ads 
b/packages/ada-mode/gpr_process_actions.ads
index da7f482..bc33358 100644
--- a/packages/ada-mode/gpr_process_actions.ads
+++ b/packages/ada-mode/gpr_process_actions.ads
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS gpr.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
@@ -27,7 +27,7 @@ package Gpr_Process_Actions is
       Last_Terminal                 => 37,
       First_Nonterminal             => 38,
       Last_Nonterminal              => 71,
-      EOF_ID                        => 37,
+      EOI_ID                        => 37,
       Accept_ID                     => 38,
       Case_Insensitive              => True,
       New_Line_ID                   => 1,
@@ -226,6 +226,11 @@ package Gpr_Process_Actions is
      Tree      : in out WisiToken.Syntax_Trees.Tree;
      Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
      Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
+   procedure compilation_unit_0
+    (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
+     Tree      : in out WisiToken.Syntax_Trees.Tree;
+     Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
+     Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
    procedure package_spec_0
     (User_Data : in out WisiToken.Syntax_Trees.User_Data_Type'Class;
      Tree      : in out WisiToken.Syntax_Trees.Tree;
@@ -272,28 +277,35 @@ package Gpr_Process_Actions is
      Nonterm   : in     WisiToken.Syntax_Trees.Valid_Node_Index;
      Tokens    : in     WisiToken.Syntax_Trees.Valid_Node_Index_Array);
    function identifier_opt_1_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function package_spec_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function package_extension_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function project_extension_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
    function simple_project_declaration_0_check
-    (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-     Nonterm : in out WisiToken.Recover_Token;
-     Tokens  : in     WisiToken.Recover_Token_Array)
+    (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+     Nonterm        : in out WisiToken.Recover_Token;
+     Tokens         : in     WisiToken.Recover_Token_Array;
+     Recover_Active : in     Boolean)
     return WisiToken.Semantic_Checks.Check_Status;
+
+   Partial_Parse_Active : Boolean := False;
 end Gpr_Process_Actions;
diff --git a/packages/ada-mode/gpr_process_lr1_main.adb 
b/packages/ada-mode/gpr_process_lr1_main.adb
index 8ff9b36..af03240 100644
--- a/packages/ada-mode/gpr_process_lr1_main.adb
+++ b/packages/ada-mode/gpr_process_lr1_main.adb
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS gpr.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
@@ -83,7 +83,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (0), 47, 3);
             Add_Goto (Table.States (0), 48, 4);
             Add_Goto (Table.States (0), 71, 5);
-            Set_Minimal_Action (Table.States (0).Minimal_Complete_Actions, (1 
=> (Reduce, 46, 0)));
+            Table.States (0).Minimal_Complete_Action := (Reduce, 46, 0);
             Table.States (1).Productions := WisiToken.To_Vector ((1 => (71, 
0)));
             Add_Action (Table.States (1), 9, 6);
             Add_Action (Table.States (1), 10, 7);
@@ -107,7 +107,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (1), 67, 19);
             Add_Goto (Table.States (1), 68, 20);
             Add_Goto (Table.States (1), 69, 21);
-            Set_Minimal_Action (Table.States (1).Minimal_Complete_Actions, (1 
=> (Reduce, 68, 0)));
+            Table.States (1).Minimal_Complete_Action := (Reduce, 68, 0);
             Table.States (2).Productions := WisiToken.To_Vector ((1 => (38, 
0)));
             Add_Action (Table.States (2), 37, Accept_It, (38, 0), 1, null, 
null);
             Add_Error (Table.States (2));
@@ -122,7 +122,7 @@ package body Gpr_Process_LR1_Main is
             Add_Action (Table.States (3), 37, Reduce, (48, 1), 1, null, null);
             Add_Error (Table.States (3));
             Add_Goto (Table.States (3), 71, 22);
-            Set_Minimal_Action (Table.States (3).Minimal_Complete_Actions, (1 
=> (Reduce, 48, 1)));
+            Table.States (3).Minimal_Complete_Action := (Reduce, 48, 1);
             Table.States (4).Productions := WisiToken.To_Vector ((1 => (46, 
0)));
             Add_Action (Table.States (4), 3, 23);
             Add_Action (Table.States (4), 4, 24);
@@ -133,20 +133,20 @@ package body Gpr_Process_LR1_Main is
             Add_Action (Table.States (4), 37, Reduce, (64, 0), 0, null, null);
             Add_Error (Table.States (4));
             Add_Goto (Table.States (4), 64, 28);
-            Set_Minimal_Action (Table.States (4).Minimal_Complete_Actions, (1 
=> (Reduce, 64, 0)));
+            Table.States (4).Minimal_Complete_Action := (Reduce, 64, 0);
             Table.States (5).Productions := WisiToken.To_Vector ((1 => (47, 
0)));
             Add_Action (Table.States (5), (3, 4, 6, 14, 18, 21, 25, 37), (47, 
0), 1, null, null);
-            Set_Minimal_Action (Table.States (5).Minimal_Complete_Actions, (1 
=> (Reduce, 47, 1)));
+            Table.States (5).Minimal_Complete_Action := (Reduce, 47, 1);
             Table.States (6).Productions := WisiToken.To_Vector ((1 => (55, 
0)));
             Add_Action (Table.States (6), 13, 29);
             Add_Error (Table.States (6));
             Add_Goto (Table.States (6), 39, 30);
-            Set_Minimal_Action (Table.States (6).Minimal_Complete_Actions, (1 
=> (Shift, 13, 29)));
+            Table.States (6).Minimal_Complete_Action := (Shift, 13, 29);
             Table.States (7).Productions := WisiToken.To_Vector ((1 => (55, 
1)));
             Add_Action (Table.States (7), 13, 29);
             Add_Error (Table.States (7));
             Add_Goto (Table.States (7), 39, 31);
-            Set_Minimal_Action (Table.States (7).Minimal_Complete_Actions, (1 
=> (Shift, 13, 29)));
+            Table.States (7).Minimal_Complete_Action := (Shift, 13, 29);
             Table.States (8).Productions := WisiToken.To_Vector (((39, 0), 
(69, 1)));
             Add_Action (Table.States (8), 9, 32);
             Add_Action (Table.States (8), 10, 33);
@@ -170,38 +170,38 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (8), 67, 45);
             Add_Goto (Table.States (8), 68, 46);
             Add_Goto (Table.States (8), 69, 47);
-            Set_Minimal_Action (Table.States (8).Minimal_Complete_Actions, 
((Shift, 20, 35), (Reduce, 68, 0)));
+            Table.States (8).Minimal_Complete_Action := (Reduce, 68, 0);
             Table.States (9).Productions := WisiToken.To_Vector ((1 => (41, 
0)));
             Add_Action (Table.States (9), (1 =>  32), (41, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (9).Minimal_Complete_Actions, (1 
=> (Reduce, 41, 1)));
+            Table.States (9).Minimal_Complete_Action := (Reduce, 41, 1);
             Table.States (10).Productions := WisiToken.To_Vector ((1 => (56, 
1)));
             Add_Action (Table.States (10), (26, 29, 30, 32, 33), (56, 1), 1, 
null, identifier_opt_1_check'Access);
-            Set_Minimal_Action (Table.States (10).Minimal_Complete_Actions, (1 
=> (Reduce, 56, 1)));
+            Table.States (10).Minimal_Complete_Action := (Reduce, 56, 1);
             Table.States (11).Productions := WisiToken.To_Vector ((1 => (67, 
0)));
             Add_Action (Table.States (11), (26, 29, 33), (67, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (11).Minimal_Complete_Actions, (1 
=> (Reduce, 67, 1)));
+            Table.States (11).Minimal_Complete_Action := (Reduce, 67, 1);
             Table.States (12).Productions := WisiToken.To_Vector ((1 => (69, 
2)));
             Add_Action (Table.States (12), (26, 29, 33), (69, 2), 1, null, 
null);
-            Set_Minimal_Action (Table.States (12).Minimal_Complete_Actions, (1 
=> (Reduce, 69, 1)));
+            Table.States (12).Minimal_Complete_Action := (Reduce, 69, 1);
             Table.States (13).Productions := WisiToken.To_Vector (((42, 0), 
(42, 1)));
             Add_Action (Table.States (13), 32, 48);
             Add_Error (Table.States (13));
-            Set_Minimal_Action (Table.States (13).Minimal_Complete_Actions, (1 
=> (Shift, 32, 48)));
+            Table.States (13).Minimal_Complete_Action := (Shift, 32, 48);
             Table.States (14).Productions := WisiToken.To_Vector ((1 => (67, 
3)));
             Add_Action (Table.States (14), (26, 29, 33), (67, 3), 1, null, 
null);
-            Set_Minimal_Action (Table.States (14).Minimal_Complete_Actions, (1 
=> (Reduce, 67, 1)));
+            Table.States (14).Minimal_Complete_Action := (Reduce, 67, 1);
             Table.States (15).Productions := WisiToken.To_Vector (((54, 1), 
(68, 0)));
             Add_Action (Table.States (15), 26, 49);
             Add_Action (Table.States (15), 29, Reduce, (68, 0), 1, null, null);
             Add_Action (Table.States (15), 33, Reduce, (68, 0), 1, null, null);
             Add_Error (Table.States (15));
-            Set_Minimal_Action (Table.States (15).Minimal_Complete_Actions, (1 
=> (Reduce, 68, 1)));
+            Table.States (15).Minimal_Complete_Action := (Reduce, 68, 1);
             Table.States (16).Productions := WisiToken.To_Vector ((1 => (67, 
2)));
             Add_Action (Table.States (16), (26, 29, 33), (67, 2), 1, null, 
null);
-            Set_Minimal_Action (Table.States (16).Minimal_Complete_Actions, (1 
=> (Reduce, 67, 1)));
+            Table.States (16).Minimal_Complete_Action := (Reduce, 67, 1);
             Table.States (17).Productions := WisiToken.To_Vector ((1 => (57, 
0)));
             Add_Action (Table.States (17), (26, 29, 30, 32, 33), (57, 0), 1, 
null, null);
-            Set_Minimal_Action (Table.States (17).Minimal_Complete_Actions, (1 
=> (Reduce, 57, 1)));
+            Table.States (17).Minimal_Complete_Action := (Reduce, 57, 1);
             Table.States (18).Productions := WisiToken.To_Vector (((41, 1), 
(57, 1), (67, 1)));
             Add_Action (Table.States (18), 26, Reduce, (67, 1), 1, null, null);
             Add_Action (Table.States (18), 29, Reduce, (67, 1), 1, null, null);
@@ -209,39 +209,39 @@ package body Gpr_Process_LR1_Main is
             Add_Action (Table.States (18), 32, Reduce, (41, 1), 1, null, null);
             Add_Action (Table.States (18), 33, Reduce, (67, 1), 1, null, null);
             Add_Error (Table.States (18));
-            Set_Minimal_Action (Table.States (18).Minimal_Complete_Actions, 
((Reduce, 41, 1), (Reduce, 67, 1)));
+            Table.States (18).Minimal_Complete_Action := (Reduce, 41, 1);
             Table.States (19).Productions := WisiToken.To_Vector ((1 => (69, 
0)));
             Add_Action (Table.States (19), (26, 29, 33), (69, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (19).Minimal_Complete_Actions, (1 
=> (Reduce, 69, 1)));
+            Table.States (19).Minimal_Complete_Action := (Reduce, 69, 1);
             Table.States (20).Productions := WisiToken.To_Vector (((68, 1), 
(71, 0)));
             Add_Action (Table.States (20), 29, 51);
             Add_Action (Table.States (20), 33, 52);
             Add_Error (Table.States (20));
-            Set_Minimal_Action (Table.States (20).Minimal_Complete_Actions, (1 
=> (Shift, 33, 52)));
+            Table.States (20).Minimal_Complete_Action := (Shift, 33, 52);
             Table.States (21).Productions := WisiToken.To_Vector ((1 => (54, 
0)));
             Add_Action (Table.States (21), (26, 29, 33), (54, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (21).Minimal_Complete_Actions, (1 
=> (Reduce, 54, 1)));
+            Table.States (21).Minimal_Complete_Action := (Reduce, 54, 1);
             Table.States (22).Productions := WisiToken.To_Vector ((1 => (47, 
1)));
             Add_Action (Table.States (22), (3, 4, 6, 14, 18, 21, 25, 37), (47, 
1), 2, null, null);
-            Set_Minimal_Action (Table.States (22).Minimal_Complete_Actions, (1 
=> (Reduce, 47, 2)));
+            Table.States (22).Minimal_Complete_Action := (Reduce, 47, 2);
             Table.States (23).Productions := WisiToken.To_Vector ((1 => (64, 
1)));
             Add_Action (Table.States (23), (18, 37), (64, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (23).Minimal_Complete_Actions, (1 
=> (Reduce, 64, 1)));
+            Table.States (23).Minimal_Complete_Action := (Reduce, 64, 1);
             Table.States (24).Productions := WisiToken.To_Vector (((64, 3), 
(64, 4)));
             Add_Action (Table.States (24), 14, 53);
             Add_Action (Table.States (24), 18, Reduce, (64, 3), 1, null, null);
             Add_Action (Table.States (24), 37, Reduce, (64, 3), 1, null, null);
             Add_Error (Table.States (24));
-            Set_Minimal_Action (Table.States (24).Minimal_Complete_Actions, (1 
=> (Reduce, 64, 1)));
+            Table.States (24).Minimal_Complete_Action := (Reduce, 64, 1);
             Table.States (25).Productions := WisiToken.To_Vector ((1 => (64, 
6)));
             Add_Action (Table.States (25), (18, 37), (64, 6), 1, null, null);
-            Set_Minimal_Action (Table.States (25).Minimal_Complete_Actions, (1 
=> (Reduce, 64, 1)));
+            Table.States (25).Minimal_Complete_Action := (Reduce, 64, 1);
             Table.States (26).Productions := WisiToken.To_Vector ((1 => (64, 
5)));
             Add_Action (Table.States (26), (18, 37), (64, 5), 1, null, null);
-            Set_Minimal_Action (Table.States (26).Minimal_Complete_Actions, (1 
=> (Reduce, 64, 1)));
+            Table.States (26).Minimal_Complete_Action := (Reduce, 64, 1);
             Table.States (27).Productions := WisiToken.To_Vector ((1 => (64, 
2)));
             Add_Action (Table.States (27), (18, 37), (64, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (27).Minimal_Complete_Actions, (1 
=> (Reduce, 64, 1)));
+            Table.States (27).Minimal_Complete_Action := (Reduce, 64, 1);
             Table.States (28).Productions := WisiToken.To_Vector ((1 => (46, 
0)));
             Add_Action (Table.States (28), 18, 54);
             Add_Action (Table.States (28), 37, Reduce, (62, 0), 0, null, null);
@@ -249,7 +249,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (28), 62, 55);
             Add_Goto (Table.States (28), 63, 56);
             Add_Goto (Table.States (28), 66, 57);
-            Set_Minimal_Action (Table.States (28).Minimal_Complete_Actions, (1 
=> (Reduce, 62, 0)));
+            Table.States (28).Minimal_Complete_Action := (Reduce, 62, 0);
             Table.States (29).Productions := WisiToken.To_Vector ((1 => (39, 
0)));
             Add_Action (Table.States (29), 9, 32);
             Add_Action (Table.States (29), 10, 33);
@@ -273,23 +273,23 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (29), 67, 45);
             Add_Goto (Table.States (29), 68, 46);
             Add_Goto (Table.States (29), 69, 47);
-            Set_Minimal_Action (Table.States (29).Minimal_Complete_Actions, (1 
=> (Reduce, 68, 0)));
+            Table.States (29).Minimal_Complete_Action := (Reduce, 68, 0);
             Table.States (30).Productions := WisiToken.To_Vector ((1 => (55, 
0)));
             Add_Action (Table.States (30), (26, 29, 33), (55, 0), 2, null, 
null);
-            Set_Minimal_Action (Table.States (30).Minimal_Complete_Actions, (1 
=> (Reduce, 55, 2)));
+            Table.States (30).Minimal_Complete_Action := (Reduce, 55, 2);
             Table.States (31).Productions := WisiToken.To_Vector ((1 => (55, 
1)));
             Add_Action (Table.States (31), (26, 29, 33), (55, 1), 2, null, 
null);
-            Set_Minimal_Action (Table.States (31).Minimal_Complete_Actions, (1 
=> (Reduce, 55, 2)));
+            Table.States (31).Minimal_Complete_Action := (Reduce, 55, 2);
             Table.States (32).Productions := WisiToken.To_Vector ((1 => (55, 
0)));
             Add_Action (Table.States (32), 13, 58);
             Add_Error (Table.States (32));
             Add_Goto (Table.States (32), 39, 59);
-            Set_Minimal_Action (Table.States (32).Minimal_Complete_Actions, (1 
=> (Shift, 13, 58)));
+            Table.States (32).Minimal_Complete_Action := (Shift, 13, 58);
             Table.States (33).Productions := WisiToken.To_Vector ((1 => (55, 
1)));
             Add_Action (Table.States (33), 13, 58);
             Add_Error (Table.States (33));
             Add_Goto (Table.States (33), 39, 60);
-            Set_Minimal_Action (Table.States (33).Minimal_Complete_Actions, (1 
=> (Shift, 13, 58)));
+            Table.States (33).Minimal_Complete_Action := (Shift, 13, 58);
             Table.States (34).Productions := WisiToken.To_Vector (((39, 0), 
(69, 1)));
             Add_Action (Table.States (34), 9, 32);
             Add_Action (Table.States (34), 10, 33);
@@ -313,38 +313,38 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (34), 67, 45);
             Add_Goto (Table.States (34), 68, 62);
             Add_Goto (Table.States (34), 69, 47);
-            Set_Minimal_Action (Table.States (34).Minimal_Complete_Actions, 
((Shift, 20, 61), (Reduce, 68, 0)));
+            Table.States (34).Minimal_Complete_Action := (Reduce, 68, 0);
             Table.States (35).Productions := WisiToken.To_Vector ((1 => (69, 
1)));
             Add_Action (Table.States (35), (26, 29, 33), (69, 1), 2, null, 
null);
-            Set_Minimal_Action (Table.States (35).Minimal_Complete_Actions, (1 
=> (Reduce, 69, 2)));
+            Table.States (35).Minimal_Complete_Action := (Reduce, 69, 2);
             Table.States (36).Productions := WisiToken.To_Vector ((1 => (56, 
1)));
             Add_Action (Table.States (36), (20, 26, 29, 30, 32), (56, 1), 1, 
null, identifier_opt_1_check'Access);
-            Set_Minimal_Action (Table.States (36).Minimal_Complete_Actions, (1 
=> (Reduce, 56, 1)));
+            Table.States (36).Minimal_Complete_Action := (Reduce, 56, 1);
             Table.States (37).Productions := WisiToken.To_Vector ((1 => (67, 
0)));
             Add_Action (Table.States (37), (20, 26, 29), (67, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (37).Minimal_Complete_Actions, (1 
=> (Reduce, 67, 1)));
+            Table.States (37).Minimal_Complete_Action := (Reduce, 67, 1);
             Table.States (38).Productions := WisiToken.To_Vector ((1 => (69, 
2)));
             Add_Action (Table.States (38), (20, 26, 29), (69, 2), 1, null, 
null);
-            Set_Minimal_Action (Table.States (38).Minimal_Complete_Actions, (1 
=> (Reduce, 69, 1)));
+            Table.States (38).Minimal_Complete_Action := (Reduce, 69, 1);
             Table.States (39).Productions := WisiToken.To_Vector (((42, 0), 
(42, 1)));
             Add_Action (Table.States (39), 32, 63);
             Add_Error (Table.States (39));
-            Set_Minimal_Action (Table.States (39).Minimal_Complete_Actions, (1 
=> (Shift, 32, 63)));
+            Table.States (39).Minimal_Complete_Action := (Shift, 32, 63);
             Table.States (40).Productions := WisiToken.To_Vector ((1 => (67, 
3)));
             Add_Action (Table.States (40), (20, 26, 29), (67, 3), 1, null, 
null);
-            Set_Minimal_Action (Table.States (40).Minimal_Complete_Actions, (1 
=> (Reduce, 67, 1)));
+            Table.States (40).Minimal_Complete_Action := (Reduce, 67, 1);
             Table.States (41).Productions := WisiToken.To_Vector (((54, 1), 
(68, 0)));
             Add_Action (Table.States (41), 20, Reduce, (68, 0), 1, null, null);
             Add_Action (Table.States (41), 26, 64);
             Add_Action (Table.States (41), 29, Reduce, (68, 0), 1, null, null);
             Add_Error (Table.States (41));
-            Set_Minimal_Action (Table.States (41).Minimal_Complete_Actions, (1 
=> (Reduce, 68, 1)));
+            Table.States (41).Minimal_Complete_Action := (Reduce, 68, 1);
             Table.States (42).Productions := WisiToken.To_Vector ((1 => (67, 
2)));
             Add_Action (Table.States (42), (20, 26, 29), (67, 2), 1, null, 
null);
-            Set_Minimal_Action (Table.States (42).Minimal_Complete_Actions, (1 
=> (Reduce, 67, 1)));
+            Table.States (42).Minimal_Complete_Action := (Reduce, 67, 1);
             Table.States (43).Productions := WisiToken.To_Vector ((1 => (57, 
0)));
             Add_Action (Table.States (43), (20, 26, 29, 30, 32), (57, 0), 1, 
null, null);
-            Set_Minimal_Action (Table.States (43).Minimal_Complete_Actions, (1 
=> (Reduce, 57, 1)));
+            Table.States (43).Minimal_Complete_Action := (Reduce, 57, 1);
             Table.States (44).Productions := WisiToken.To_Vector (((41, 1), 
(57, 1), (67, 1)));
             Add_Action (Table.States (44), 20, Reduce, (67, 1), 1, null, null);
             Add_Action (Table.States (44), 26, Reduce, (67, 1), 1, null, null);
@@ -352,22 +352,22 @@ package body Gpr_Process_LR1_Main is
             Add_Action (Table.States (44), 30, 65);
             Add_Action (Table.States (44), 32, Reduce, (41, 1), 1, null, null);
             Add_Error (Table.States (44));
-            Set_Minimal_Action (Table.States (44).Minimal_Complete_Actions, 
((Reduce, 41, 1), (Reduce, 67, 1)));
+            Table.States (44).Minimal_Complete_Action := (Reduce, 41, 1);
             Table.States (45).Productions := WisiToken.To_Vector ((1 => (69, 
0)));
             Add_Action (Table.States (45), (20, 26, 29), (69, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (45).Minimal_Complete_Actions, (1 
=> (Reduce, 69, 1)));
+            Table.States (45).Minimal_Complete_Action := (Reduce, 69, 1);
             Table.States (46).Productions := WisiToken.To_Vector (((39, 0), 
(68, 1)));
             Add_Action (Table.States (46), 20, 66);
             Add_Action (Table.States (46), 29, 67);
             Add_Error (Table.States (46));
-            Set_Minimal_Action (Table.States (46).Minimal_Complete_Actions, (1 
=> (Shift, 20, 66)));
+            Table.States (46).Minimal_Complete_Action := (Shift, 20, 66);
             Table.States (47).Productions := WisiToken.To_Vector ((1 => (54, 
0)));
             Add_Action (Table.States (47), (20, 26, 29), (54, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (47).Minimal_Complete_Actions, (1 
=> (Reduce, 54, 1)));
+            Table.States (47).Minimal_Complete_Action := (Reduce, 54, 1);
             Table.States (48).Productions := WisiToken.To_Vector (((42, 0), 
(42, 1)));
             Add_Action (Table.States (48), 35, 68);
             Add_Error (Table.States (48));
-            Set_Minimal_Action (Table.States (48).Minimal_Complete_Actions, (1 
=> (Shift, 35, 68)));
+            Table.States (48).Minimal_Complete_Action := (Shift, 35, 68);
             Table.States (49).Productions := WisiToken.To_Vector ((1 => (54, 
1)));
             Add_Action (Table.States (49), 9, 6);
             Add_Action (Table.States (49), 10, 7);
@@ -389,11 +389,11 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (49), 57, 18);
             Add_Goto (Table.States (49), 67, 19);
             Add_Goto (Table.States (49), 69, 69);
-            Set_Minimal_Action (Table.States (49).Minimal_Complete_Actions, (1 
=> (Reduce, 69, 0)));
+            Table.States (49).Minimal_Complete_Action := (Reduce, 69, 0);
             Table.States (50).Productions := WisiToken.To_Vector ((1 => (57, 
1)));
             Add_Action (Table.States (50), 35, 70);
             Add_Error (Table.States (50));
-            Set_Minimal_Action (Table.States (50).Minimal_Complete_Actions, (1 
=> (Shift, 35, 70)));
+            Table.States (50).Minimal_Complete_Action := (Shift, 35, 70);
             Table.States (51).Productions := WisiToken.To_Vector ((1 => (68, 
1)));
             Add_Action (Table.States (51), 9, 6);
             Add_Action (Table.States (51), 10, 7);
@@ -416,29 +416,29 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (51), 57, 18);
             Add_Goto (Table.States (51), 67, 19);
             Add_Goto (Table.States (51), 69, 21);
-            Set_Minimal_Action (Table.States (51).Minimal_Complete_Actions, (1 
=> (Reduce, 54, 0)));
+            Table.States (51).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (52).Productions := WisiToken.To_Vector ((1 => (71, 
0)));
             Add_Action (Table.States (52), (3, 4, 6, 14, 18, 21, 25, 37), (71, 
0), 3, null, null);
-            Set_Minimal_Action (Table.States (52).Minimal_Complete_Actions, (1 
=> (Reduce, 71, 3)));
+            Table.States (52).Minimal_Complete_Action := (Reduce, 71, 3);
             Table.States (53).Productions := WisiToken.To_Vector ((1 => (64, 
4)));
             Add_Action (Table.States (53), (18, 37), (64, 4), 2, null, null);
-            Set_Minimal_Action (Table.States (53).Minimal_Complete_Actions, (1 
=> (Reduce, 64, 2)));
+            Table.States (53).Minimal_Complete_Action := (Reduce, 64, 2);
             Table.States (54).Productions := WisiToken.To_Vector (((63, 0), 
(66, 0)));
             Add_Action (Table.States (54), 8, Reduce, (56, 0), 0, null, null);
             Add_Action (Table.States (54), 12, Reduce, (56, 0), 0, null, null);
             Add_Action (Table.States (54), 35, 72);
             Add_Error (Table.States (54));
             Add_Goto (Table.States (54), 56, 73);
-            Set_Minimal_Action (Table.States (54).Minimal_Complete_Actions, (1 
=> (Reduce, 56, 0)));
+            Table.States (54).Minimal_Complete_Action := (Reduce, 56, 0);
             Table.States (55).Productions := WisiToken.To_Vector ((1 => (46, 
0)));
-            Add_Action (Table.States (55), (1 =>  37), (46, 0), 3, null, null);
-            Set_Minimal_Action (Table.States (55).Minimal_Complete_Actions, (1 
=> (Reduce, 46, 3)));
+            Add_Action (Table.States (55), (1 =>  37), (46, 0), 3, 
compilation_unit_0'Access, null);
+            Table.States (55).Minimal_Complete_Action := (Reduce, 46, 3);
             Table.States (56).Productions := WisiToken.To_Vector ((1 => (62, 
2)));
             Add_Action (Table.States (56), (1 =>  37), (62, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (56).Minimal_Complete_Actions, (1 
=> (Reduce, 62, 1)));
+            Table.States (56).Minimal_Complete_Action := (Reduce, 62, 1);
             Table.States (57).Productions := WisiToken.To_Vector ((1 => (62, 
1)));
             Add_Action (Table.States (57), (1 =>  37), (62, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (57).Minimal_Complete_Actions, (1 
=> (Reduce, 62, 1)));
+            Table.States (57).Minimal_Complete_Action := (Reduce, 62, 1);
             Table.States (58).Productions := WisiToken.To_Vector ((1 => (39, 
0)));
             Add_Action (Table.States (58), 9, 32);
             Add_Action (Table.States (58), 10, 33);
@@ -462,25 +462,25 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (58), 67, 45);
             Add_Goto (Table.States (58), 68, 62);
             Add_Goto (Table.States (58), 69, 47);
-            Set_Minimal_Action (Table.States (58).Minimal_Complete_Actions, (1 
=> (Reduce, 68, 0)));
+            Table.States (58).Minimal_Complete_Action := (Reduce, 68, 0);
             Table.States (59).Productions := WisiToken.To_Vector ((1 => (55, 
0)));
             Add_Action (Table.States (59), (20, 26, 29), (55, 0), 2, null, 
null);
-            Set_Minimal_Action (Table.States (59).Minimal_Complete_Actions, (1 
=> (Reduce, 55, 2)));
+            Table.States (59).Minimal_Complete_Action := (Reduce, 55, 2);
             Table.States (60).Productions := WisiToken.To_Vector ((1 => (55, 
1)));
             Add_Action (Table.States (60), (20, 26, 29), (55, 1), 2, null, 
null);
-            Set_Minimal_Action (Table.States (60).Minimal_Complete_Actions, (1 
=> (Reduce, 55, 2)));
+            Table.States (60).Minimal_Complete_Action := (Reduce, 55, 2);
             Table.States (61).Productions := WisiToken.To_Vector ((1 => (69, 
1)));
             Add_Action (Table.States (61), (20, 26, 29), (69, 1), 2, null, 
null);
-            Set_Minimal_Action (Table.States (61).Minimal_Complete_Actions, (1 
=> (Reduce, 69, 2)));
+            Table.States (61).Minimal_Complete_Action := (Reduce, 69, 2);
             Table.States (62).Productions := WisiToken.To_Vector (((39, 0), 
(68, 1)));
             Add_Action (Table.States (62), 20, 74);
             Add_Action (Table.States (62), 29, 67);
             Add_Error (Table.States (62));
-            Set_Minimal_Action (Table.States (62).Minimal_Complete_Actions, (1 
=> (Shift, 20, 74)));
+            Table.States (62).Minimal_Complete_Action := (Shift, 20, 74);
             Table.States (63).Productions := WisiToken.To_Vector (((42, 0), 
(42, 1)));
             Add_Action (Table.States (63), 35, 75);
             Add_Error (Table.States (63));
-            Set_Minimal_Action (Table.States (63).Minimal_Complete_Actions, (1 
=> (Shift, 35, 75)));
+            Table.States (63).Minimal_Complete_Action := (Shift, 35, 75);
             Table.States (64).Productions := WisiToken.To_Vector ((1 => (54, 
1)));
             Add_Action (Table.States (64), 9, 32);
             Add_Action (Table.States (64), 10, 33);
@@ -502,14 +502,14 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (64), 57, 44);
             Add_Goto (Table.States (64), 67, 45);
             Add_Goto (Table.States (64), 69, 76);
-            Set_Minimal_Action (Table.States (64).Minimal_Complete_Actions, (1 
=> (Reduce, 69, 0)));
+            Table.States (64).Minimal_Complete_Action := (Reduce, 69, 0);
             Table.States (65).Productions := WisiToken.To_Vector ((1 => (57, 
1)));
             Add_Action (Table.States (65), 35, 77);
             Add_Error (Table.States (65));
-            Set_Minimal_Action (Table.States (65).Minimal_Complete_Actions, (1 
=> (Shift, 35, 77)));
+            Table.States (65).Minimal_Complete_Action := (Shift, 35, 77);
             Table.States (66).Productions := WisiToken.To_Vector ((1 => (39, 
0)));
             Add_Action (Table.States (66), (26, 29, 33), (39, 0), 3, 
aggregate_g_0'Access, null);
-            Set_Minimal_Action (Table.States (66).Minimal_Complete_Actions, (1 
=> (Reduce, 39, 3)));
+            Table.States (66).Minimal_Complete_Action := (Reduce, 39, 3);
             Table.States (67).Productions := WisiToken.To_Vector ((1 => (68, 
1)));
             Add_Action (Table.States (67), 9, 32);
             Add_Action (Table.States (67), 10, 33);
@@ -532,64 +532,64 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (67), 57, 44);
             Add_Goto (Table.States (67), 67, 45);
             Add_Goto (Table.States (67), 69, 47);
-            Set_Minimal_Action (Table.States (67).Minimal_Complete_Actions, (1 
=> (Reduce, 54, 0)));
+            Table.States (67).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (68).Productions := WisiToken.To_Vector (((42, 0), 
(42, 1)));
             Add_Action (Table.States (68), 13, 79);
             Add_Action (Table.States (68), 26, Reduce, (42, 0), 3, null, null);
             Add_Action (Table.States (68), 29, Reduce, (42, 0), 3, null, null);
             Add_Action (Table.States (68), 33, Reduce, (42, 0), 3, null, null);
             Add_Error (Table.States (68));
-            Set_Minimal_Action (Table.States (68).Minimal_Complete_Actions, (1 
=> (Reduce, 42, 3)));
+            Table.States (68).Minimal_Complete_Action := (Reduce, 42, 3);
             Table.States (69).Productions := WisiToken.To_Vector ((1 => (54, 
1)));
             Add_Action (Table.States (69), (26, 29, 33), (54, 1), 3, null, 
null);
-            Set_Minimal_Action (Table.States (69).Minimal_Complete_Actions, (1 
=> (Reduce, 54, 3)));
+            Table.States (69).Minimal_Complete_Action := (Reduce, 54, 3);
             Table.States (70).Productions := WisiToken.To_Vector ((1 => (57, 
1)));
             Add_Action (Table.States (70), (26, 29, 30, 32, 33), (57, 1), 3, 
null, null);
-            Set_Minimal_Action (Table.States (70).Minimal_Complete_Actions, (1 
=> (Reduce, 57, 3)));
+            Table.States (70).Minimal_Complete_Action := (Reduce, 57, 3);
             Table.States (71).Productions := WisiToken.To_Vector (((54, 1), 
(68, 1)));
             Add_Action (Table.States (71), 26, 49);
             Add_Action (Table.States (71), 29, Reduce, (68, 1), 3, null, null);
             Add_Action (Table.States (71), 33, Reduce, (68, 1), 3, null, null);
             Add_Error (Table.States (71));
-            Set_Minimal_Action (Table.States (71).Minimal_Complete_Actions, (1 
=> (Reduce, 68, 3)));
+            Table.States (71).Minimal_Complete_Action := (Reduce, 68, 3);
             Table.States (72).Productions := WisiToken.To_Vector ((1 => (56, 
1)));
             Add_Action (Table.States (72), (8, 12), (56, 1), 1, null, 
identifier_opt_1_check'Access);
-            Set_Minimal_Action (Table.States (72).Minimal_Complete_Actions, (1 
=> (Reduce, 56, 1)));
+            Table.States (72).Minimal_Complete_Action := (Reduce, 56, 1);
             Table.States (73).Productions := WisiToken.To_Vector (((63, 0), 
(66, 0)));
             Add_Action (Table.States (73), 8, 80);
             Add_Action (Table.States (73), 12, 81);
             Add_Error (Table.States (73));
-            Set_Minimal_Action (Table.States (73).Minimal_Complete_Actions, 
((Shift, 8, 80), (Shift, 12, 81)));
+            Table.States (73).Minimal_Complete_Action := (Shift, 12, 81);
             Table.States (74).Productions := WisiToken.To_Vector ((1 => (39, 
0)));
             Add_Action (Table.States (74), (20, 26, 29), (39, 0), 3, 
aggregate_g_0'Access, null);
-            Set_Minimal_Action (Table.States (74).Minimal_Complete_Actions, (1 
=> (Reduce, 39, 3)));
+            Table.States (74).Minimal_Complete_Action := (Reduce, 39, 3);
             Table.States (75).Productions := WisiToken.To_Vector (((42, 0), 
(42, 1)));
             Add_Action (Table.States (75), 13, 82);
             Add_Action (Table.States (75), 20, Reduce, (42, 0), 3, null, null);
             Add_Action (Table.States (75), 26, Reduce, (42, 0), 3, null, null);
             Add_Action (Table.States (75), 29, Reduce, (42, 0), 3, null, null);
             Add_Error (Table.States (75));
-            Set_Minimal_Action (Table.States (75).Minimal_Complete_Actions, (1 
=> (Reduce, 42, 3)));
+            Table.States (75).Minimal_Complete_Action := (Reduce, 42, 3);
             Table.States (76).Productions := WisiToken.To_Vector ((1 => (54, 
1)));
             Add_Action (Table.States (76), (20, 26, 29), (54, 1), 3, null, 
null);
-            Set_Minimal_Action (Table.States (76).Minimal_Complete_Actions, (1 
=> (Reduce, 54, 3)));
+            Table.States (76).Minimal_Complete_Action := (Reduce, 54, 3);
             Table.States (77).Productions := WisiToken.To_Vector ((1 => (57, 
1)));
             Add_Action (Table.States (77), (20, 26, 29, 30, 32), (57, 1), 3, 
null, null);
-            Set_Minimal_Action (Table.States (77).Minimal_Complete_Actions, (1 
=> (Reduce, 57, 3)));
+            Table.States (77).Minimal_Complete_Action := (Reduce, 57, 3);
             Table.States (78).Productions := WisiToken.To_Vector (((54, 1), 
(68, 1)));
             Add_Action (Table.States (78), 20, Reduce, (68, 1), 3, null, null);
             Add_Action (Table.States (78), 26, 64);
             Add_Action (Table.States (78), 29, Reduce, (68, 1), 3, null, null);
             Add_Error (Table.States (78));
-            Set_Minimal_Action (Table.States (78).Minimal_Complete_Actions, (1 
=> (Reduce, 68, 3)));
+            Table.States (78).Minimal_Complete_Action := (Reduce, 68, 3);
             Table.States (79).Productions := WisiToken.To_Vector ((1 => (42, 
1)));
             Add_Action (Table.States (79), 36, 83);
             Add_Error (Table.States (79));
-            Set_Minimal_Action (Table.States (79).Minimal_Complete_Actions, (1 
=> (Shift, 36, 83)));
+            Table.States (79).Minimal_Complete_Action := (Shift, 36, 83);
             Table.States (80).Productions := WisiToken.To_Vector ((1 => (63, 
0)));
             Add_Action (Table.States (80), 36, 84);
             Add_Error (Table.States (80));
-            Set_Minimal_Action (Table.States (80).Minimal_Complete_Actions, (1 
=> (Shift, 36, 84)));
+            Table.States (80).Minimal_Complete_Action := (Shift, 36, 84);
             Table.States (81).Productions := WisiToken.To_Vector ((1 => (66, 
0)));
             Add_Action (Table.States (81), 5, 85);
             Add_Action (Table.States (81), 7, Reduce, (51, 0), 0, null, null);
@@ -610,19 +610,19 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (81), 61, 99);
             Add_Goto (Table.States (81), 65, 100);
             Add_Goto (Table.States (81), 70, 101);
-            Set_Minimal_Action (Table.States (81).Minimal_Complete_Actions, (1 
=> (Reduce, 51, 0)));
+            Table.States (81).Minimal_Complete_Action := (Reduce, 51, 0);
             Table.States (82).Productions := WisiToken.To_Vector ((1 => (42, 
1)));
             Add_Action (Table.States (82), 36, 102);
             Add_Error (Table.States (82));
-            Set_Minimal_Action (Table.States (82).Minimal_Complete_Actions, (1 
=> (Shift, 36, 102)));
+            Table.States (82).Minimal_Complete_Action := (Shift, 36, 102);
             Table.States (83).Productions := WisiToken.To_Vector ((1 => (42, 
1)));
             Add_Action (Table.States (83), 20, 103);
             Add_Error (Table.States (83));
-            Set_Minimal_Action (Table.States (83).Minimal_Complete_Actions, (1 
=> (Shift, 20, 103)));
+            Table.States (83).Minimal_Complete_Action := (Shift, 20, 103);
             Table.States (84).Productions := WisiToken.To_Vector ((1 => (63, 
0)));
             Add_Action (Table.States (84), 12, 104);
             Add_Error (Table.States (84));
-            Set_Minimal_Action (Table.States (84).Minimal_Complete_Actions, (1 
=> (Shift, 12, 104)));
+            Table.States (84).Minimal_Complete_Action := (Shift, 12, 104);
             Table.States (85).Productions := WisiToken.To_Vector ((1 => (43, 
0)));
             Add_Action (Table.States (85), 12, Reduce, (56, 0), 0, null, null);
             Add_Action (Table.States (85), 30, Reduce, (56, 0), 0, null, null);
@@ -630,16 +630,16 @@ package body Gpr_Process_LR1_Main is
             Add_Error (Table.States (85));
             Add_Goto (Table.States (85), 56, 106);
             Add_Goto (Table.States (85), 57, 107);
-            Set_Minimal_Action (Table.States (85).Minimal_Complete_Actions, (1 
=> (Reduce, 57, 0)));
+            Table.States (85).Minimal_Complete_Action := (Reduce, 57, 0);
             Table.States (86).Productions := WisiToken.To_Vector (((40, 0), 
(40, 1), (40, 2)));
             Add_Action (Table.States (86), 9, 108);
             Add_Action (Table.States (86), 35, 109);
             Add_Error (Table.States (86));
-            Set_Minimal_Action (Table.States (86).Minimal_Complete_Actions, 
((Shift, 9, 108), (Shift, 35, 109)));
+            Table.States (86).Minimal_Complete_Action := (Shift, 35, 109);
             Table.States (87).Productions := WisiToken.To_Vector ((1 => (65, 
4)));
             Add_Action (Table.States (87), 33, 110);
             Add_Error (Table.States (87));
-            Set_Minimal_Action (Table.States (87).Minimal_Complete_Actions, (1 
=> (Shift, 33, 110)));
+            Table.States (87).Minimal_Complete_Action := (Shift, 33, 110);
             Table.States (88).Productions := WisiToken.To_Vector (((59, 0), 
(60, 0), (61, 0)));
             Add_Action (Table.States (88), 8, Reduce, (56, 0), 0, null, null);
             Add_Action (Table.States (88), 12, Reduce, (56, 0), 0, null, null);
@@ -647,25 +647,25 @@ package body Gpr_Process_LR1_Main is
             Add_Action (Table.States (88), 35, 111);
             Add_Error (Table.States (88));
             Add_Goto (Table.States (88), 56, 112);
-            Set_Minimal_Action (Table.States (88).Minimal_Complete_Actions, (1 
=> (Reduce, 56, 0)));
+            Table.States (88).Minimal_Complete_Action := (Reduce, 56, 0);
             Table.States (89).Productions := WisiToken.To_Vector ((1 => (70, 
0)));
             Add_Action (Table.States (89), 35, 113);
             Add_Error (Table.States (89));
-            Set_Minimal_Action (Table.States (89).Minimal_Complete_Actions, (1 
=> (Shift, 35, 113)));
+            Table.States (89).Minimal_Complete_Action := (Shift, 35, 113);
             Table.States (90).Productions := WisiToken.To_Vector (((65, 0), 
(65, 1)));
             Add_Action (Table.States (90), 27, 114);
             Add_Action (Table.States (90), 28, 115);
             Add_Error (Table.States (90));
-            Set_Minimal_Action (Table.States (90).Minimal_Complete_Actions, 
((Shift, 27, 114), (Shift, 28, 115)));
+            Table.States (90).Minimal_Complete_Action := (Shift, 28, 115);
             Table.States (91).Productions := WisiToken.To_Vector ((1 => (65, 
2)));
             Add_Action (Table.States (91), (5, 7, 11, 15, 17, 22, 35), (65, 
2), 1, null, null);
-            Set_Minimal_Action (Table.States (91).Minimal_Complete_Actions, (1 
=> (Reduce, 65, 1)));
+            Table.States (91).Minimal_Complete_Action := (Reduce, 65, 1);
             Table.States (92).Productions := WisiToken.To_Vector ((1 => (65, 
3)));
             Add_Action (Table.States (92), (5, 7, 11, 15, 17, 22, 35), (65, 
3), 1, null, null);
-            Set_Minimal_Action (Table.States (92).Minimal_Complete_Actions, (1 
=> (Reduce, 65, 1)));
+            Table.States (92).Minimal_Complete_Action := (Reduce, 65, 1);
             Table.States (93).Productions := WisiToken.To_Vector ((1 => (50, 
0)));
             Add_Action (Table.States (93), (5, 7, 11, 15, 17, 22, 35), (50, 
0), 1, null, null);
-            Set_Minimal_Action (Table.States (93).Minimal_Complete_Actions, (1 
=> (Reduce, 50, 1)));
+            Table.States (93).Minimal_Complete_Action := (Reduce, 50, 1);
             Table.States (94).Productions := WisiToken.To_Vector (((50, 1), 
(51, 1)));
             Add_Action (Table.States (94), 5, 85);
             Add_Action (Table.States (94), 7, Reduce, (51, 1), 1, null, null);
@@ -684,36 +684,36 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (94), 61, 99);
             Add_Goto (Table.States (94), 65, 100);
             Add_Goto (Table.States (94), 70, 101);
-            Set_Minimal_Action (Table.States (94).Minimal_Complete_Actions, (1 
=> (Reduce, 51, 1)));
+            Table.States (94).Minimal_Complete_Action := (Reduce, 51, 1);
             Table.States (95).Productions := WisiToken.To_Vector ((1 => (66, 
0)));
             Add_Action (Table.States (95), 7, 117);
             Add_Error (Table.States (95));
-            Set_Minimal_Action (Table.States (95).Minimal_Complete_Actions, (1 
=> (Shift, 7, 117)));
+            Table.States (95).Minimal_Complete_Action := (Shift, 7, 117);
             Table.States (96).Productions := WisiToken.To_Vector ((1 => (49, 
2)));
             Add_Action (Table.States (96), (5, 7, 11, 15, 17, 22, 35), (49, 
2), 1, null, null);
-            Set_Minimal_Action (Table.States (96).Minimal_Complete_Actions, (1 
=> (Reduce, 49, 1)));
+            Table.States (96).Minimal_Complete_Action := (Reduce, 49, 1);
             Table.States (97).Productions := WisiToken.To_Vector ((1 => (58, 
0)));
             Add_Action (Table.States (97), (5, 7, 11, 15, 17, 22, 35), (58, 
0), 1, null, null);
-            Set_Minimal_Action (Table.States (97).Minimal_Complete_Actions, (1 
=> (Reduce, 58, 1)));
+            Table.States (97).Minimal_Complete_Action := (Reduce, 58, 1);
             Table.States (98).Productions := WisiToken.To_Vector ((1 => (58, 
1)));
             Add_Action (Table.States (98), (5, 7, 11, 15, 17, 22, 35), (58, 
1), 1, null, null);
-            Set_Minimal_Action (Table.States (98).Minimal_Complete_Actions, (1 
=> (Reduce, 58, 1)));
+            Table.States (98).Minimal_Complete_Action := (Reduce, 58, 1);
             Table.States (99).Productions := WisiToken.To_Vector ((1 => (58, 
2)));
             Add_Action (Table.States (99), (5, 7, 11, 15, 17, 22, 35), (58, 
2), 1, null, null);
-            Set_Minimal_Action (Table.States (99).Minimal_Complete_Actions, (1 
=> (Reduce, 58, 1)));
+            Table.States (99).Minimal_Complete_Action := (Reduce, 58, 1);
             Table.States (100).Productions := WisiToken.To_Vector ((1 => (49, 
0)));
             Add_Action (Table.States (100), (5, 7, 11, 15, 17, 22, 35), (49, 
0), 1, null, null);
-            Set_Minimal_Action (Table.States (100).Minimal_Complete_Actions, 
(1 => (Reduce, 49, 1)));
+            Table.States (100).Minimal_Complete_Action := (Reduce, 49, 1);
             Table.States (101).Productions := WisiToken.To_Vector ((1 => (49, 
1)));
             Add_Action (Table.States (101), (5, 7, 11, 15, 17, 22, 35), (49, 
1), 1, null, null);
-            Set_Minimal_Action (Table.States (101).Minimal_Complete_Actions, 
(1 => (Reduce, 49, 1)));
+            Table.States (101).Minimal_Complete_Action := (Reduce, 49, 1);
             Table.States (102).Productions := WisiToken.To_Vector ((1 => (42, 
1)));
             Add_Action (Table.States (102), 20, 118);
             Add_Error (Table.States (102));
-            Set_Minimal_Action (Table.States (102).Minimal_Complete_Actions, 
(1 => (Shift, 20, 118)));
+            Table.States (102).Minimal_Complete_Action := (Shift, 20, 118);
             Table.States (103).Productions := WisiToken.To_Vector ((1 => (42, 
1)));
             Add_Action (Table.States (103), (26, 29, 33), (42, 1), 6, null, 
null);
-            Set_Minimal_Action (Table.States (103).Minimal_Complete_Actions, 
(1 => (Reduce, 42, 6)));
+            Table.States (103).Minimal_Complete_Action := (Reduce, 42, 6);
             Table.States (104).Productions := WisiToken.To_Vector ((1 => (63, 
0)));
             Add_Action (Table.States (104), 5, 85);
             Add_Action (Table.States (104), 7, Reduce, (51, 0), 0, null, null);
@@ -734,52 +734,51 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (104), 61, 99);
             Add_Goto (Table.States (104), 65, 100);
             Add_Goto (Table.States (104), 70, 101);
-            Set_Minimal_Action (Table.States (104).Minimal_Complete_Actions, 
(1 => (Reduce, 51, 0)));
+            Table.States (104).Minimal_Complete_Action := (Reduce, 51, 0);
             Table.States (105).Productions := WisiToken.To_Vector ((1 => (56, 
1)));
             Add_Action (Table.States (105), (12, 30), (56, 1), 1, null, 
identifier_opt_1_check'Access);
-            Set_Minimal_Action (Table.States (105).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 1)));
+            Table.States (105).Minimal_Complete_Action := (Reduce, 56, 1);
             Table.States (106).Productions := WisiToken.To_Vector ((1 => (57, 
0)));
             Add_Action (Table.States (106), (12, 30), (57, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (106).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 1)));
+            Table.States (106).Minimal_Complete_Action := (Reduce, 57, 1);
             Table.States (107).Productions := WisiToken.To_Vector (((43, 0), 
(57, 1)));
             Add_Action (Table.States (107), 12, 120);
             Add_Action (Table.States (107), 30, 121);
             Add_Error (Table.States (107));
-            Set_Minimal_Action (Table.States (107).Minimal_Complete_Actions, 
(1 => (Shift, 12, 120)));
+            Table.States (107).Minimal_Complete_Action := (Shift, 12, 120);
          end Subr_1;
          procedure Subr_2
          is begin
             Table.States (108).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (108), 13, 122);
             Add_Error (Table.States (108));
-            Set_Minimal_Action (Table.States (108).Minimal_Complete_Actions, 
(1 => (Shift, 13, 122)));
+            Table.States (108).Minimal_Complete_Action := (Shift, 13, 122);
             Table.States (109).Productions := WisiToken.To_Vector (((40, 0), 
(40, 1)));
             Add_Action (Table.States (109), 13, 123);
             Add_Action (Table.States (109), 23, 124);
             Add_Error (Table.States (109));
-            Set_Minimal_Action (Table.States (109).Minimal_Complete_Actions, 
((Shift, 13, 123), (Shift, 23, 124)));
+            Table.States (109).Minimal_Complete_Action := (Shift, 23, 124);
             Table.States (110).Productions := WisiToken.To_Vector ((1 => (65, 
4)));
             Add_Action (Table.States (110), (5, 7, 11, 15, 17, 22, 35), (65, 
4), 2, simple_declarative_item_4'Access,
             null);
-            Set_Minimal_Action (Table.States (110).Minimal_Complete_Actions, 
(1 => (Reduce, 65, 2)));
+            Table.States (110).Minimal_Complete_Action := (Reduce, 65, 2);
             Table.States (111).Productions := WisiToken.To_Vector ((1 => (56, 
1)));
             Add_Action (Table.States (111), (8, 12, 19), (56, 1), 1, null, 
identifier_opt_1_check'Access);
-            Set_Minimal_Action (Table.States (111).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 1)));
+            Table.States (111).Minimal_Complete_Action := (Reduce, 56, 1);
             Table.States (112).Productions := WisiToken.To_Vector (((59, 0), 
(60, 0), (61, 0)));
             Add_Action (Table.States (112), 8, 125);
             Add_Action (Table.States (112), 12, 126);
             Add_Action (Table.States (112), 19, 127);
             Add_Error (Table.States (112));
-            Set_Minimal_Action (Table.States (112).Minimal_Complete_Actions, 
((Shift, 8, 125), (Shift, 12, 126),
-            (Shift, 19, 127)));
+            Table.States (112).Minimal_Complete_Action := (Shift, 19, 127);
             Table.States (113).Productions := WisiToken.To_Vector ((1 => (70, 
0)));
             Add_Action (Table.States (113), 12, 128);
             Add_Error (Table.States (113));
-            Set_Minimal_Action (Table.States (113).Minimal_Complete_Actions, 
(1 => (Shift, 12, 128)));
+            Table.States (113).Minimal_Complete_Action := (Shift, 12, 128);
             Table.States (114).Productions := WisiToken.To_Vector ((1 => (65, 
1)));
             Add_Action (Table.States (114), 35, 129);
             Add_Error (Table.States (114));
-            Set_Minimal_Action (Table.States (114).Minimal_Complete_Actions, 
(1 => (Shift, 35, 129)));
+            Table.States (114).Minimal_Complete_Action := (Shift, 35, 129);
             Table.States (115).Productions := WisiToken.To_Vector ((1 => (65, 
0)));
             Add_Action (Table.States (115), 9, 130);
             Add_Action (Table.States (115), 10, 131);
@@ -801,45 +800,45 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (115), 57, 141);
             Add_Goto (Table.States (115), 67, 142);
             Add_Goto (Table.States (115), 69, 143);
-            Set_Minimal_Action (Table.States (115).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 0)));
+            Table.States (115).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (116).Productions := WisiToken.To_Vector ((1 => (50, 
1)));
             Add_Action (Table.States (116), (5, 7, 11, 15, 17, 22, 35), (50, 
1), 2, null, null);
-            Set_Minimal_Action (Table.States (116).Minimal_Complete_Actions, 
(1 => (Reduce, 50, 2)));
+            Table.States (116).Minimal_Complete_Action := (Reduce, 50, 2);
             Table.States (117).Productions := WisiToken.To_Vector ((1 => (66, 
0)));
             Add_Action (Table.States (117), 33, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (117), 35, 144);
             Add_Error (Table.States (117));
             Add_Goto (Table.States (117), 56, 145);
-            Set_Minimal_Action (Table.States (117).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 0)));
+            Table.States (117).Minimal_Complete_Action := (Reduce, 56, 0);
             Table.States (118).Productions := WisiToken.To_Vector ((1 => (42, 
1)));
             Add_Action (Table.States (118), (20, 26, 29), (42, 1), 6, null, 
null);
-            Set_Minimal_Action (Table.States (118).Minimal_Complete_Actions, 
(1 => (Reduce, 42, 6)));
+            Table.States (118).Minimal_Complete_Action := (Reduce, 42, 6);
             Table.States (119).Productions := WisiToken.To_Vector ((1 => (63, 
0)));
             Add_Action (Table.States (119), 7, 146);
             Add_Error (Table.States (119));
-            Set_Minimal_Action (Table.States (119).Minimal_Complete_Actions, 
(1 => (Shift, 7, 146)));
+            Table.States (119).Minimal_Complete_Action := (Shift, 7, 146);
             Table.States (120).Productions := WisiToken.To_Vector ((1 => (43, 
0)));
             Add_Action (Table.States (120), 7, Reduce, (45, 0), 0, null, null);
             Add_Action (Table.States (120), 24, 147, (45, 0), 0, null, null);
             Add_Error (Table.States (120));
             Add_Goto (Table.States (120), 44, 148);
             Add_Goto (Table.States (120), 45, 149);
-            Set_Minimal_Action (Table.States (120).Minimal_Complete_Actions, 
(1 => (Reduce, 45, 0)));
+            Table.States (120).Minimal_Complete_Action := (Reduce, 45, 0);
             Table.States (121).Productions := WisiToken.To_Vector ((1 => (57, 
1)));
             Add_Action (Table.States (121), 35, 150);
             Add_Error (Table.States (121));
-            Set_Minimal_Action (Table.States (121).Minimal_Complete_Actions, 
(1 => (Shift, 35, 150)));
+            Table.States (121).Minimal_Complete_Action := (Shift, 35, 150);
             Table.States (122).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (122), 36, 151);
             Add_Error (Table.States (122));
-            Set_Minimal_Action (Table.States (122).Minimal_Complete_Actions, 
(1 => (Shift, 36, 151)));
+            Table.States (122).Minimal_Complete_Action := (Shift, 36, 151);
             Table.States (123).Productions := WisiToken.To_Vector ((1 => (40, 
1)));
             Add_Action (Table.States (123), 16, 152);
             Add_Action (Table.States (123), 20, Reduce, (52, 0), 0, null, 
null);
             Add_Action (Table.States (123), 36, 153);
             Add_Error (Table.States (123));
             Add_Goto (Table.States (123), 52, 154);
-            Set_Minimal_Action (Table.States (123).Minimal_Complete_Actions, 
(1 => (Reduce, 52, 0)));
+            Table.States (123).Minimal_Complete_Action := (Reduce, 52, 0);
             Table.States (124).Productions := WisiToken.To_Vector ((1 => (40, 
0)));
             Add_Action (Table.States (124), 9, 130);
             Add_Action (Table.States (124), 10, 131);
@@ -861,7 +860,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (124), 57, 141);
             Add_Goto (Table.States (124), 67, 142);
             Add_Goto (Table.States (124), 69, 143);
-            Set_Minimal_Action (Table.States (124).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 0)));
+            Table.States (124).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (125).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (125), 12, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (125), 30, Reduce, (56, 0), 0, null, 
null);
@@ -869,7 +868,7 @@ package body Gpr_Process_LR1_Main is
             Add_Error (Table.States (125));
             Add_Goto (Table.States (125), 56, 106);
             Add_Goto (Table.States (125), 57, 156);
-            Set_Minimal_Action (Table.States (125).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 0)));
+            Table.States (125).Minimal_Complete_Action := (Reduce, 57, 0);
             Table.States (126).Productions := WisiToken.To_Vector ((1 => (59, 
0)));
             Add_Action (Table.States (126), 5, 85);
             Add_Action (Table.States (126), 7, Reduce, (51, 0), 0, null, null);
@@ -890,7 +889,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (126), 61, 99);
             Add_Goto (Table.States (126), 65, 100);
             Add_Goto (Table.States (126), 70, 101);
-            Set_Minimal_Action (Table.States (126).Minimal_Complete_Actions, 
(1 => (Reduce, 51, 0)));
+            Table.States (126).Minimal_Complete_Action := (Reduce, 51, 0);
             Table.States (127).Productions := WisiToken.To_Vector ((1 => (61, 
0)));
             Add_Action (Table.States (127), 30, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (127), 33, Reduce, (56, 0), 0, null, 
null);
@@ -898,26 +897,26 @@ package body Gpr_Process_LR1_Main is
             Add_Error (Table.States (127));
             Add_Goto (Table.States (127), 56, 159);
             Add_Goto (Table.States (127), 57, 160);
-            Set_Minimal_Action (Table.States (127).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 0)));
+            Table.States (127).Minimal_Complete_Action := (Reduce, 57, 0);
             Table.States (128).Productions := WisiToken.To_Vector ((1 => (70, 
0)));
             Add_Action (Table.States (128), 13, 161);
             Add_Error (Table.States (128));
             Add_Goto (Table.States (128), 39, 162);
-            Set_Minimal_Action (Table.States (128).Minimal_Complete_Actions, 
(1 => (Shift, 13, 161)));
+            Table.States (128).Minimal_Complete_Action := (Shift, 13, 161);
             Table.States (129).Productions := WisiToken.To_Vector ((1 => (65, 
1)));
             Add_Action (Table.States (129), 28, 163);
             Add_Error (Table.States (129));
-            Set_Minimal_Action (Table.States (129).Minimal_Complete_Actions, 
(1 => (Shift, 28, 163)));
+            Table.States (129).Minimal_Complete_Action := (Shift, 28, 163);
             Table.States (130).Productions := WisiToken.To_Vector ((1 => (55, 
0)));
             Add_Action (Table.States (130), 13, 164);
             Add_Error (Table.States (130));
             Add_Goto (Table.States (130), 39, 165);
-            Set_Minimal_Action (Table.States (130).Minimal_Complete_Actions, 
(1 => (Shift, 13, 164)));
+            Table.States (130).Minimal_Complete_Action := (Shift, 13, 164);
             Table.States (131).Productions := WisiToken.To_Vector ((1 => (55, 
1)));
             Add_Action (Table.States (131), 13, 164);
             Add_Error (Table.States (131));
             Add_Goto (Table.States (131), 39, 166);
-            Set_Minimal_Action (Table.States (131).Minimal_Complete_Actions, 
(1 => (Shift, 13, 164)));
+            Table.States (131).Minimal_Complete_Action := (Shift, 13, 164);
             Table.States (132).Productions := WisiToken.To_Vector (((39, 0), 
(69, 1)));
             Add_Action (Table.States (132), 9, 32);
             Add_Action (Table.States (132), 10, 33);
@@ -941,60 +940,60 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (132), 67, 45);
             Add_Goto (Table.States (132), 68, 168);
             Add_Goto (Table.States (132), 69, 47);
-            Set_Minimal_Action (Table.States (132).Minimal_Complete_Actions, 
((Shift, 20, 167), (Reduce, 68, 0)));
+            Table.States (132).Minimal_Complete_Action := (Reduce, 68, 0);
             Table.States (133).Productions := WisiToken.To_Vector ((1 => (56, 
1)));
             Add_Action (Table.States (133), (26, 30, 32, 33), (56, 1), 1, 
null, identifier_opt_1_check'Access);
-            Set_Minimal_Action (Table.States (133).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 1)));
+            Table.States (133).Minimal_Complete_Action := (Reduce, 56, 1);
             Table.States (134).Productions := WisiToken.To_Vector ((1 => (67, 
0)));
             Add_Action (Table.States (134), (26, 33), (67, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (134).Minimal_Complete_Actions, 
(1 => (Reduce, 67, 1)));
+            Table.States (134).Minimal_Complete_Action := (Reduce, 67, 1);
             Table.States (135).Productions := WisiToken.To_Vector ((1 => (69, 
2)));
             Add_Action (Table.States (135), (26, 33), (69, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (135).Minimal_Complete_Actions, 
(1 => (Reduce, 69, 1)));
+            Table.States (135).Minimal_Complete_Action := (Reduce, 69, 1);
             Table.States (136).Productions := WisiToken.To_Vector (((42, 0), 
(42, 1)));
             Add_Action (Table.States (136), 32, 169);
             Add_Error (Table.States (136));
-            Set_Minimal_Action (Table.States (136).Minimal_Complete_Actions, 
(1 => (Shift, 32, 169)));
+            Table.States (136).Minimal_Complete_Action := (Shift, 32, 169);
             Table.States (137).Productions := WisiToken.To_Vector ((1 => (67, 
3)));
             Add_Action (Table.States (137), (26, 33), (67, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (137).Minimal_Complete_Actions, 
(1 => (Reduce, 67, 1)));
+            Table.States (137).Minimal_Complete_Action := (Reduce, 67, 1);
             Table.States (138).Productions := WisiToken.To_Vector (((54, 1), 
(65, 0)));
             Add_Action (Table.States (138), 26, 170);
             Add_Action (Table.States (138), 33, 171);
             Add_Error (Table.States (138));
-            Set_Minimal_Action (Table.States (138).Minimal_Complete_Actions, 
(1 => (Shift, 33, 171)));
+            Table.States (138).Minimal_Complete_Action := (Shift, 33, 171);
             Table.States (139).Productions := WisiToken.To_Vector ((1 => (67, 
2)));
             Add_Action (Table.States (139), (26, 33), (67, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (139).Minimal_Complete_Actions, 
(1 => (Reduce, 67, 1)));
+            Table.States (139).Minimal_Complete_Action := (Reduce, 67, 1);
             Table.States (140).Productions := WisiToken.To_Vector ((1 => (57, 
0)));
             Add_Action (Table.States (140), (26, 30, 32, 33), (57, 0), 1, 
null, null);
-            Set_Minimal_Action (Table.States (140).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 1)));
+            Table.States (140).Minimal_Complete_Action := (Reduce, 57, 1);
             Table.States (141).Productions := WisiToken.To_Vector (((41, 1), 
(57, 1), (67, 1)));
             Add_Action (Table.States (141), 26, Reduce, (67, 1), 1, null, 
null);
             Add_Action (Table.States (141), 30, 172);
             Add_Action (Table.States (141), 32, Reduce, (41, 1), 1, null, 
null);
             Add_Action (Table.States (141), 33, Reduce, (67, 1), 1, null, 
null);
             Add_Error (Table.States (141));
-            Set_Minimal_Action (Table.States (141).Minimal_Complete_Actions, 
((Reduce, 41, 1), (Reduce, 67, 1)));
+            Table.States (141).Minimal_Complete_Action := (Reduce, 41, 1);
             Table.States (142).Productions := WisiToken.To_Vector ((1 => (69, 
0)));
             Add_Action (Table.States (142), (26, 33), (69, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (142).Minimal_Complete_Actions, 
(1 => (Reduce, 69, 1)));
+            Table.States (142).Minimal_Complete_Action := (Reduce, 69, 1);
             Table.States (143).Productions := WisiToken.To_Vector ((1 => (54, 
0)));
             Add_Action (Table.States (143), (26, 33), (54, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (143).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 1)));
+            Table.States (143).Minimal_Complete_Action := (Reduce, 54, 1);
             Table.States (144).Productions := WisiToken.To_Vector ((1 => (56, 
1)));
             Add_Action (Table.States (144), (1 =>  33), (56, 1), 1, null, 
identifier_opt_1_check'Access);
-            Set_Minimal_Action (Table.States (144).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 1)));
+            Table.States (144).Minimal_Complete_Action := (Reduce, 56, 1);
             Table.States (145).Productions := WisiToken.To_Vector ((1 => (66, 
0)));
             Add_Action (Table.States (145), 33, 173);
             Add_Error (Table.States (145));
-            Set_Minimal_Action (Table.States (145).Minimal_Complete_Actions, 
(1 => (Shift, 33, 173)));
+            Table.States (145).Minimal_Complete_Action := (Shift, 33, 173);
             Table.States (146).Productions := WisiToken.To_Vector ((1 => (63, 
0)));
             Add_Action (Table.States (146), 33, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (146), 35, 144);
             Add_Error (Table.States (146));
             Add_Goto (Table.States (146), 56, 174);
-            Set_Minimal_Action (Table.States (146).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 0)));
+            Table.States (146).Minimal_Complete_Action := (Reduce, 56, 0);
             Table.States (147).Productions := WisiToken.To_Vector ((1 => (44, 
0)));
             Add_Action (Table.States (147), 16, 175);
             Add_Action (Table.States (147), 31, Reduce, (52, 0), 0, null, 
null);
@@ -1003,58 +1002,58 @@ package body Gpr_Process_LR1_Main is
             Add_Error (Table.States (147));
             Add_Goto (Table.States (147), 52, 177);
             Add_Goto (Table.States (147), 53, 178);
-            Set_Minimal_Action (Table.States (147).Minimal_Complete_Actions, 
(1 => (Reduce, 53, 0)));
+            Table.States (147).Minimal_Complete_Action := (Reduce, 53, 0);
             Table.States (148).Productions := WisiToken.To_Vector ((1 => (45, 
1)));
             Add_Action (Table.States (148), (7, 24), (45, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (148).Minimal_Complete_Actions, 
(1 => (Reduce, 45, 1)));
+            Table.States (148).Minimal_Complete_Action := (Reduce, 45, 1);
             Table.States (149).Productions := WisiToken.To_Vector (((43, 0), 
(45, 2)));
             Add_Action (Table.States (149), 7, 179);
             Add_Action (Table.States (149), 24, 147);
             Add_Error (Table.States (149));
             Add_Goto (Table.States (149), 44, 180);
-            Set_Minimal_Action (Table.States (149).Minimal_Complete_Actions, 
(1 => (Shift, 7, 179)));
+            Table.States (149).Minimal_Complete_Action := (Shift, 7, 179);
             Table.States (150).Productions := WisiToken.To_Vector ((1 => (57, 
1)));
             Add_Action (Table.States (150), (12, 30), (57, 1), 3, null, null);
-            Set_Minimal_Action (Table.States (150).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 3)));
+            Table.States (150).Minimal_Complete_Action := (Reduce, 57, 3);
             Table.States (151).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (151), 20, 181);
             Add_Error (Table.States (151));
-            Set_Minimal_Action (Table.States (151).Minimal_Complete_Actions, 
(1 => (Shift, 20, 181)));
+            Table.States (151).Minimal_Complete_Action := (Shift, 20, 181);
             Table.States (152).Productions := WisiToken.To_Vector ((1 => (52, 
2)));
             Add_Action (Table.States (152), (1 =>  20), (52, 2), 1, null, 
null);
-            Set_Minimal_Action (Table.States (152).Minimal_Complete_Actions, 
(1 => (Reduce, 52, 1)));
+            Table.States (152).Minimal_Complete_Action := (Reduce, 52, 1);
             Table.States (153).Productions := WisiToken.To_Vector ((1 => (52, 
1)));
             Add_Action (Table.States (153), (1 =>  20), (52, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (153).Minimal_Complete_Actions, 
(1 => (Reduce, 52, 1)));
+            Table.States (153).Minimal_Complete_Action := (Reduce, 52, 1);
             Table.States (154).Productions := WisiToken.To_Vector ((1 => (40, 
1)));
             Add_Action (Table.States (154), 20, 182);
             Add_Error (Table.States (154));
-            Set_Minimal_Action (Table.States (154).Minimal_Complete_Actions, 
(1 => (Shift, 20, 182)));
+            Table.States (154).Minimal_Complete_Action := (Shift, 20, 182);
             Table.States (155).Productions := WisiToken.To_Vector (((40, 0), 
(54, 1)));
             Add_Action (Table.States (155), 26, 170);
             Add_Action (Table.States (155), 33, 183);
             Add_Error (Table.States (155));
-            Set_Minimal_Action (Table.States (155).Minimal_Complete_Actions, 
(1 => (Shift, 33, 183)));
+            Table.States (155).Minimal_Complete_Action := (Shift, 33, 183);
             Table.States (156).Productions := WisiToken.To_Vector (((57, 1), 
(60, 0)));
             Add_Action (Table.States (156), 12, 184);
             Add_Action (Table.States (156), 30, 121);
             Add_Error (Table.States (156));
-            Set_Minimal_Action (Table.States (156).Minimal_Complete_Actions, 
(1 => (Shift, 12, 184)));
+            Table.States (156).Minimal_Complete_Action := (Shift, 12, 184);
             Table.States (157).Productions := WisiToken.To_Vector ((1 => (59, 
0)));
             Add_Action (Table.States (157), 7, 185);
             Add_Error (Table.States (157));
-            Set_Minimal_Action (Table.States (157).Minimal_Complete_Actions, 
(1 => (Shift, 7, 185)));
+            Table.States (157).Minimal_Complete_Action := (Shift, 7, 185);
             Table.States (158).Productions := WisiToken.To_Vector ((1 => (56, 
1)));
             Add_Action (Table.States (158), (30, 33), (56, 1), 1, null, 
identifier_opt_1_check'Access);
-            Set_Minimal_Action (Table.States (158).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 1)));
+            Table.States (158).Minimal_Complete_Action := (Reduce, 56, 1);
             Table.States (159).Productions := WisiToken.To_Vector ((1 => (57, 
0)));
             Add_Action (Table.States (159), (30, 33), (57, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (159).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 1)));
+            Table.States (159).Minimal_Complete_Action := (Reduce, 57, 1);
             Table.States (160).Productions := WisiToken.To_Vector (((57, 1), 
(61, 0)));
             Add_Action (Table.States (160), 30, 186);
             Add_Action (Table.States (160), 33, 187);
             Add_Error (Table.States (160));
-            Set_Minimal_Action (Table.States (160).Minimal_Complete_Actions, 
(1 => (Shift, 33, 187)));
+            Table.States (160).Minimal_Complete_Action := (Shift, 33, 187);
             Table.States (161).Productions := WisiToken.To_Vector ((1 => (39, 
0)));
             Add_Action (Table.States (161), 9, 32);
             Add_Action (Table.States (161), 10, 33);
@@ -1078,11 +1077,11 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (161), 67, 45);
             Add_Goto (Table.States (161), 68, 188);
             Add_Goto (Table.States (161), 69, 47);
-            Set_Minimal_Action (Table.States (161).Minimal_Complete_Actions, 
(1 => (Reduce, 68, 0)));
+            Table.States (161).Minimal_Complete_Action := (Reduce, 68, 0);
             Table.States (162).Productions := WisiToken.To_Vector ((1 => (70, 
0)));
             Add_Action (Table.States (162), 33, 189);
             Add_Error (Table.States (162));
-            Set_Minimal_Action (Table.States (162).Minimal_Complete_Actions, 
(1 => (Shift, 33, 189)));
+            Table.States (162).Minimal_Complete_Action := (Shift, 33, 189);
             Table.States (163).Productions := WisiToken.To_Vector ((1 => (65, 
1)));
             Add_Action (Table.States (163), 9, 130);
             Add_Action (Table.States (163), 10, 131);
@@ -1104,7 +1103,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (163), 57, 141);
             Add_Goto (Table.States (163), 67, 142);
             Add_Goto (Table.States (163), 69, 143);
-            Set_Minimal_Action (Table.States (163).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 0)));
+            Table.States (163).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (164).Productions := WisiToken.To_Vector ((1 => (39, 
0)));
             Add_Action (Table.States (164), 9, 32);
             Add_Action (Table.States (164), 10, 33);
@@ -1128,25 +1127,25 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (164), 67, 45);
             Add_Goto (Table.States (164), 68, 168);
             Add_Goto (Table.States (164), 69, 47);
-            Set_Minimal_Action (Table.States (164).Minimal_Complete_Actions, 
(1 => (Reduce, 68, 0)));
+            Table.States (164).Minimal_Complete_Action := (Reduce, 68, 0);
             Table.States (165).Productions := WisiToken.To_Vector ((1 => (55, 
0)));
             Add_Action (Table.States (165), (26, 33), (55, 0), 2, null, null);
-            Set_Minimal_Action (Table.States (165).Minimal_Complete_Actions, 
(1 => (Reduce, 55, 2)));
+            Table.States (165).Minimal_Complete_Action := (Reduce, 55, 2);
             Table.States (166).Productions := WisiToken.To_Vector ((1 => (55, 
1)));
             Add_Action (Table.States (166), (26, 33), (55, 1), 2, null, null);
-            Set_Minimal_Action (Table.States (166).Minimal_Complete_Actions, 
(1 => (Reduce, 55, 2)));
+            Table.States (166).Minimal_Complete_Action := (Reduce, 55, 2);
             Table.States (167).Productions := WisiToken.To_Vector ((1 => (69, 
1)));
             Add_Action (Table.States (167), (26, 33), (69, 1), 2, null, null);
-            Set_Minimal_Action (Table.States (167).Minimal_Complete_Actions, 
(1 => (Reduce, 69, 2)));
+            Table.States (167).Minimal_Complete_Action := (Reduce, 69, 2);
             Table.States (168).Productions := WisiToken.To_Vector (((39, 0), 
(68, 1)));
             Add_Action (Table.States (168), 20, 191);
             Add_Action (Table.States (168), 29, 67);
             Add_Error (Table.States (168));
-            Set_Minimal_Action (Table.States (168).Minimal_Complete_Actions, 
(1 => (Shift, 20, 191)));
+            Table.States (168).Minimal_Complete_Action := (Shift, 20, 191);
             Table.States (169).Productions := WisiToken.To_Vector (((42, 0), 
(42, 1)));
             Add_Action (Table.States (169), 35, 192);
             Add_Error (Table.States (169));
-            Set_Minimal_Action (Table.States (169).Minimal_Complete_Actions, 
(1 => (Shift, 35, 192)));
+            Table.States (169).Minimal_Complete_Action := (Shift, 35, 192);
             Table.States (170).Productions := WisiToken.To_Vector ((1 => (54, 
1)));
             Add_Action (Table.States (170), 9, 130);
             Add_Action (Table.States (170), 10, 131);
@@ -1167,56 +1166,56 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (170), 57, 141);
             Add_Goto (Table.States (170), 67, 142);
             Add_Goto (Table.States (170), 69, 193);
-            Set_Minimal_Action (Table.States (170).Minimal_Complete_Actions, 
(1 => (Reduce, 69, 0)));
+            Table.States (170).Minimal_Complete_Action := (Reduce, 69, 0);
             Table.States (171).Productions := WisiToken.To_Vector ((1 => (65, 
0)));
             Add_Action (Table.States (171), (5, 7, 11, 15, 17, 22, 35), (65, 
0), 4, simple_declarative_item_0'Access,
             null);
-            Set_Minimal_Action (Table.States (171).Minimal_Complete_Actions, 
(1 => (Reduce, 65, 4)));
+            Table.States (171).Minimal_Complete_Action := (Reduce, 65, 4);
             Table.States (172).Productions := WisiToken.To_Vector ((1 => (57, 
1)));
             Add_Action (Table.States (172), 35, 194);
             Add_Error (Table.States (172));
-            Set_Minimal_Action (Table.States (172).Minimal_Complete_Actions, 
(1 => (Shift, 35, 194)));
+            Table.States (172).Minimal_Complete_Action := (Shift, 35, 194);
             Table.States (173).Productions := WisiToken.To_Vector ((1 => (66, 
0)));
             Add_Action (Table.States (173), (1 =>  37), (66, 0), 7, 
simple_project_declaration_0'Access,
             simple_project_declaration_0_check'Access);
-            Set_Minimal_Action (Table.States (173).Minimal_Complete_Actions, 
(1 => (Reduce, 66, 7)));
+            Table.States (173).Minimal_Complete_Action := (Reduce, 66, 7);
             Table.States (174).Productions := WisiToken.To_Vector ((1 => (63, 
0)));
             Add_Action (Table.States (174), 33, 195);
             Add_Error (Table.States (174));
-            Set_Minimal_Action (Table.States (174).Minimal_Complete_Actions, 
(1 => (Shift, 33, 195)));
+            Table.States (174).Minimal_Complete_Action := (Shift, 33, 195);
             Table.States (175).Productions := WisiToken.To_Vector ((1 => (52, 
2)));
             Add_Action (Table.States (175), (31, 34), (52, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (175).Minimal_Complete_Actions, 
(1 => (Reduce, 52, 1)));
+            Table.States (175).Minimal_Complete_Action := (Reduce, 52, 1);
             Table.States (176).Productions := WisiToken.To_Vector ((1 => (52, 
1)));
             Add_Action (Table.States (176), (31, 34), (52, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (176).Minimal_Complete_Actions, 
(1 => (Reduce, 52, 1)));
+            Table.States (176).Minimal_Complete_Action := (Reduce, 52, 1);
             Table.States (177).Productions := WisiToken.To_Vector ((1 => (53, 
0)));
             Add_Action (Table.States (177), (31, 34), (53, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (177).Minimal_Complete_Actions, 
(1 => (Reduce, 53, 1)));
+            Table.States (177).Minimal_Complete_Action := (Reduce, 53, 1);
             Table.States (178).Productions := WisiToken.To_Vector (((44, 0), 
(53, 1)));
             Add_Action (Table.States (178), 31, 196);
             Add_Action (Table.States (178), 34, 197);
             Add_Error (Table.States (178));
-            Set_Minimal_Action (Table.States (178).Minimal_Complete_Actions, 
(1 => (Shift, 31, 196)));
+            Table.States (178).Minimal_Complete_Action := (Shift, 31, 196);
             Table.States (179).Productions := WisiToken.To_Vector ((1 => (43, 
0)));
             Add_Action (Table.States (179), 5, 198);
             Add_Error (Table.States (179));
-            Set_Minimal_Action (Table.States (179).Minimal_Complete_Actions, 
(1 => (Shift, 5, 198)));
+            Table.States (179).Minimal_Complete_Action := (Shift, 5, 198);
             Table.States (180).Productions := WisiToken.To_Vector ((1 => (45, 
2)));
             Add_Action (Table.States (180), (7, 24), (45, 2), 2, null, null);
-            Set_Minimal_Action (Table.States (180).Minimal_Complete_Actions, 
(1 => (Reduce, 45, 2)));
+            Table.States (180).Minimal_Complete_Action := (Reduce, 45, 2);
             Table.States (181).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (181), 23, 199);
             Add_Error (Table.States (181));
-            Set_Minimal_Action (Table.States (181).Minimal_Complete_Actions, 
(1 => (Shift, 23, 199)));
+            Table.States (181).Minimal_Complete_Action := (Shift, 23, 199);
             Table.States (182).Productions := WisiToken.To_Vector ((1 => (40, 
1)));
             Add_Action (Table.States (182), 23, 200);
             Add_Error (Table.States (182));
-            Set_Minimal_Action (Table.States (182).Minimal_Complete_Actions, 
(1 => (Shift, 23, 200)));
+            Table.States (182).Minimal_Complete_Action := (Shift, 23, 200);
             Table.States (183).Productions := WisiToken.To_Vector ((1 => (40, 
0)));
             Add_Action (Table.States (183), (5, 7, 11, 15, 17, 22, 35), (40, 
0), 5, attribute_declaration_0'Access,
             null);
-            Set_Minimal_Action (Table.States (183).Minimal_Complete_Actions, 
(1 => (Reduce, 40, 5)));
+            Table.States (183).Minimal_Complete_Action := (Reduce, 40, 5);
             Table.States (184).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (184), 5, 85);
             Add_Action (Table.States (184), 7, Reduce, (51, 0), 0, null, null);
@@ -1237,53 +1236,53 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (184), 61, 99);
             Add_Goto (Table.States (184), 65, 100);
             Add_Goto (Table.States (184), 70, 101);
-            Set_Minimal_Action (Table.States (184).Minimal_Complete_Actions, 
(1 => (Reduce, 51, 0)));
+            Table.States (184).Minimal_Complete_Action := (Reduce, 51, 0);
             Table.States (185).Productions := WisiToken.To_Vector ((1 => (59, 
0)));
             Add_Action (Table.States (185), 33, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (185), 35, 144);
             Add_Error (Table.States (185));
             Add_Goto (Table.States (185), 56, 202);
-            Set_Minimal_Action (Table.States (185).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 0)));
+            Table.States (185).Minimal_Complete_Action := (Reduce, 56, 0);
             Table.States (186).Productions := WisiToken.To_Vector ((1 => (57, 
1)));
             Add_Action (Table.States (186), 35, 203);
             Add_Error (Table.States (186));
-            Set_Minimal_Action (Table.States (186).Minimal_Complete_Actions, 
(1 => (Shift, 35, 203)));
+            Table.States (186).Minimal_Complete_Action := (Shift, 35, 203);
             Table.States (187).Productions := WisiToken.To_Vector ((1 => (61, 
0)));
             Add_Action (Table.States (187), (5, 7, 11, 15, 17, 22, 35), (61, 
0), 5, package_renaming_0'Access, null);
-            Set_Minimal_Action (Table.States (187).Minimal_Complete_Actions, 
(1 => (Reduce, 61, 5)));
+            Table.States (187).Minimal_Complete_Action := (Reduce, 61, 5);
             Table.States (188).Productions := WisiToken.To_Vector (((39, 0), 
(68, 1)));
             Add_Action (Table.States (188), 20, 204);
             Add_Action (Table.States (188), 29, 67);
             Add_Error (Table.States (188));
-            Set_Minimal_Action (Table.States (188).Minimal_Complete_Actions, 
(1 => (Shift, 20, 204)));
+            Table.States (188).Minimal_Complete_Action := (Shift, 20, 204);
             Table.States (189).Productions := WisiToken.To_Vector ((1 => (70, 
0)));
             Add_Action (Table.States (189), (5, 7, 11, 15, 17, 22, 35), (70, 
0), 5, typed_string_declaration_0'Access,
             null);
-            Set_Minimal_Action (Table.States (189).Minimal_Complete_Actions, 
(1 => (Reduce, 70, 5)));
+            Table.States (189).Minimal_Complete_Action := (Reduce, 70, 5);
             Table.States (190).Productions := WisiToken.To_Vector (((54, 1), 
(65, 1)));
             Add_Action (Table.States (190), 26, 170);
             Add_Action (Table.States (190), 33, 205);
             Add_Error (Table.States (190));
-            Set_Minimal_Action (Table.States (190).Minimal_Complete_Actions, 
(1 => (Shift, 33, 205)));
+            Table.States (190).Minimal_Complete_Action := (Shift, 33, 205);
             Table.States (191).Productions := WisiToken.To_Vector ((1 => (39, 
0)));
             Add_Action (Table.States (191), (26, 33), (39, 0), 3, 
aggregate_g_0'Access, null);
-            Set_Minimal_Action (Table.States (191).Minimal_Complete_Actions, 
(1 => (Reduce, 39, 3)));
+            Table.States (191).Minimal_Complete_Action := (Reduce, 39, 3);
             Table.States (192).Productions := WisiToken.To_Vector (((42, 0), 
(42, 1)));
             Add_Action (Table.States (192), 13, 206);
             Add_Action (Table.States (192), 26, Reduce, (42, 0), 3, null, 
null);
             Add_Action (Table.States (192), 33, Reduce, (42, 0), 3, null, 
null);
             Add_Error (Table.States (192));
-            Set_Minimal_Action (Table.States (192).Minimal_Complete_Actions, 
(1 => (Reduce, 42, 3)));
+            Table.States (192).Minimal_Complete_Action := (Reduce, 42, 3);
             Table.States (193).Productions := WisiToken.To_Vector ((1 => (54, 
1)));
             Add_Action (Table.States (193), (26, 33), (54, 1), 3, null, null);
-            Set_Minimal_Action (Table.States (193).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 3)));
+            Table.States (193).Minimal_Complete_Action := (Reduce, 54, 3);
             Table.States (194).Productions := WisiToken.To_Vector ((1 => (57, 
1)));
             Add_Action (Table.States (194), (26, 30, 32, 33), (57, 1), 3, 
null, null);
-            Set_Minimal_Action (Table.States (194).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 3)));
+            Table.States (194).Minimal_Complete_Action := (Reduce, 57, 3);
             Table.States (195).Productions := WisiToken.To_Vector ((1 => (63, 
0)));
             Add_Action (Table.States (195), (1 =>  37), (63, 0), 9, 
project_extension_0'Access,
             project_extension_0_check'Access);
-            Set_Minimal_Action (Table.States (195).Minimal_Complete_Actions, 
(1 => (Reduce, 63, 9)));
+            Table.States (195).Minimal_Complete_Action := (Reduce, 63, 9);
             Table.States (196).Productions := WisiToken.To_Vector ((1 => (44, 
0)));
             Add_Action (Table.States (196), 5, 207);
             Add_Action (Table.States (196), 7, Reduce, (51, 0), 0, null, null);
@@ -1305,7 +1304,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (196), 61, 221);
             Add_Goto (Table.States (196), 65, 222);
             Add_Goto (Table.States (196), 70, 223);
-            Set_Minimal_Action (Table.States (196).Minimal_Complete_Actions, 
(1 => (Reduce, 51, 0)));
+            Table.States (196).Minimal_Complete_Action := (Reduce, 51, 0);
             Table.States (197).Productions := WisiToken.To_Vector ((1 => (53, 
1)));
             Add_Action (Table.States (197), 16, 175);
             Add_Action (Table.States (197), 31, Reduce, (52, 0), 0, null, 
null);
@@ -1313,11 +1312,11 @@ package body Gpr_Process_LR1_Main is
             Add_Action (Table.States (197), 36, 176);
             Add_Error (Table.States (197));
             Add_Goto (Table.States (197), 52, 224);
-            Set_Minimal_Action (Table.States (197).Minimal_Complete_Actions, 
(1 => (Reduce, 52, 0)));
+            Table.States (197).Minimal_Complete_Action := (Reduce, 52, 0);
             Table.States (198).Productions := WisiToken.To_Vector ((1 => (43, 
0)));
             Add_Action (Table.States (198), 33, 225);
             Add_Error (Table.States (198));
-            Set_Minimal_Action (Table.States (198).Minimal_Complete_Actions, 
(1 => (Shift, 33, 225)));
+            Table.States (198).Minimal_Complete_Action := (Shift, 33, 225);
             Table.States (199).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (199), 9, 130);
             Add_Action (Table.States (199), 10, 131);
@@ -1339,7 +1338,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (199), 57, 141);
             Add_Goto (Table.States (199), 67, 142);
             Add_Goto (Table.States (199), 69, 143);
-            Set_Minimal_Action (Table.States (199).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 0)));
+            Table.States (199).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (200).Productions := WisiToken.To_Vector ((1 => (40, 
1)));
             Add_Action (Table.States (200), 9, 130);
             Add_Action (Table.States (200), 10, 131);
@@ -1361,29 +1360,29 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (200), 57, 141);
             Add_Goto (Table.States (200), 67, 142);
             Add_Goto (Table.States (200), 69, 143);
-            Set_Minimal_Action (Table.States (200).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 0)));
+            Table.States (200).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (201).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (201), 7, 228);
             Add_Error (Table.States (201));
-            Set_Minimal_Action (Table.States (201).Minimal_Complete_Actions, 
(1 => (Shift, 7, 228)));
+            Table.States (201).Minimal_Complete_Action := (Shift, 7, 228);
             Table.States (202).Productions := WisiToken.To_Vector ((1 => (59, 
0)));
             Add_Action (Table.States (202), 33, 229);
             Add_Error (Table.States (202));
-            Set_Minimal_Action (Table.States (202).Minimal_Complete_Actions, 
(1 => (Shift, 33, 229)));
+            Table.States (202).Minimal_Complete_Action := (Shift, 33, 229);
             Table.States (203).Productions := WisiToken.To_Vector ((1 => (57, 
1)));
             Add_Action (Table.States (203), (30, 33), (57, 1), 3, null, null);
-            Set_Minimal_Action (Table.States (203).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 3)));
+            Table.States (203).Minimal_Complete_Action := (Reduce, 57, 3);
             Table.States (204).Productions := WisiToken.To_Vector ((1 => (39, 
0)));
             Add_Action (Table.States (204), (1 =>  33), (39, 0), 3, 
aggregate_g_0'Access, null);
-            Set_Minimal_Action (Table.States (204).Minimal_Complete_Actions, 
(1 => (Reduce, 39, 3)));
+            Table.States (204).Minimal_Complete_Action := (Reduce, 39, 3);
             Table.States (205).Productions := WisiToken.To_Vector ((1 => (65, 
1)));
             Add_Action (Table.States (205), (5, 7, 11, 15, 17, 22, 35), (65, 
1), 6, simple_declarative_item_1'Access,
             null);
-            Set_Minimal_Action (Table.States (205).Minimal_Complete_Actions, 
(1 => (Reduce, 65, 6)));
+            Table.States (205).Minimal_Complete_Action := (Reduce, 65, 6);
             Table.States (206).Productions := WisiToken.To_Vector ((1 => (42, 
1)));
             Add_Action (Table.States (206), 36, 230);
             Add_Error (Table.States (206));
-            Set_Minimal_Action (Table.States (206).Minimal_Complete_Actions, 
(1 => (Shift, 36, 230)));
+            Table.States (206).Minimal_Complete_Action := (Shift, 36, 230);
             Table.States (207).Productions := WisiToken.To_Vector ((1 => (43, 
0)));
             Add_Action (Table.States (207), 12, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (207), 30, Reduce, (56, 0), 0, null, 
null);
@@ -1391,16 +1390,16 @@ package body Gpr_Process_LR1_Main is
             Add_Error (Table.States (207));
             Add_Goto (Table.States (207), 56, 106);
             Add_Goto (Table.States (207), 57, 231);
-            Set_Minimal_Action (Table.States (207).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 0)));
+            Table.States (207).Minimal_Complete_Action := (Reduce, 57, 0);
             Table.States (208).Productions := WisiToken.To_Vector (((40, 0), 
(40, 1), (40, 2)));
             Add_Action (Table.States (208), 9, 232);
             Add_Action (Table.States (208), 35, 233);
             Add_Error (Table.States (208));
-            Set_Minimal_Action (Table.States (208).Minimal_Complete_Actions, 
((Shift, 9, 232), (Shift, 35, 233)));
+            Table.States (208).Minimal_Complete_Action := (Shift, 35, 233);
             Table.States (209).Productions := WisiToken.To_Vector ((1 => (65, 
4)));
             Add_Action (Table.States (209), 33, 234);
             Add_Error (Table.States (209));
-            Set_Minimal_Action (Table.States (209).Minimal_Complete_Actions, 
(1 => (Shift, 33, 234)));
+            Table.States (209).Minimal_Complete_Action := (Shift, 33, 234);
             Table.States (210).Productions := WisiToken.To_Vector (((59, 0), 
(60, 0), (61, 0)));
             Add_Action (Table.States (210), 8, Reduce, (56, 0), 0, null, null);
             Add_Action (Table.States (210), 12, Reduce, (56, 0), 0, null, 
null);
@@ -1408,25 +1407,25 @@ package body Gpr_Process_LR1_Main is
             Add_Action (Table.States (210), 35, 111);
             Add_Error (Table.States (210));
             Add_Goto (Table.States (210), 56, 235);
-            Set_Minimal_Action (Table.States (210).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 0)));
+            Table.States (210).Minimal_Complete_Action := (Reduce, 56, 0);
             Table.States (211).Productions := WisiToken.To_Vector ((1 => (70, 
0)));
             Add_Action (Table.States (211), 35, 236);
             Add_Error (Table.States (211));
-            Set_Minimal_Action (Table.States (211).Minimal_Complete_Actions, 
(1 => (Shift, 35, 236)));
+            Table.States (211).Minimal_Complete_Action := (Shift, 35, 236);
             Table.States (212).Productions := WisiToken.To_Vector (((65, 0), 
(65, 1)));
             Add_Action (Table.States (212), 27, 237);
             Add_Action (Table.States (212), 28, 238);
             Add_Error (Table.States (212));
-            Set_Minimal_Action (Table.States (212).Minimal_Complete_Actions, 
((Shift, 27, 237), (Shift, 28, 238)));
+            Table.States (212).Minimal_Complete_Action := (Shift, 28, 238);
             Table.States (213).Productions := WisiToken.To_Vector ((1 => (65, 
2)));
             Add_Action (Table.States (213), (5, 7, 11, 15, 17, 22, 24, 35), 
(65, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (213).Minimal_Complete_Actions, 
(1 => (Reduce, 65, 1)));
+            Table.States (213).Minimal_Complete_Action := (Reduce, 65, 1);
             Table.States (214).Productions := WisiToken.To_Vector ((1 => (65, 
3)));
             Add_Action (Table.States (214), (5, 7, 11, 15, 17, 22, 24, 35), 
(65, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (214).Minimal_Complete_Actions, 
(1 => (Reduce, 65, 1)));
+            Table.States (214).Minimal_Complete_Action := (Reduce, 65, 1);
             Table.States (215).Productions := WisiToken.To_Vector ((1 => (50, 
0)));
             Add_Action (Table.States (215), (5, 7, 11, 15, 17, 22, 24, 35), 
(50, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (215).Minimal_Complete_Actions, 
(1 => (Reduce, 50, 1)));
+            Table.States (215).Minimal_Complete_Action := (Reduce, 50, 1);
             Table.States (216).Productions := WisiToken.To_Vector (((50, 1), 
(51, 1)));
             Add_Action (Table.States (216), 5, 207);
             Add_Action (Table.States (216), 7, Reduce, (51, 1), 1, null, null);
@@ -1446,94 +1445,93 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (216), 61, 221);
             Add_Goto (Table.States (216), 65, 222);
             Add_Goto (Table.States (216), 70, 223);
-            Set_Minimal_Action (Table.States (216).Minimal_Complete_Actions, 
(1 => (Reduce, 51, 1)));
+            Table.States (216).Minimal_Complete_Action := (Reduce, 51, 1);
          end Subr_2;
          procedure Subr_3
          is begin
             Table.States (217).Productions := WisiToken.To_Vector ((1 => (44, 
0)));
             Add_Action (Table.States (217), (7, 24), (44, 0), 4, 
case_item_0'Access, null);
-            Set_Minimal_Action (Table.States (217).Minimal_Complete_Actions, 
(1 => (Reduce, 44, 4)));
+            Table.States (217).Minimal_Complete_Action := (Reduce, 44, 4);
             Table.States (218).Productions := WisiToken.To_Vector ((1 => (49, 
2)));
             Add_Action (Table.States (218), (5, 7, 11, 15, 17, 22, 24, 35), 
(49, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (218).Minimal_Complete_Actions, 
(1 => (Reduce, 49, 1)));
+            Table.States (218).Minimal_Complete_Action := (Reduce, 49, 1);
             Table.States (219).Productions := WisiToken.To_Vector ((1 => (58, 
0)));
             Add_Action (Table.States (219), (5, 7, 11, 15, 17, 22, 24, 35), 
(58, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (219).Minimal_Complete_Actions, 
(1 => (Reduce, 58, 1)));
+            Table.States (219).Minimal_Complete_Action := (Reduce, 58, 1);
             Table.States (220).Productions := WisiToken.To_Vector ((1 => (58, 
1)));
             Add_Action (Table.States (220), (5, 7, 11, 15, 17, 22, 24, 35), 
(58, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (220).Minimal_Complete_Actions, 
(1 => (Reduce, 58, 1)));
+            Table.States (220).Minimal_Complete_Action := (Reduce, 58, 1);
             Table.States (221).Productions := WisiToken.To_Vector ((1 => (58, 
2)));
             Add_Action (Table.States (221), (5, 7, 11, 15, 17, 22, 24, 35), 
(58, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (221).Minimal_Complete_Actions, 
(1 => (Reduce, 58, 1)));
+            Table.States (221).Minimal_Complete_Action := (Reduce, 58, 1);
             Table.States (222).Productions := WisiToken.To_Vector ((1 => (49, 
0)));
             Add_Action (Table.States (222), (5, 7, 11, 15, 17, 22, 24, 35), 
(49, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (222).Minimal_Complete_Actions, 
(1 => (Reduce, 49, 1)));
+            Table.States (222).Minimal_Complete_Action := (Reduce, 49, 1);
             Table.States (223).Productions := WisiToken.To_Vector ((1 => (49, 
1)));
             Add_Action (Table.States (223), (5, 7, 11, 15, 17, 22, 24, 35), 
(49, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (223).Minimal_Complete_Actions, 
(1 => (Reduce, 49, 1)));
+            Table.States (223).Minimal_Complete_Action := (Reduce, 49, 1);
             Table.States (224).Productions := WisiToken.To_Vector ((1 => (53, 
1)));
             Add_Action (Table.States (224), (31, 34), (53, 1), 3, null, null);
-            Set_Minimal_Action (Table.States (224).Minimal_Complete_Actions, 
(1 => (Reduce, 53, 3)));
+            Table.States (224).Minimal_Complete_Action := (Reduce, 53, 3);
             Table.States (225).Productions := WisiToken.To_Vector ((1 => (43, 
0)));
             Add_Action (Table.States (225), (5, 7, 11, 15, 17, 22, 35), (43, 
0), 7, case_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (225).Minimal_Complete_Actions, 
(1 => (Reduce, 43, 7)));
+            Table.States (225).Minimal_Complete_Action := (Reduce, 43, 7);
             Table.States (226).Productions := WisiToken.To_Vector (((40, 2), 
(54, 1)));
             Add_Action (Table.States (226), 26, 170);
             Add_Action (Table.States (226), 33, 240);
             Add_Error (Table.States (226));
-            Set_Minimal_Action (Table.States (226).Minimal_Complete_Actions, 
(1 => (Shift, 33, 240)));
+            Table.States (226).Minimal_Complete_Action := (Shift, 33, 240);
             Table.States (227).Productions := WisiToken.To_Vector (((40, 1), 
(54, 1)));
             Add_Action (Table.States (227), 26, 170);
             Add_Action (Table.States (227), 33, 241);
             Add_Error (Table.States (227));
-            Set_Minimal_Action (Table.States (227).Minimal_Complete_Actions, 
(1 => (Shift, 33, 241)));
+            Table.States (227).Minimal_Complete_Action := (Shift, 33, 241);
             Table.States (228).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (228), 33, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (228), 35, 144);
             Add_Error (Table.States (228));
             Add_Goto (Table.States (228), 56, 242);
-            Set_Minimal_Action (Table.States (228).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 0)));
+            Table.States (228).Minimal_Complete_Action := (Reduce, 56, 0);
             Table.States (229).Productions := WisiToken.To_Vector ((1 => (59, 
0)));
             Add_Action (Table.States (229), (5, 7, 11, 15, 17, 22, 35), (59, 
0), 7, package_spec_0'Access,
             package_spec_0_check'Access);
-            Set_Minimal_Action (Table.States (229).Minimal_Complete_Actions, 
(1 => (Reduce, 59, 7)));
+            Table.States (229).Minimal_Complete_Action := (Reduce, 59, 7);
             Table.States (230).Productions := WisiToken.To_Vector ((1 => (42, 
1)));
             Add_Action (Table.States (230), 20, 243);
             Add_Error (Table.States (230));
-            Set_Minimal_Action (Table.States (230).Minimal_Complete_Actions, 
(1 => (Shift, 20, 243)));
+            Table.States (230).Minimal_Complete_Action := (Shift, 20, 243);
             Table.States (231).Productions := WisiToken.To_Vector (((43, 0), 
(57, 1)));
             Add_Action (Table.States (231), 12, 244);
             Add_Action (Table.States (231), 30, 121);
             Add_Error (Table.States (231));
-            Set_Minimal_Action (Table.States (231).Minimal_Complete_Actions, 
(1 => (Shift, 12, 244)));
+            Table.States (231).Minimal_Complete_Action := (Shift, 12, 244);
             Table.States (232).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (232), 13, 245);
             Add_Error (Table.States (232));
-            Set_Minimal_Action (Table.States (232).Minimal_Complete_Actions, 
(1 => (Shift, 13, 245)));
+            Table.States (232).Minimal_Complete_Action := (Shift, 13, 245);
             Table.States (233).Productions := WisiToken.To_Vector (((40, 0), 
(40, 1)));
             Add_Action (Table.States (233), 13, 246);
             Add_Action (Table.States (233), 23, 247);
             Add_Error (Table.States (233));
-            Set_Minimal_Action (Table.States (233).Minimal_Complete_Actions, 
((Shift, 13, 246), (Shift, 23, 247)));
+            Table.States (233).Minimal_Complete_Action := (Shift, 23, 247);
             Table.States (234).Productions := WisiToken.To_Vector ((1 => (65, 
4)));
             Add_Action (Table.States (234), (5, 7, 11, 15, 17, 22, 24, 35), 
(65, 4), 2,
             simple_declarative_item_4'Access, null);
-            Set_Minimal_Action (Table.States (234).Minimal_Complete_Actions, 
(1 => (Reduce, 65, 2)));
+            Table.States (234).Minimal_Complete_Action := (Reduce, 65, 2);
             Table.States (235).Productions := WisiToken.To_Vector (((59, 0), 
(60, 0), (61, 0)));
             Add_Action (Table.States (235), 8, 248);
             Add_Action (Table.States (235), 12, 249);
             Add_Action (Table.States (235), 19, 250);
             Add_Error (Table.States (235));
-            Set_Minimal_Action (Table.States (235).Minimal_Complete_Actions, 
((Shift, 8, 248), (Shift, 12, 249),
-            (Shift, 19, 250)));
+            Table.States (235).Minimal_Complete_Action := (Shift, 19, 250);
             Table.States (236).Productions := WisiToken.To_Vector ((1 => (70, 
0)));
             Add_Action (Table.States (236), 12, 251);
             Add_Error (Table.States (236));
-            Set_Minimal_Action (Table.States (236).Minimal_Complete_Actions, 
(1 => (Shift, 12, 251)));
+            Table.States (236).Minimal_Complete_Action := (Shift, 12, 251);
             Table.States (237).Productions := WisiToken.To_Vector ((1 => (65, 
1)));
             Add_Action (Table.States (237), 35, 252);
             Add_Error (Table.States (237));
-            Set_Minimal_Action (Table.States (237).Minimal_Complete_Actions, 
(1 => (Shift, 35, 252)));
+            Table.States (237).Minimal_Complete_Action := (Shift, 35, 252);
             Table.States (238).Productions := WisiToken.To_Vector ((1 => (65, 
0)));
             Add_Action (Table.States (238), 9, 130);
             Add_Action (Table.States (238), 10, 131);
@@ -1555,43 +1553,43 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (238), 57, 141);
             Add_Goto (Table.States (238), 67, 142);
             Add_Goto (Table.States (238), 69, 143);
-            Set_Minimal_Action (Table.States (238).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 0)));
+            Table.States (238).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (239).Productions := WisiToken.To_Vector ((1 => (50, 
1)));
             Add_Action (Table.States (239), (5, 7, 11, 15, 17, 22, 24, 35), 
(50, 1), 2, null, null);
-            Set_Minimal_Action (Table.States (239).Minimal_Complete_Actions, 
(1 => (Reduce, 50, 2)));
+            Table.States (239).Minimal_Complete_Action := (Reduce, 50, 2);
             Table.States (240).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (240), (5, 7, 11, 15, 17, 22, 35), (40, 
2), 8, attribute_declaration_2'Access,
             null);
-            Set_Minimal_Action (Table.States (240).Minimal_Complete_Actions, 
(1 => (Reduce, 40, 8)));
+            Table.States (240).Minimal_Complete_Action := (Reduce, 40, 8);
             Table.States (241).Productions := WisiToken.To_Vector ((1 => (40, 
1)));
             Add_Action (Table.States (241), (5, 7, 11, 15, 17, 22, 35), (40, 
1), 8, attribute_declaration_1'Access,
             null);
-            Set_Minimal_Action (Table.States (241).Minimal_Complete_Actions, 
(1 => (Reduce, 40, 8)));
+            Table.States (241).Minimal_Complete_Action := (Reduce, 40, 8);
             Table.States (242).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (242), 33, 254);
             Add_Error (Table.States (242));
-            Set_Minimal_Action (Table.States (242).Minimal_Complete_Actions, 
(1 => (Shift, 33, 254)));
+            Table.States (242).Minimal_Complete_Action := (Shift, 33, 254);
             Table.States (243).Productions := WisiToken.To_Vector ((1 => (42, 
1)));
             Add_Action (Table.States (243), (26, 33), (42, 1), 6, null, null);
-            Set_Minimal_Action (Table.States (243).Minimal_Complete_Actions, 
(1 => (Reduce, 42, 6)));
+            Table.States (243).Minimal_Complete_Action := (Reduce, 42, 6);
             Table.States (244).Productions := WisiToken.To_Vector ((1 => (43, 
0)));
             Add_Action (Table.States (244), 7, Reduce, (45, 0), 0, null, null);
             Add_Action (Table.States (244), 24, 147, (45, 0), 0, null, null);
             Add_Error (Table.States (244));
             Add_Goto (Table.States (244), 44, 148);
             Add_Goto (Table.States (244), 45, 255);
-            Set_Minimal_Action (Table.States (244).Minimal_Complete_Actions, 
(1 => (Reduce, 45, 0)));
+            Table.States (244).Minimal_Complete_Action := (Reduce, 45, 0);
             Table.States (245).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (245), 36, 256);
             Add_Error (Table.States (245));
-            Set_Minimal_Action (Table.States (245).Minimal_Complete_Actions, 
(1 => (Shift, 36, 256)));
+            Table.States (245).Minimal_Complete_Action := (Shift, 36, 256);
             Table.States (246).Productions := WisiToken.To_Vector ((1 => (40, 
1)));
             Add_Action (Table.States (246), 16, 152);
             Add_Action (Table.States (246), 20, Reduce, (52, 0), 0, null, 
null);
             Add_Action (Table.States (246), 36, 153);
             Add_Error (Table.States (246));
             Add_Goto (Table.States (246), 52, 257);
-            Set_Minimal_Action (Table.States (246).Minimal_Complete_Actions, 
(1 => (Reduce, 52, 0)));
+            Table.States (246).Minimal_Complete_Action := (Reduce, 52, 0);
             Table.States (247).Productions := WisiToken.To_Vector ((1 => (40, 
0)));
             Add_Action (Table.States (247), 9, 130);
             Add_Action (Table.States (247), 10, 131);
@@ -1613,7 +1611,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (247), 57, 141);
             Add_Goto (Table.States (247), 67, 142);
             Add_Goto (Table.States (247), 69, 143);
-            Set_Minimal_Action (Table.States (247).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 0)));
+            Table.States (247).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (248).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (248), 12, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (248), 30, Reduce, (56, 0), 0, null, 
null);
@@ -1621,7 +1619,7 @@ package body Gpr_Process_LR1_Main is
             Add_Error (Table.States (248));
             Add_Goto (Table.States (248), 56, 106);
             Add_Goto (Table.States (248), 57, 259);
-            Set_Minimal_Action (Table.States (248).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 0)));
+            Table.States (248).Minimal_Complete_Action := (Reduce, 57, 0);
             Table.States (249).Productions := WisiToken.To_Vector ((1 => (59, 
0)));
             Add_Action (Table.States (249), 5, 85);
             Add_Action (Table.States (249), 7, Reduce, (51, 0), 0, null, null);
@@ -1642,7 +1640,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (249), 61, 99);
             Add_Goto (Table.States (249), 65, 100);
             Add_Goto (Table.States (249), 70, 101);
-            Set_Minimal_Action (Table.States (249).Minimal_Complete_Actions, 
(1 => (Reduce, 51, 0)));
+            Table.States (249).Minimal_Complete_Action := (Reduce, 51, 0);
             Table.States (250).Productions := WisiToken.To_Vector ((1 => (61, 
0)));
             Add_Action (Table.States (250), 30, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (250), 33, Reduce, (56, 0), 0, null, 
null);
@@ -1650,62 +1648,62 @@ package body Gpr_Process_LR1_Main is
             Add_Error (Table.States (250));
             Add_Goto (Table.States (250), 56, 159);
             Add_Goto (Table.States (250), 57, 261);
-            Set_Minimal_Action (Table.States (250).Minimal_Complete_Actions, 
(1 => (Reduce, 57, 0)));
+            Table.States (250).Minimal_Complete_Action := (Reduce, 57, 0);
             Table.States (251).Productions := WisiToken.To_Vector ((1 => (70, 
0)));
             Add_Action (Table.States (251), 13, 161);
             Add_Error (Table.States (251));
             Add_Goto (Table.States (251), 39, 262);
-            Set_Minimal_Action (Table.States (251).Minimal_Complete_Actions, 
(1 => (Shift, 13, 161)));
+            Table.States (251).Minimal_Complete_Action := (Shift, 13, 161);
             Table.States (252).Productions := WisiToken.To_Vector ((1 => (65, 
1)));
             Add_Action (Table.States (252), 28, 263);
             Add_Error (Table.States (252));
-            Set_Minimal_Action (Table.States (252).Minimal_Complete_Actions, 
(1 => (Shift, 28, 263)));
+            Table.States (252).Minimal_Complete_Action := (Shift, 28, 263);
             Table.States (253).Productions := WisiToken.To_Vector (((54, 1), 
(65, 0)));
             Add_Action (Table.States (253), 26, 170);
             Add_Action (Table.States (253), 33, 264);
             Add_Error (Table.States (253));
-            Set_Minimal_Action (Table.States (253).Minimal_Complete_Actions, 
(1 => (Shift, 33, 264)));
+            Table.States (253).Minimal_Complete_Action := (Shift, 33, 264);
             Table.States (254).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (254), (5, 7, 11, 15, 17, 22, 35), (60, 
0), 9, package_extension_0'Access,
             package_extension_0_check'Access);
-            Set_Minimal_Action (Table.States (254).Minimal_Complete_Actions, 
(1 => (Reduce, 60, 9)));
+            Table.States (254).Minimal_Complete_Action := (Reduce, 60, 9);
             Table.States (255).Productions := WisiToken.To_Vector (((43, 0), 
(45, 2)));
             Add_Action (Table.States (255), 7, 265);
             Add_Action (Table.States (255), 24, 147);
             Add_Error (Table.States (255));
             Add_Goto (Table.States (255), 44, 180);
-            Set_Minimal_Action (Table.States (255).Minimal_Complete_Actions, 
(1 => (Shift, 7, 265)));
+            Table.States (255).Minimal_Complete_Action := (Shift, 7, 265);
             Table.States (256).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (256), 20, 266);
             Add_Error (Table.States (256));
-            Set_Minimal_Action (Table.States (256).Minimal_Complete_Actions, 
(1 => (Shift, 20, 266)));
+            Table.States (256).Minimal_Complete_Action := (Shift, 20, 266);
             Table.States (257).Productions := WisiToken.To_Vector ((1 => (40, 
1)));
             Add_Action (Table.States (257), 20, 267);
             Add_Error (Table.States (257));
-            Set_Minimal_Action (Table.States (257).Minimal_Complete_Actions, 
(1 => (Shift, 20, 267)));
+            Table.States (257).Minimal_Complete_Action := (Shift, 20, 267);
             Table.States (258).Productions := WisiToken.To_Vector (((40, 0), 
(54, 1)));
             Add_Action (Table.States (258), 26, 170);
             Add_Action (Table.States (258), 33, 268);
             Add_Error (Table.States (258));
-            Set_Minimal_Action (Table.States (258).Minimal_Complete_Actions, 
(1 => (Shift, 33, 268)));
+            Table.States (258).Minimal_Complete_Action := (Shift, 33, 268);
             Table.States (259).Productions := WisiToken.To_Vector (((57, 1), 
(60, 0)));
             Add_Action (Table.States (259), 12, 269);
             Add_Action (Table.States (259), 30, 121);
             Add_Error (Table.States (259));
-            Set_Minimal_Action (Table.States (259).Minimal_Complete_Actions, 
(1 => (Shift, 12, 269)));
+            Table.States (259).Minimal_Complete_Action := (Shift, 12, 269);
             Table.States (260).Productions := WisiToken.To_Vector ((1 => (59, 
0)));
             Add_Action (Table.States (260), 7, 270);
             Add_Error (Table.States (260));
-            Set_Minimal_Action (Table.States (260).Minimal_Complete_Actions, 
(1 => (Shift, 7, 270)));
+            Table.States (260).Minimal_Complete_Action := (Shift, 7, 270);
             Table.States (261).Productions := WisiToken.To_Vector (((57, 1), 
(61, 0)));
             Add_Action (Table.States (261), 30, 186);
             Add_Action (Table.States (261), 33, 271);
             Add_Error (Table.States (261));
-            Set_Minimal_Action (Table.States (261).Minimal_Complete_Actions, 
(1 => (Shift, 33, 271)));
+            Table.States (261).Minimal_Complete_Action := (Shift, 33, 271);
             Table.States (262).Productions := WisiToken.To_Vector ((1 => (70, 
0)));
             Add_Action (Table.States (262), 33, 272);
             Add_Error (Table.States (262));
-            Set_Minimal_Action (Table.States (262).Minimal_Complete_Actions, 
(1 => (Shift, 33, 272)));
+            Table.States (262).Minimal_Complete_Action := (Shift, 33, 272);
             Table.States (263).Productions := WisiToken.To_Vector ((1 => (65, 
1)));
             Add_Action (Table.States (263), 9, 130);
             Add_Action (Table.States (263), 10, 131);
@@ -1727,27 +1725,27 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (263), 57, 141);
             Add_Goto (Table.States (263), 67, 142);
             Add_Goto (Table.States (263), 69, 143);
-            Set_Minimal_Action (Table.States (263).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 0)));
+            Table.States (263).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (264).Productions := WisiToken.To_Vector ((1 => (65, 
0)));
             Add_Action (Table.States (264), (5, 7, 11, 15, 17, 22, 24, 35), 
(65, 0), 4,
             simple_declarative_item_0'Access, null);
-            Set_Minimal_Action (Table.States (264).Minimal_Complete_Actions, 
(1 => (Reduce, 65, 4)));
+            Table.States (264).Minimal_Complete_Action := (Reduce, 65, 4);
             Table.States (265).Productions := WisiToken.To_Vector ((1 => (43, 
0)));
             Add_Action (Table.States (265), 5, 274);
             Add_Error (Table.States (265));
-            Set_Minimal_Action (Table.States (265).Minimal_Complete_Actions, 
(1 => (Shift, 5, 274)));
+            Table.States (265).Minimal_Complete_Action := (Shift, 5, 274);
             Table.States (266).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (266), 23, 275);
             Add_Error (Table.States (266));
-            Set_Minimal_Action (Table.States (266).Minimal_Complete_Actions, 
(1 => (Shift, 23, 275)));
+            Table.States (266).Minimal_Complete_Action := (Shift, 23, 275);
             Table.States (267).Productions := WisiToken.To_Vector ((1 => (40, 
1)));
             Add_Action (Table.States (267), 23, 276);
             Add_Error (Table.States (267));
-            Set_Minimal_Action (Table.States (267).Minimal_Complete_Actions, 
(1 => (Shift, 23, 276)));
+            Table.States (267).Minimal_Complete_Action := (Shift, 23, 276);
             Table.States (268).Productions := WisiToken.To_Vector ((1 => (40, 
0)));
             Add_Action (Table.States (268), (5, 7, 11, 15, 17, 22, 24, 35), 
(40, 0), 5, attribute_declaration_0'Access,
             null);
-            Set_Minimal_Action (Table.States (268).Minimal_Complete_Actions, 
(1 => (Reduce, 40, 5)));
+            Table.States (268).Minimal_Complete_Action := (Reduce, 40, 5);
             Table.States (269).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (269), 5, 85);
             Add_Action (Table.States (269), 7, Reduce, (51, 0), 0, null, null);
@@ -1768,30 +1766,30 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (269), 61, 99);
             Add_Goto (Table.States (269), 65, 100);
             Add_Goto (Table.States (269), 70, 101);
-            Set_Minimal_Action (Table.States (269).Minimal_Complete_Actions, 
(1 => (Reduce, 51, 0)));
+            Table.States (269).Minimal_Complete_Action := (Reduce, 51, 0);
             Table.States (270).Productions := WisiToken.To_Vector ((1 => (59, 
0)));
             Add_Action (Table.States (270), 33, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (270), 35, 144);
             Add_Error (Table.States (270));
             Add_Goto (Table.States (270), 56, 278);
-            Set_Minimal_Action (Table.States (270).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 0)));
+            Table.States (270).Minimal_Complete_Action := (Reduce, 56, 0);
             Table.States (271).Productions := WisiToken.To_Vector ((1 => (61, 
0)));
             Add_Action (Table.States (271), (5, 7, 11, 15, 17, 22, 24, 35), 
(61, 0), 5, package_renaming_0'Access,
             null);
-            Set_Minimal_Action (Table.States (271).Minimal_Complete_Actions, 
(1 => (Reduce, 61, 5)));
+            Table.States (271).Minimal_Complete_Action := (Reduce, 61, 5);
             Table.States (272).Productions := WisiToken.To_Vector ((1 => (70, 
0)));
             Add_Action (Table.States (272), (5, 7, 11, 15, 17, 22, 24, 35), 
(70, 0), 5,
             typed_string_declaration_0'Access, null);
-            Set_Minimal_Action (Table.States (272).Minimal_Complete_Actions, 
(1 => (Reduce, 70, 5)));
+            Table.States (272).Minimal_Complete_Action := (Reduce, 70, 5);
             Table.States (273).Productions := WisiToken.To_Vector (((54, 1), 
(65, 1)));
             Add_Action (Table.States (273), 26, 170);
             Add_Action (Table.States (273), 33, 279);
             Add_Error (Table.States (273));
-            Set_Minimal_Action (Table.States (273).Minimal_Complete_Actions, 
(1 => (Shift, 33, 279)));
+            Table.States (273).Minimal_Complete_Action := (Shift, 33, 279);
             Table.States (274).Productions := WisiToken.To_Vector ((1 => (43, 
0)));
             Add_Action (Table.States (274), 33, 280);
             Add_Error (Table.States (274));
-            Set_Minimal_Action (Table.States (274).Minimal_Complete_Actions, 
(1 => (Shift, 33, 280)));
+            Table.States (274).Minimal_Complete_Action := (Shift, 33, 280);
             Table.States (275).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (275), 9, 130);
             Add_Action (Table.States (275), 10, 131);
@@ -1813,7 +1811,7 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (275), 57, 141);
             Add_Goto (Table.States (275), 67, 142);
             Add_Goto (Table.States (275), 69, 143);
-            Set_Minimal_Action (Table.States (275).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 0)));
+            Table.States (275).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (276).Productions := WisiToken.To_Vector ((1 => (40, 
1)));
             Add_Action (Table.States (276), 9, 130);
             Add_Action (Table.States (276), 10, 131);
@@ -1835,58 +1833,58 @@ package body Gpr_Process_LR1_Main is
             Add_Goto (Table.States (276), 57, 141);
             Add_Goto (Table.States (276), 67, 142);
             Add_Goto (Table.States (276), 69, 143);
-            Set_Minimal_Action (Table.States (276).Minimal_Complete_Actions, 
(1 => (Reduce, 54, 0)));
+            Table.States (276).Minimal_Complete_Action := (Reduce, 54, 0);
             Table.States (277).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (277), 7, 283);
             Add_Error (Table.States (277));
-            Set_Minimal_Action (Table.States (277).Minimal_Complete_Actions, 
(1 => (Shift, 7, 283)));
+            Table.States (277).Minimal_Complete_Action := (Shift, 7, 283);
             Table.States (278).Productions := WisiToken.To_Vector ((1 => (59, 
0)));
             Add_Action (Table.States (278), 33, 284);
             Add_Error (Table.States (278));
-            Set_Minimal_Action (Table.States (278).Minimal_Complete_Actions, 
(1 => (Shift, 33, 284)));
+            Table.States (278).Minimal_Complete_Action := (Shift, 33, 284);
             Table.States (279).Productions := WisiToken.To_Vector ((1 => (65, 
1)));
             Add_Action (Table.States (279), (5, 7, 11, 15, 17, 22, 24, 35), 
(65, 1), 6,
             simple_declarative_item_1'Access, null);
-            Set_Minimal_Action (Table.States (279).Minimal_Complete_Actions, 
(1 => (Reduce, 65, 6)));
+            Table.States (279).Minimal_Complete_Action := (Reduce, 65, 6);
             Table.States (280).Productions := WisiToken.To_Vector ((1 => (43, 
0)));
             Add_Action (Table.States (280), (5, 7, 11, 15, 17, 22, 24, 35), 
(43, 0), 7, case_statement_0'Access, null);
-            Set_Minimal_Action (Table.States (280).Minimal_Complete_Actions, 
(1 => (Reduce, 43, 7)));
+            Table.States (280).Minimal_Complete_Action := (Reduce, 43, 7);
             Table.States (281).Productions := WisiToken.To_Vector (((40, 2), 
(54, 1)));
             Add_Action (Table.States (281), 26, 170);
             Add_Action (Table.States (281), 33, 285);
             Add_Error (Table.States (281));
-            Set_Minimal_Action (Table.States (281).Minimal_Complete_Actions, 
(1 => (Shift, 33, 285)));
+            Table.States (281).Minimal_Complete_Action := (Shift, 33, 285);
             Table.States (282).Productions := WisiToken.To_Vector (((40, 1), 
(54, 1)));
             Add_Action (Table.States (282), 26, 170);
             Add_Action (Table.States (282), 33, 286);
             Add_Error (Table.States (282));
-            Set_Minimal_Action (Table.States (282).Minimal_Complete_Actions, 
(1 => (Shift, 33, 286)));
+            Table.States (282).Minimal_Complete_Action := (Shift, 33, 286);
             Table.States (283).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (283), 33, Reduce, (56, 0), 0, null, 
null);
             Add_Action (Table.States (283), 35, 144);
             Add_Error (Table.States (283));
             Add_Goto (Table.States (283), 56, 287);
-            Set_Minimal_Action (Table.States (283).Minimal_Complete_Actions, 
(1 => (Reduce, 56, 0)));
+            Table.States (283).Minimal_Complete_Action := (Reduce, 56, 0);
             Table.States (284).Productions := WisiToken.To_Vector ((1 => (59, 
0)));
             Add_Action (Table.States (284), (5, 7, 11, 15, 17, 22, 24, 35), 
(59, 0), 7, package_spec_0'Access,
             package_spec_0_check'Access);
-            Set_Minimal_Action (Table.States (284).Minimal_Complete_Actions, 
(1 => (Reduce, 59, 7)));
+            Table.States (284).Minimal_Complete_Action := (Reduce, 59, 7);
             Table.States (285).Productions := WisiToken.To_Vector ((1 => (40, 
2)));
             Add_Action (Table.States (285), (5, 7, 11, 15, 17, 22, 24, 35), 
(40, 2), 8, attribute_declaration_2'Access,
             null);
-            Set_Minimal_Action (Table.States (285).Minimal_Complete_Actions, 
(1 => (Reduce, 40, 8)));
+            Table.States (285).Minimal_Complete_Action := (Reduce, 40, 8);
             Table.States (286).Productions := WisiToken.To_Vector ((1 => (40, 
1)));
             Add_Action (Table.States (286), (5, 7, 11, 15, 17, 22, 24, 35), 
(40, 1), 8, attribute_declaration_1'Access,
             null);
-            Set_Minimal_Action (Table.States (286).Minimal_Complete_Actions, 
(1 => (Reduce, 40, 8)));
+            Table.States (286).Minimal_Complete_Action := (Reduce, 40, 8);
             Table.States (287).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (287), 33, 288);
             Add_Error (Table.States (287));
-            Set_Minimal_Action (Table.States (287).Minimal_Complete_Actions, 
(1 => (Shift, 33, 288)));
+            Table.States (287).Minimal_Complete_Action := (Shift, 33, 288);
             Table.States (288).Productions := WisiToken.To_Vector ((1 => (60, 
0)));
             Add_Action (Table.States (288), (5, 7, 11, 15, 17, 22, 24, 35), 
(60, 0), 9, package_extension_0'Access,
             package_extension_0_check'Access);
-            Set_Minimal_Action (Table.States (288).Minimal_Complete_Actions, 
(1 => (Reduce, 60, 9)));
+            Table.States (288).Minimal_Complete_Action := (Reduce, 60, 9);
          end Subr_3;
       begin
          Subr_1;
@@ -1897,7 +1895,7 @@ package body Gpr_Process_LR1_Main is
       WisiToken.Parse.LR.Parser.New_Parser
         (Parser,
          Trace,
-         Lexer.New_Lexer (Trace),
+         Lexer.New_Lexer (Trace.Descriptor),
          Table,
          Language_Fixes,
          Language_Use_Minimal_Complete_Actions,
diff --git a/packages/ada-mode/gpr_process_lr1_main.ads 
b/packages/ada-mode/gpr_process_lr1_main.ads
index 4ea01f7..272485c 100644
--- a/packages/ada-mode/gpr_process_lr1_main.ads
+++ b/packages/ada-mode/gpr_process_lr1_main.ads
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS gpr.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
diff --git a/packages/ada-mode/gpr_re2c.c b/packages/ada-mode/gpr_re2c.c
index 3df1697..d773f4e 100644
--- a/packages/ada-mode/gpr_re2c.c
+++ b/packages/ada-mode/gpr_re2c.c
@@ -4,7 +4,7 @@
 //  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS gpr.wy
 //
 
-//  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+//  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 //  This program is free software; you can redistribute it and/or
 //  modify it under the terms of the GNU General Public License as
@@ -35,7 +35,7 @@ typedef struct wisi_lexer
    int            line_token_start; // line at start of current token
    unsigned char* marker;           // saved cursor
    size_t         marker_pos;       // saved character position
-   size_t         marker_line;      // saved line 
+   size_t         marker_line;      // saved line
    unsigned char* context;          // saved cursor
    size_t         context_pos;      // saved character position
    int            context_line;     // saved line
@@ -50,13 +50,16 @@ typedef struct wisi_lexer
 wisi_lexer* gpr_new_lexer
    (unsigned char* input, size_t length, int verbosity)
 {
-   wisi_lexer* result  = malloc (sizeof (wisi_lexer));
-   result->buffer      = input;
-   result->buffer_last = input + length - 1;
-   result->cursor      = input;
-   result->char_pos    = 1;
-   result->line        = (*result->cursor == 0x0A) ? 2 : 1;
-   result->verbosity   = verbosity;
+   wisi_lexer* result        = malloc (sizeof (wisi_lexer));
+   result->buffer            = input;
+   result->buffer_last       = input + length - 1;
+   result->cursor            = input;
+   result->byte_token_start  = input;
+   result->char_pos          = 1;
+   result->char_token_start  = 1;
+   result->line              = (*result->cursor == 0x0A) ? 2 : 1;
+   result->line_token_start  = result->line;
+   result->verbosity         = verbosity;
    return result;
 }
 
@@ -94,10 +97,13 @@ static void debug(wisi_lexer* lexer, int state, unsigned 
char ch)
 
 static void skip(wisi_lexer* lexer)
 {
-   if (lexer->cursor <= lexer->buffer_last) ++lexer->cursor;
    if (lexer->cursor <= lexer->buffer_last)
+   {
+      ++lexer->cursor;
       if (DO_COUNT) ++lexer->char_pos;
-   if (*lexer->cursor == 0x0A) ++lexer->line;
+      if (lexer->cursor <= lexer->buffer_last)
+         if (*lexer->cursor == 0x0A) ++lexer->line;
+   }
 }
 #define YYSKIP() skip(lexer)
 #define YYBACKUP() lexer->marker = lexer->cursor; lexer->marker_pos = 
lexer->char_pos;lexer->marker_line = lexer->line
@@ -128,10 +134,7 @@ int gpr_next_token
    }
 
    lexer->byte_token_start = lexer->cursor;
-   if (DO_COUNT)
-      lexer->char_token_start = lexer->char_pos;
-   else
-      lexer->char_token_start = lexer->char_pos + 1;
+   lexer->char_token_start = lexer->char_pos;
    if (*lexer->cursor == 0x0A)
       lexer->line_token_start = lexer->line-1;
    else
@@ -140,7 +143,7 @@ int gpr_next_token
    while (*id == -1 && status == 0)
    {
 
-#line 144 "../gpr_re2c.c"
+#line 147 "../gpr_re2c.c"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -274,21 +277,21 @@ yy2:
        YYSKIP ();
 yy3:
        YYDEBUG(3, YYPEEK ());
-#line 228 "../gpr.re2c"
+#line 231 "../gpr.re2c"
        {status = ERROR_unrecognized_character; continue;}
-#line 280 "../gpr_re2c.c"
+#line 283 "../gpr_re2c.c"
 yy4:
        YYDEBUG(4, YYPEEK ());
        YYSKIP ();
        YYDEBUG(5, YYPEEK ());
-#line 226 "../gpr.re2c"
+#line 229 "../gpr.re2c"
        {*id =  37; continue;}
-#line 287 "../gpr_re2c.c"
+#line 290 "../gpr_re2c.c"
 yy6:
        YYDEBUG(6, YYPEEK ());
        YYSKIP ();
        YYDEBUG(7, YYPEEK ());
-#line 183 "../gpr.re2c"
+#line 186 "../gpr.re2c"
        { lexer->byte_token_start = lexer->cursor;
           lexer->char_token_start = lexer->char_pos;
           if (*lexer->cursor == 0x0A)
@@ -296,14 +299,14 @@ yy6:
           else
              lexer->line_token_start = lexer->line;
           continue; }
-#line 300 "../gpr_re2c.c"
+#line 303 "../gpr_re2c.c"
 yy8:
        YYDEBUG(8, YYPEEK ());
        YYSKIP ();
        YYDEBUG(9, YYPEEK ());
-#line 190 "../gpr.re2c"
+#line 193 "../gpr.re2c"
        {*id =  1; continue;}
-#line 307 "../gpr_re2c.c"
+#line 310 "../gpr_re2c.c"
 yy10:
        YYDEBUG(10, YYPEEK ());
        YYSKIP ();
@@ -472,37 +475,37 @@ yy12:
        YYDEBUG(12, YYPEEK ());
        YYSKIP ();
        YYDEBUG(13, YYPEEK ());
-#line 215 "../gpr.re2c"
+#line 218 "../gpr.re2c"
        {*id =  26; continue;}
-#line 478 "../gpr_re2c.c"
+#line 481 "../gpr_re2c.c"
 yy14:
        YYDEBUG(14, YYPEEK ());
        YYSKIP ();
        YYDEBUG(15, YYPEEK ());
-#line 221 "../gpr.re2c"
+#line 224 "../gpr.re2c"
        {*id =  32; continue;}
-#line 485 "../gpr_re2c.c"
+#line 488 "../gpr_re2c.c"
 yy16:
        YYDEBUG(16, YYPEEK ());
        YYSKIP ();
        YYDEBUG(17, YYPEEK ());
-#line 202 "../gpr.re2c"
+#line 205 "../gpr.re2c"
        {*id =  13; continue;}
-#line 492 "../gpr_re2c.c"
+#line 495 "../gpr_re2c.c"
 yy18:
        YYDEBUG(18, YYPEEK ());
        YYSKIP ();
        YYDEBUG(19, YYPEEK ());
-#line 209 "../gpr.re2c"
+#line 212 "../gpr.re2c"
        {*id =  20; continue;}
-#line 499 "../gpr_re2c.c"
+#line 502 "../gpr_re2c.c"
 yy20:
        YYDEBUG(20, YYPEEK ());
        YYSKIP ();
        YYDEBUG(21, YYPEEK ());
-#line 218 "../gpr.re2c"
+#line 221 "../gpr.re2c"
        {*id =  29; continue;}
-#line 506 "../gpr_re2c.c"
+#line 509 "../gpr_re2c.c"
 yy22:
        YYDEBUG(22, YYPEEK ());
        YYSKIP ();
@@ -515,9 +518,9 @@ yy23:
        YYDEBUG(23, YYPEEK ());
        YYSKIP ();
        YYDEBUG(24, YYPEEK ());
-#line 219 "../gpr.re2c"
+#line 222 "../gpr.re2c"
        {*id =  30; continue;}
-#line 521 "../gpr_re2c.c"
+#line 524 "../gpr_re2c.c"
 yy25:
        YYDEBUG(25, YYPEEK ());
        YYSKIP ();
@@ -528,16 +531,16 @@ yy25:
        }
 yy26:
        YYDEBUG(26, YYPEEK ());
-#line 216 "../gpr.re2c"
+#line 219 "../gpr.re2c"
        {*id =  27; continue;}
-#line 534 "../gpr_re2c.c"
+#line 537 "../gpr_re2c.c"
 yy27:
        YYDEBUG(27, YYPEEK ());
        YYSKIP ();
        YYDEBUG(28, YYPEEK ());
-#line 222 "../gpr.re2c"
+#line 225 "../gpr.re2c"
        {*id =  33; continue;}
-#line 541 "../gpr_re2c.c"
+#line 544 "../gpr_re2c.c"
 yy29:
        YYDEBUG(29, YYPEEK ());
        YYSKIP ();
@@ -561,9 +564,9 @@ yy30:
        }
 yy31:
        YYDEBUG(31, YYPEEK ());
-#line 224 "../gpr.re2c"
+#line 227 "../gpr.re2c"
        {*id =  35; continue;}
-#line 567 "../gpr_re2c.c"
+#line 570 "../gpr_re2c.c"
 yy32:
        YYDEBUG(32, YYPEEK ());
        yyaccept = 1;
@@ -844,9 +847,9 @@ yy47:
        YYDEBUG(47, YYPEEK ());
        YYSKIP ();
        YYDEBUG(48, YYPEEK ());
-#line 223 "../gpr.re2c"
+#line 226 "../gpr.re2c"
        {*id =  34; continue;}
-#line 850 "../gpr_re2c.c"
+#line 853 "../gpr_re2c.c"
 yy49:
        YYDEBUG(49, YYPEEK ());
        YYSKIP ();
@@ -1385,9 +1388,9 @@ yy58:
        }
 yy59:
        YYDEBUG(59, YYPEEK ());
-#line 225 "../gpr.re2c"
+#line 228 "../gpr.re2c"
        {*id =  36; continue;}
-#line 1391 "../gpr_re2c.c"
+#line 1394 "../gpr_re2c.c"
 yy60:
        YYDEBUG(60, YYPEEK ());
        YYSKIP ();
@@ -1908,23 +1911,23 @@ yy66:
        }
 yy68:
        YYDEBUG(68, YYPEEK ());
-#line 191 "../gpr.re2c"
+#line 194 "../gpr.re2c"
        {*id =  2; continue;}
-#line 1914 "../gpr_re2c.c"
+#line 1917 "../gpr_re2c.c"
 yy69:
        YYDEBUG(69, YYPEEK ());
        YYSKIP ();
        YYDEBUG(70, YYPEEK ());
-#line 217 "../gpr.re2c"
+#line 220 "../gpr.re2c"
        {*id =  28; continue;}
-#line 1921 "../gpr_re2c.c"
+#line 1924 "../gpr_re2c.c"
 yy71:
        YYDEBUG(71, YYPEEK ());
        YYSKIP ();
        YYDEBUG(72, YYPEEK ());
-#line 220 "../gpr.re2c"
+#line 223 "../gpr.re2c"
        {*id =  31; continue;}
-#line 1928 "../gpr_re2c.c"
+#line 1931 "../gpr_re2c.c"
 yy73:
        YYDEBUG(73, YYPEEK ());
        yyaccept = 1;
@@ -2457,9 +2460,9 @@ yy86:
        }
 yy87:
        YYDEBUG(87, YYPEEK ());
-#line 201 "../gpr.re2c"
+#line 204 "../gpr.re2c"
        {*id =  12; continue;}
-#line 2463 "../gpr_re2c.c"
+#line 2466 "../gpr_re2c.c"
 yy88:
        YYDEBUG(88, YYPEEK ());
        yyaccept = 1;
@@ -3080,9 +3083,9 @@ yy109:
        }
 yy110:
        YYDEBUG(110, YYPEEK ());
-#line 196 "../gpr.re2c"
+#line 199 "../gpr.re2c"
        {*id =  7; continue;}
-#line 3086 "../gpr_re2c.c"
+#line 3089 "../gpr_re2c.c"
 yy111:
        YYDEBUG(111, YYPEEK ());
        yyaccept = 1;
@@ -3219,9 +3222,9 @@ yy112:
        }
 yy113:
        YYDEBUG(113, YYPEEK ());
-#line 200 "../gpr.re2c"
+#line 203 "../gpr.re2c"
        {*id =  11; continue;}
-#line 3225 "../gpr_re2c.c"
+#line 3228 "../gpr_re2c.c"
 yy114:
        YYDEBUG(114, YYPEEK ());
        yyaccept = 1;
@@ -3435,9 +3438,9 @@ yy122:
        }
 yy123:
        YYDEBUG(123, YYPEEK ());
-#line 212 "../gpr.re2c"
+#line 215 "../gpr.re2c"
        {*id =  23; continue;}
-#line 3441 "../gpr_re2c.c"
+#line 3444 "../gpr_re2c.c"
 yy124:
        YYDEBUG(124, YYPEEK ());
        yyaccept = 1;
@@ -3607,9 +3610,9 @@ yy128:
        }
 yy129:
        YYDEBUG(129, YYPEEK ());
-#line 194 "../gpr.re2c"
+#line 197 "../gpr.re2c"
        {*id =  5; continue;}
-#line 3613 "../gpr_re2c.c"
+#line 3616 "../gpr_re2c.c"
 yy130:
        YYDEBUG(130, YYPEEK ());
        yyaccept = 1;
@@ -3770,9 +3773,9 @@ yy133:
        }
 yy134:
        YYDEBUG(134, YYPEEK ());
-#line 204 "../gpr.re2c"
+#line 207 "../gpr.re2c"
        {*id =  15; continue;}
-#line 3776 "../gpr_re2c.c"
+#line 3779 "../gpr_re2c.c"
 yy135:
        YYDEBUG(135, YYPEEK ());
        yyaccept = 1;
@@ -3953,9 +3956,9 @@ yy140:
        }
 yy141:
        YYDEBUG(141, YYPEEK ());
-#line 211 "../gpr.re2c"
+#line 214 "../gpr.re2c"
        {*id =  22; continue;}
-#line 3959 "../gpr_re2c.c"
+#line 3962 "../gpr_re2c.c"
 yy142:
        YYDEBUG(142, YYPEEK ());
        yyaccept = 11;
@@ -4081,9 +4084,9 @@ yy142:
        }
 yy143:
        YYDEBUG(143, YYPEEK ());
-#line 213 "../gpr.re2c"
+#line 216 "../gpr.re2c"
        {*id =  24; continue;}
-#line 4087 "../gpr_re2c.c"
+#line 4090 "../gpr_re2c.c"
 yy144:
        YYDEBUG(144, YYPEEK ());
        yyaccept = 12;
@@ -4209,9 +4212,9 @@ yy144:
        }
 yy145:
        YYDEBUG(145, YYPEEK ());
-#line 214 "../gpr.re2c"
+#line 217 "../gpr.re2c"
        {*id =  25; continue;}
-#line 4215 "../gpr_re2c.c"
+#line 4218 "../gpr_re2c.c"
 yy146:
        YYDEBUG(146, YYPEEK ());
        yyaccept = 1;
@@ -4524,9 +4527,9 @@ yy163:
        }
 yy164:
        YYDEBUG(164, YYPEEK ());
-#line 205 "../gpr.re2c"
+#line 208 "../gpr.re2c"
        {*id =  16; continue;}
-#line 4530 "../gpr_re2c.c"
+#line 4533 "../gpr_re2c.c"
 yy165:
        YYDEBUG(165, YYPEEK ());
        yyaccept = 1;
@@ -4729,9 +4732,9 @@ yy172:
        }
 yy173:
        YYDEBUG(173, YYPEEK ());
-#line 197 "../gpr.re2c"
+#line 200 "../gpr.re2c"
        {*id =  8; continue;}
-#line 4735 "../gpr_re2c.c"
+#line 4738 "../gpr_re2c.c"
 yy174:
        YYDEBUG(174, YYPEEK ());
        yyaccept = 1;
@@ -4868,9 +4871,9 @@ yy175:
        }
 yy176:
        YYDEBUG(176, YYPEEK ());
-#line 203 "../gpr.re2c"
+#line 206 "../gpr.re2c"
        {*id =  14; continue;}
-#line 4874 "../gpr_re2c.c"
+#line 4877 "../gpr_re2c.c"
 yy177:
        YYDEBUG(177, YYPEEK ());
        yyaccept = 16;
@@ -4996,9 +4999,9 @@ yy177:
        }
 yy178:
        YYDEBUG(178, YYPEEK ());
-#line 206 "../gpr.re2c"
+#line 209 "../gpr.re2c"
        {*id =  17; continue;}
-#line 5002 "../gpr_re2c.c"
+#line 5005 "../gpr_re2c.c"
 yy179:
        YYDEBUG(179, YYPEEK ());
        yyaccept = 17;
@@ -5124,9 +5127,9 @@ yy179:
        }
 yy180:
        YYDEBUG(180, YYPEEK ());
-#line 207 "../gpr.re2c"
+#line 210 "../gpr.re2c"
        {*id =  18; continue;}
-#line 5130 "../gpr_re2c.c"
+#line 5133 "../gpr_re2c.c"
 yy181:
        YYDEBUG(181, YYPEEK ());
        yyaccept = 18;
@@ -5252,9 +5255,9 @@ yy181:
        }
 yy182:
        YYDEBUG(182, YYPEEK ());
-#line 208 "../gpr.re2c"
+#line 211 "../gpr.re2c"
        {*id =  19; continue;}
-#line 5258 "../gpr_re2c.c"
+#line 5261 "../gpr_re2c.c"
 yy183:
        YYDEBUG(183, YYPEEK ());
        yyaccept = 1;
@@ -5391,9 +5394,9 @@ yy184:
        }
 yy185:
        YYDEBUG(185, YYPEEK ());
-#line 192 "../gpr.re2c"
+#line 195 "../gpr.re2c"
        {*id =  3; continue;}
-#line 5397 "../gpr_re2c.c"
+#line 5400 "../gpr_re2c.c"
 yy186:
        YYDEBUG(186, YYPEEK ());
        yyaccept = 1;
@@ -5541,9 +5544,9 @@ yy188:
        }
 yy189:
        YYDEBUG(189, YYPEEK ());
-#line 198 "../gpr.re2c"
+#line 201 "../gpr.re2c"
        {*id =  9; continue;}
-#line 5547 "../gpr_re2c.c"
+#line 5550 "../gpr_re2c.c"
 yy190:
        YYDEBUG(190, YYPEEK ());
        yyaccept = 21;
@@ -5669,9 +5672,9 @@ yy190:
        }
 yy191:
        YYDEBUG(191, YYPEEK ());
-#line 210 "../gpr.re2c"
+#line 213 "../gpr.re2c"
        {*id =  21; continue;}
-#line 5675 "../gpr_re2c.c"
+#line 5678 "../gpr_re2c.c"
 yy192:
        YYDEBUG(192, YYPEEK ());
        yyaccept = 22;
@@ -5797,9 +5800,9 @@ yy192:
        }
 yy193:
        YYDEBUG(193, YYPEEK ());
-#line 193 "../gpr.re2c"
+#line 196 "../gpr.re2c"
        {*id =  4; continue;}
-#line 5803 "../gpr_re2c.c"
+#line 5806 "../gpr_re2c.c"
 yy194:
        YYDEBUG(194, YYPEEK ());
        yyaccept = 1;
@@ -6012,9 +6015,9 @@ yy202:
        }
 yy203:
        YYDEBUG(203, YYPEEK ());
-#line 195 "../gpr.re2c"
+#line 198 "../gpr.re2c"
        {*id =  6; continue;}
-#line 6018 "../gpr_re2c.c"
+#line 6021 "../gpr_re2c.c"
 yy204:
        YYDEBUG(204, YYPEEK ());
        yyaccept = 1;
@@ -6173,11 +6176,11 @@ yy207:
        }
 yy208:
        YYDEBUG(208, YYPEEK ());
-#line 199 "../gpr.re2c"
+#line 202 "../gpr.re2c"
        {*id =  10; continue;}
-#line 6179 "../gpr_re2c.c"
+#line 6182 "../gpr_re2c.c"
 }
-#line 229 "../gpr.re2c"
+#line 232 "../gpr.re2c"
 
       }
    *byte_position = lexer->byte_token_start - lexer->buffer + 1;
diff --git a/packages/ada-mode/gpr_re2c_c.ads b/packages/ada-mode/gpr_re2c_c.ads
index 8849148..c752061 100644
--- a/packages/ada-mode/gpr_re2c_c.ads
+++ b/packages/ada-mode/gpr_re2c_c.ads
@@ -2,7 +2,7 @@
 --  command line: wisitoken-bnf-generate.exe  --generate LR1 Ada_Emacs re2c 
PROCESS gpr.wy
 --
 
---  Copyright (C) 2013 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013 - 2019 Free Software Foundation, Inc.
 
 --  This program is free software; you can redistribute it and/or
 --  modify it under the terms of the GNU General Public License as
diff --git a/packages/ada-mode/gps_source/ada_analyzer.adb 
b/packages/ada-mode/gps_source/ada_analyzer.adb
deleted file mode 100755
index b08cb4e..0000000
--- a/packages/ada-mode/gps_source/ada_analyzer.adb
+++ /dev/null
@@ -1,4834 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2001-2017, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-with Ada.Characters.Handling; use Ada.Characters.Handling;
-
-with GNAT.Regpat;             use GNAT.Regpat;
-
-with Generic_Stack;
-with Indent_Stack;
-with String_Utils;            use String_Utils;
-
-with GNATCOLL.Traces;         use GNATCOLL.Traces;
-with GNATCOLL.Utils;          use GNATCOLL.Utils;
-with UTF8_Utils; use UTF8_Utils;
-
-package body Ada_Analyzer is
-
-   Me : constant Trace_Handle := Create ("LANGUAGE.ADA_ANALYZER", On);
-
-   use Indent_Stack.Stack;
-
-   -----------------
-   -- Local types --
-   -----------------
-
-   type Token_Type is
-     (
-      --  Token name          Token type   Class(es)
-
-      Tok_Integer_Literal, -- numeric lit  Literal, Lit_Or_Name
-
-      Tok_String_Literal,  -- string lit   Literal. Lit_Or_Name
-
-      Tok_Char_Literal,    -- char lit     Name, Literal. Lit_Or_Name
-
-      Tok_Operator_Symbol, -- op symbol    Name, Literal, Lit_Or_Name, Desig
-
-      Tok_Identifier,      -- identifer    Name, Lit_Or_Name, Desig
-
-      Tok_Double_Asterisk, -- **
-
-      Tok_Minus,           -- -            Binary_Addop, Unary_Addop
-      Tok_Plus,            -- +            Binary_Addop, Unary_Addop
-
-      Tok_Asterisk,        -- *            Mulop
-      Tok_Slash,           -- /            Mulop
-
-      Tok_Dot,             -- .            Namext
-      Tok_Apostrophe,      -- '            Namext
-
-      Tok_Right_Paren,     -- )            Sterm
-      Tok_Comma,           -- ,            Sterm
-
-      Tok_Less,            -- <            Relop, Sterm
-      Tok_Equal,           -- =            Relop, Sterm
-      Tok_Greater,         -- >            Relop, Sterm
-      Tok_Not_Equal,       -- /=           Relop, Sterm
-      Tok_Greater_Equal,   -- >=           Relop, Sterm
-      Tok_Less_Equal,      -- <=           Relop, Sterm
-
-      Tok_Box,             -- <>           Relop, Eterm, Sterm
-      Tok_Colon_Equal,     -- :=           Eterm, Sterm
-
-      Tok_Abstract,        -- ABSTRACT     Eterm, Sterm
-      Tok_Access,          -- ACCESS       Eterm, Sterm
-      Tok_Aliased,         -- ALIASED      Eterm, Sterm
-      Tok_All,             -- ALL          Eterm, Sterm
-      Tok_Array,           -- ARRAY        Eterm, Sterm
-      Tok_At,              -- AT           Eterm, Sterm
-
-      Tok_Mod,             -- MOD          Mulop
-      Tok_Rem,             -- REM          Mulop
-
-      Tok_And,             -- AND          Logop, Sterm
-
-      Tok_Delta,           -- DELTA        Atkwd, Sterm, Consk
-      Tok_Digits,          -- DIGITS       Atkwd, Sterm, Consk
-      Tok_Range,           -- RANGE        Atkwd, Sterm, Consk
-
-      Tok_Abs,             -- ABS
-      Tok_New,             -- NEW
-      Tok_Null,            -- NULL
-      Tok_Others,          -- OTHERS
-
-      Tok_In,              -- IN           Relop, Sterm
-      Tok_Not,             -- NOT          Relop, Sterm
-
-      Tok_Or,              -- OR           Logop, Sterm
-      Tok_Xor,             -- XOR          Logop, Sterm
-
-      Tok_Body,            -- BODY         Eterm, Sterm
-      Tok_Constant,        -- CONSTANT     Eterm, Sterm
-      Tok_Limited,         -- LIMITED      Eterm, Sterm
-      Tok_Of,              -- OF           Eterm, Sterm
-      Tok_Out,             -- OUT          Eterm, Sterm
-      Tok_Renames,         -- RENAMES      Eterm, Sterm
-      Tok_Reverse,         -- REVERSE      Eterm, Sterm
-      Tok_Some,            -- SOME         Eterm, Sterm
-      Tok_Tagged,          -- TAGGED       Eterm, Sterm
-
-      Tok_Case,            -- CASE         Eterm, Sterm, After_SM
-      Tok_Delay,           -- DELAY        Eterm, Sterm, After_SM
-
-      Tok_Accept,          -- ACCEPT       Eterm, Sterm, After_SM
-      Tok_Elsif,           -- ELSIF        Eterm, Sterm, After_SM
-      Tok_End,             -- END          Eterm, Sterm, After_SM
-      Tok_Exit,            -- EXIT         Eterm, Sterm, After_SM
-      Tok_Goto,            -- GOTO         Eterm, Sterm, After_SM
-      Tok_If,              -- IF           Eterm, Sterm, After_SM
-      Tok_Pragma,          -- PRAGMA       Eterm, Sterm, After_SM
-      Tok_Raise,           -- RAISE        Eterm, Sterm, After_SM
-      Tok_Requeue,         -- REQUEUE      Eterm, Sterm, After_SM
-      Tok_Return,          -- RETURN       Eterm, Sterm, After_SM
-      Tok_Terminate,       -- TERMINATE    Eterm, Sterm, After_SM
-      Tok_Until,           -- UNTIL        Eterm, Sterm, After_SM
-      Tok_When,            -- WHEN         Eterm, Sterm, After_SM
-
-      Tok_For,             -- FOR          Eterm, Sterm, After_SM, Labeled_Stmt
-      Tok_While,           -- WHILE        Eterm, Sterm, After_SM, Labeled_Stmt
-
-      Tok_Separate,        -- SEPARATE     Eterm, Sterm, Cunit, After_SM
-
-      Tok_Entry,           -- ENTRY        Eterm, Sterm, Declk, Deckn, After_SM
-      Tok_Protected,       -- PROTECTED    Eterm, Sterm, Declk, Deckn, After_SM
-      Tok_Task,            -- TASK         Eterm, Sterm, Declk, Deckn, After_SM
-      Tok_Type,            -- TYPE         Eterm, Sterm, Declk, Deckn, After_SM
-      Tok_Subtype,         -- SUBTYPE      Eterm, Sterm, Declk, Deckn, After_SM
-      Tok_Overriding,      -- OVERRIDING   Eterm, Sterm, Declk, Declk, After_SM
-      Tok_Synchronized,    -- SYNCHRONIZED Eterm, Sterm, Declk, Deckn, After_SM
-      Tok_Use,             -- USE          Eterm, Sterm, Declk, Deckn, After_SM
-
-      Tok_Generic,         -- GENERIC      Eterm, Sterm, Cunit, Declk, After_SM
-
-      Tok_Function,        -- FUNCTION     Eterm, Sterm, Cunit, Declk, After_SM
-      Tok_Package,         -- PACKAGE      Eterm, Sterm, Cunit, Declk, After_SM
-      Tok_Procedure,       -- PROCEDURE    Eterm, Sterm, Cunit, Declk, After_SM
-
-      Tok_Do,              -- DO           Eterm, Sterm
-      Tok_Is,              -- IS           Eterm, Sterm
-      Tok_Interface,       -- INTERFACE    Eterm, Sterm
-      Tok_Record,          -- RECORD       Eterm, Sterm
-      Tok_Then,            -- THEN         Eterm, Sterm
-
-      Tok_Abort,           -- ABORT        Eterm, Sterm, After_SM
-      Tok_Else,            -- ELSE         Eterm, Sterm, After_SM
-      Tok_Exception,       -- EXCEPTION    Eterm, Sterm, After_SM
-
-      Tok_Select,          -- SELECT       Eterm, Sterm, After_SM
-
-      Tok_Begin,           -- BEGIN        Eterm, Sterm, After_SM, Labeled_Stmt
-      Tok_Declare,         -- DECLARE      Eterm, Sterm, After_SM, Labeled_Stmt
-      Tok_Loop,            -- LOOP         Eterm, Sterm, After_SM, Labeled_Stmt
-
-      Tok_Private,         -- PRIVATE      Eterm, Sterm, Cunit, After_SM
-      Tok_With,            -- WITH         Eterm, Sterm, Cunit, After_SM
-
-      Tok_Semicolon,       -- ;            Eterm, Sterm, Cterm
-
-      Tok_Left_Paren,      -- (            Namext, Consk
-
-      Tok_Ampersand,       -- &            Binary_Addop
-
-      Tok_Vertical_Bar,    -- |            Cterm, Sterm, Chtok
-
-      Tok_Less_Less,       -- <<           Eterm, Sterm, After_SM
-      Tok_Greater_Greater, -- >>           Eterm, Sterm
-
-      Tok_Pound,           -- # sign, used by the preprocessor
-
-      Tok_Left_Square_Bracket,  -- '[' used in wide character encoding
-      Tok_Right_Square_Bracket, -- ']' used in wide character encoding
-
-      Tok_Colon,           -- :            Eterm, Sterm
-
-      Tok_Arrow,           -- =>           Sterm, Cterm, Chtok
-
-      Tok_Dot_Dot,         -- ..           Sterm, Chtok
-
-      No_Token);
-      --  No_Token is used for initializing Token values to indicate that
-      --  no value has been set yet.
-
-   type Token_Set is array (Token_Type) of Boolean;
-   pragma Pack (Token_Set);
-
-   subtype Reserved_Token_Type is Token_Type range Tok_Abstract .. Tok_With;
-
-   subtype Token_Class_Literal is
-     Token_Type range Tok_Integer_Literal .. Tok_Operator_Symbol;
-   --  Literal
-
-   subtype Token_Class_Declk is
-     Token_Type range Tok_Entry .. Tok_Procedure;
-   --  Keywords which start a declaration
-
-   subtype Token_Class_No_Cont is Token_Type range Tok_Generic .. Tok_Colon;
-   --  Do not allow a following continuation line
-
-   Is_Operator : constant Token_Set :=
-     (Tok_Double_Asterisk |
-      Tok_Minus           |
-      Tok_Plus            |
-      Tok_Asterisk        |
-      Tok_Slash           |
-      Tok_Less            |
-      Tok_Equal           |
-      Tok_Greater         |
-      Tok_Not_Equal       |
-      Tok_Greater_Equal   |
-      Tok_Less_Equal      |
-      Tok_Ampersand       => True,
-      others              => False);
-
-   Is_Extended_Operator : constant Token_Set :=
-     (Tok_Double_Asterisk .. Tok_Slash     |
-      Tok_Comma .. Tok_Colon_Equal         |
-      Tok_Semicolon                        |
-      Tok_Ampersand .. Tok_Greater_Greater |
-      Tok_Colon .. Tok_Dot_Dot             => True,
-      others                               => False);
-
-   Max_Identifier : constant := 256;
-   --  Maximum length of an identifier
-
-   type Variable_Kind_Type is
-     (Unknown_Kind, Parameter_Kind, Discriminant_Kind);
-
-   type Extended_Token is record
-      Token         : Token_Type := No_Token;
-      --  Enclosing token
-
-      In_Declaration : Boolean := False;
-      --  Are we inside a declarative part ?
-
-      In_Entity_Profile : Boolean := True;
-      --  Are we in a definition?
-      --  (e.g. [procedure bla] is
-      --        [type T is record] null; end record;
-      --        etc...
-
-      Extra_Indent : Boolean := False;
-      --  Used for various kinds of constructs, when detecting different
-      --  ways of indenting code (only used internally).
-      --  For a Tok_Record, set to True if the keyword "record" was found on
-      --  its own line.
-      --  For a Tok_Case, set to True if 'when' constructs should be indented
-      --  an extra level, as for the RM style.
-
-      Type_Declaration : Boolean := False;
-      --  Is it a type declaration ?
-
-      Package_Declaration : Boolean := False;
-      --  Is it a package declaration ?
-
-      Protected_Declaration : Boolean := False;
-      --  Is this a protected declaration ?
-
-      --  ??? It would be nice to merge the fields Declaration,
-      --  Type_Declaration and Package_Declaration at some point.
-
-      Identifier          : String (1 .. Max_Identifier);
-      --  Name of the enclosing token
-      --  The actual name is Identifier (1 .. Ident_Len)
-
-      Ident_Len           : Natural := 0;
-      --  Actual length of Indentifier
-
-      Profile_Start       : Natural := 0;
-      --  Position in the buffer where the profile of the current subprogram
-      --  starts.
-
-      Profile_End         : Natural := 0;
-      --  Position in the buffer where the profile of the current subprogram
-      --  ends.
-
-      Align_Colon         : Natural := 0;
-      --  The column on which to align declarations
-
-      Colon_Col           : Natural := 0;
-      --  The column where the last ':' was found.
-      --  Only relevant for Tok_Colon tokens
-
-      Sloc                : Source_Location;
-      --  Source location for this entity
-
-      Sloc_Name           : Source_Location;
-      --  Source location for the name of this entity, if relevant
-
-      Visibility          : Construct_Visibility := Visibility_Public;
-      --  Is the token public or private ?
-
-      Visibility_Section  : Construct_Visibility := Visibility_Public;
-      --  Are we on the public or on the private section of the token ?
-
-      Variable_Kind : Variable_Kind_Type := Unknown_Kind;
-      --  If the token is a variable, hold wether this is actually a variable,
-      --  a discriminant or a parameter
-
-      Type_Definition_Section : Boolean := False;
-      --  Are we currently processing the type definition of the token ?
-
-      Is_In_Type_Definition : Boolean := False;
-      --  Is this token found in the type definition section of its parent ?
-
-      Attributes            : Construct_Attribute_Map := No_Attribute;
-      --  Defines the attributes that have been found for the given token
-
-      Is_Generic_Param      : Boolean := False;
-      --  Is this token a generic parameter?
-   end record;
-   --  Extended information for a token
-
-   package Token_Stack is new Generic_Stack (Extended_Token);
-   use Token_Stack;
-
-   type Construct_Type is
-     (Conditional,
-      Type_Declaration,
-      Function_Call,
-      Aggregate);
-   --  Type used to differentiate different constructs to refine indentation
-
-   package Construct_Stack is new Generic_Stack (Construct_Type);
-   use Construct_Stack;
-
-   ----------------------
-   -- Local procedures --
-   ----------------------
-
-   function Get_Token
-     (Str : String; Prev_Token : Token_Type) return Token_Type;
-   --  Return a token_Type given a string.
-   --  For efficiency, S is assumed to start at index 1.
-   --  Prev_Token is the previous token scanned, if any. This is needed
-   --  to e.g. differenciate pragma Interface vs interface keyword.
-
-   function Is_Library_Level (Stack : Token_Stack.Simple_Stack) return Boolean;
-   --  Return True if the current scope in Stack is a library level package
-
-   ---------------
-   -- Get_Token --
-   ---------------
-
-   function Get_Token
-     (Str : String; Prev_Token : Token_Type) return Token_Type
-   is
-      S : String (Str'Range);
-   begin
-      pragma Assert (S'First = 1);
-
-      --  First convert Str to lower case for the token parser below
-
-      for K in Str'Range loop
-         S (K) := To_Lower (Str (K));
-      end loop;
-
-      if S'Length = 0 then
-         return No_Token;
-
-      elsif S'Length = 1 then
-         if Is_Control (S (S'First)) then
-            return No_Token;
-         else
-            return Tok_Identifier;
-         end if;
-      end if;
-
-      --  Use a case statement instead of a loop for efficiency
-
-      case S (1) is
-         when 'a' =>
-            case S (2) is
-               when 'b' =>
-                  if S (3 .. S'Last) = "ort" then
-                     return Tok_Abort;
-                  elsif S (3 .. S'Last) = "s" then
-                     return Tok_Abs;
-                  elsif S (3 .. S'Last) = "stract" then
-                     return Tok_Abstract;
-                  end if;
-
-               when 'c' =>
-                  if S (3 .. S'Last) = "cept" then
-                     return Tok_Accept;
-                  elsif S (3 .. S'Last) = "cess" then
-                     return Tok_Access;
-                  end if;
-
-               when 'l' =>
-                  if S (3 .. S'Last) = "l" then
-                     return Tok_All;
-                  elsif S (3 .. S'Last) = "iased" then
-                     return Tok_Aliased;
-                  end if;
-
-               when 'n' =>
-                  if S (3 .. S'Last) = "d" then
-                     return Tok_And;
-                  end if;
-
-               when 'r' =>
-                  if S (3 .. S'Last) = "ray" then
-                     return Tok_Array;
-                  end if;
-
-               when 't' =>
-                  if S'Length = 2 then
-                     return Tok_At;
-                  end if;
-
-               when others =>
-                  return Tok_Identifier;
-            end case;
-
-         when 'b' =>
-            if S (2 .. S'Last) = "egin" then
-               return Tok_Begin;
-            elsif S (2 .. S'Last) = "ody" then
-               return Tok_Body;
-            end if;
-
-         when 'c' =>
-            if S (2 .. S'Last) = "ase" then
-               return Tok_Case;
-            elsif S (2 .. S'Last) = "onstant" then
-               return Tok_Constant;
-            end if;
-
-         when 'd' =>
-            if S (2) = 'e' then
-               if S (3 .. S'Last) = "clare" then
-                  return Tok_Declare;
-               elsif S (3 .. S'Last) = "lay" then
-                  return Tok_Delay;
-               elsif S (3 .. S'Last) = "lta" then
-                  return Tok_Delta;
-               end if;
-
-            elsif S (2 .. S'Last) = "igits" then
-               return Tok_Digits;
-            elsif S (2 .. S'Last) = "o" then
-               return Tok_Do;
-            end if;
-
-         when 'e' =>
-            if S (2 .. S'Last) = "lse" then
-               return Tok_Else;
-            elsif S (2 .. S'Last) = "lsif" then
-               return Tok_Elsif;
-            elsif S (2 .. S'Last) = "nd" then
-               return Tok_End;
-            elsif S (2 .. S'Last) = "ntry" then
-               return Tok_Entry;
-            elsif S (2 .. S'Last) = "xception" then
-               return Tok_Exception;
-            elsif S (2 .. S'Last) = "xit" then
-               return Tok_Exit;
-            end if;
-
-         when 'f' =>
-            if S (2 .. S'Last) = "or" then
-               return Tok_For;
-            elsif S (2 .. S'Last) = "unction" then
-               return Tok_Function;
-            end if;
-
-         when 'g' =>
-            if S (2 .. S'Last) = "eneric" then
-               return Tok_Generic;
-            elsif S (2 .. S'Last) = "oto" then
-               return Tok_Goto;
-            end if;
-
-         when 'i' =>
-            if S (2 .. S'Last) = "f" then
-               return Tok_If;
-            elsif S (2 .. S'Last) = "n" then
-               return Tok_In;
-            elsif S (2 .. S'Last) = "nterface" then
-               if Prev_Token = Tok_Pragma then
-                  return Tok_Identifier;
-               else
-                  return Tok_Interface;
-               end if;
-
-            elsif S (2 .. S'Last) = "s" then
-               return Tok_Is;
-            end if;
-
-         when 'l' =>
-            if S (2 .. S'Last) = "imited" then
-               return Tok_Limited;
-            elsif S (2 .. S'Last) = "oop" then
-               return Tok_Loop;
-            end if;
-
-         when 'm' =>
-            if S (2 .. S'Last) = "od" then
-               return Tok_Mod;
-            end if;
-
-         when 'n' =>
-            if S (2 .. S'Last) = "ew" then
-               return Tok_New;
-            elsif S (2 .. S'Last) = "ot" then
-               return Tok_Not;
-            elsif S (2 .. S'Last) = "ull" then
-               return Tok_Null;
-            end if;
-
-         when 'o' =>
-            if S (2 .. S'Last) = "thers" then
-               return Tok_Others;
-            elsif S (2 .. S'Last) = "ut" then
-               return Tok_Out;
-            elsif S (2 .. S'Last) = "f" then
-               return Tok_Of;
-            elsif S (2 .. S'Last) = "r" then
-               return Tok_Or;
-            elsif S (2 .. S'Last) = "verriding" then
-               return Tok_Overriding;
-            end if;
-
-         when 'p' =>
-            if S (2) = 'r' then
-               if S (3 .. S'Last) = "agma" then
-                  return Tok_Pragma;
-               elsif S (3 .. S'Last) = "ivate" then
-                  return Tok_Private;
-               elsif S (3 .. S'Last) = "ocedure" then
-                  return Tok_Procedure;
-               elsif S (3 .. S'Last) = "otected" then
-                  return Tok_Protected;
-               end if;
-
-            elsif S (2 .. S'Last) = "ackage" then
-               return Tok_Package;
-            end if;
-
-         when 'r' =>
-            if S (2) = 'a' then
-               if S (3 .. S'Last) = "ise" then
-                  return Tok_Raise;
-               elsif S (3 .. S'Last) = "nge" then
-                  return Tok_Range;
-               end if;
-
-            elsif S (2) = 'e' then
-               if S (3 .. S'Last) = "cord" then
-                  return Tok_Record;
-               elsif S (3 .. S'Last) = "m" then
-                  return Tok_Rem;
-               elsif S (3 .. S'Last) = "names" then
-                  return Tok_Renames;
-               elsif S (3 .. S'Last) = "queue" then
-                  return Tok_Requeue;
-               elsif S (3 .. S'Last) = "turn" then
-                  return Tok_Return;
-               elsif S (3 .. S'Last) = "verse" then
-                  return Tok_Reverse;
-               end if;
-            end if;
-
-         when 's' =>
-            if S (2 .. S'Last) = "elect" then
-               return Tok_Select;
-            elsif S (2 .. S'Last) = "eparate" then
-               return Tok_Separate;
-            elsif S (2 .. S'Last) = "ome" then
-               if Prev_Token = Tok_For then
-                  return Tok_Some;
-               else
-                  return Tok_Identifier;
-               end if;
-            elsif S (2 .. S'Last) = "ubtype" then
-               return Tok_Subtype;
-            elsif S (2 .. S'Last) = "ynchronized" then
-               return Tok_Synchronized;
-            end if;
-
-         when 't' =>
-            if S (2 .. S'Last) = "agged" then
-               return Tok_Tagged;
-            elsif S (2 .. S'Last) = "ask" then
-               return Tok_Task;
-            elsif S (2 .. S'Last) = "erminate" then
-               return Tok_Terminate;
-            elsif S (2 .. S'Last) = "hen" then
-               return Tok_Then;
-            elsif S (2 .. S'Last) = "ype" then
-               return Tok_Type;
-            end if;
-
-         when 'u' =>
-            if S (2 .. S'Last) = "ntil" then
-               return Tok_Until;
-            elsif S (2 .. S'Last) = "se" then
-               return Tok_Use;
-            end if;
-
-         when 'w' =>
-            if S (2 .. S'Last) = "hen" then
-               return Tok_When;
-            elsif S (2 .. S'Last) = "hile" then
-               return Tok_While;
-            elsif S (2 .. S'Last) = "ith" then
-               return Tok_With;
-            end if;
-
-         when 'x' =>
-            if S (2 .. S'Last) = "or" then
-               return Tok_Xor;
-            end if;
-
-         when others =>
-            return Tok_Identifier;
-      end case;
-
-      return Tok_Identifier;
-   end Get_Token;
-
-   ----------------------
-   -- Is_Library_Level --
-   ----------------------
-
-   function Is_Library_Level
-     (Stack : Token_Stack.Simple_Stack) return Boolean
-   is
-      Result : Boolean := True;
-
-      function Check_Token (Token : Extended_Token) return Boolean;
-
-      function Check_Token (Token : Extended_Token) return Boolean is
-      begin
-         if Token.Token /= No_Token
-           and then Token.Token /= Tok_Package
-           and then Token.Token /= Tok_Generic
-         then
-            Result := False;
-            return False;
-         end if;
-
-         return True;
-      end Check_Token;
-
-   begin
-      Traverse_Stack (Stack, Check_Token'Access);
-      return Result;
-   end Is_Library_Level;
-
-   ------------------------
-   -- Analyze_Ada_Source --
-   ------------------------
-
-   SPARK_Keywords : constant Pattern_Matcher := Compile
-                     ("^(a(bs|ll|nd|ss(ert|ume))|check|derives|e(lse|nd)|" &
-                      "f(or|rom|unction)|global|" &
-                      "h(ide|old)|i(n|s)|in(herit|itializes|variant)|" &
-                      "main_program|n(ot|ull)|o(r|wn|thers)|post|pre|some|" &
-                      "a(ccept|re_interchangeable|s|ssume)|const|div|" &
-                      "element|fi(nish|rst)|for_(all|some)|goal|" &
-                      "last|may_be_(deduced|deduced_from|" &
-                      "replaced_by)|no(n(first|last)|t_in)|o(dd|ut)|" &
-                      "p(ending|red|roof)|r(ange|e(al|quires|turn|m))|s(ave|" &
-                      "e(quence|t)|ome|qr|t(art|rict_subset_of)|" &
-                      "u(bset_of|cc))|t(hen|ype)|update|var|where|xor|" &
-                      "fld_.*|upf_.*)$");
-   --  Regular expression for SPARK keywords
-
-   procedure Analyze_Ada_Source
-     (Buffer              : UTF8_String;
-      Symbols             : GNATCOLL.Symbols.Symbol_Table_Access;
-      Indent_Params       : Indent_Parameters;
-      Format              : Boolean               := True;
-      From, To            : Natural               := 0;
-      Replace             : Replace_Text_Callback := null;
-      Constructs          : Construct_List_Access := null;
-      Callback            : Entity_Callback       := null;
-      Indent_Offset       : Natural               := 0;
-      Case_Exceptions     : Casing_Exceptions     := No_Casing_Exception;
-      Is_Optional_Keyword : access function (S : String)
-      return Boolean := null)
-   is
-      ---------------
-      -- Constants --
-      ---------------
-
-      None             : constant := -1;
-
-      Default_Extended : Extended_Token;
-      pragma Warnings (Off, Default_Extended);
-      --  Use default values to initialize this pseudo constant
-
-      Indent_Level        : Natural renames Indent_Params.Indent_Level;
-      Indent_Continue     : Natural renames Indent_Params.Indent_Continue;
-      Indent_Decl         : Natural renames Indent_Params.Indent_Decl;
-      Indent_With         : constant := 5;
-      Indent_Use          : constant := 4;
-      Indent_When         : constant := 5;
-      Indent_Comments     : Boolean renames Indent_Params.Indent_Comments;
-      Stick_Comments      : Boolean renames Indent_Params.Stick_Comments;
-      Stop_On_Blank_Line  : constant Boolean := True;
-      Indent_Record       : Natural renames Indent_Params.Indent_Record;
-      Indent_Case_Extra   : Indent_Style renames
-        Indent_Params.Indent_Case_Extra;
-      Indent_Conditional  : Natural renames Indent_Params.Indent_Conditional;
-      Reserved_Casing     : Casing_Type renames Indent_Params.Reserved_Casing;
-      Ident_Casing        : Casing_Type renames Indent_Params.Ident_Casing;
-      Use_Tabs            : Boolean renames Indent_Params.Use_Tabs;
-      Format_Operators    : constant Boolean :=
-                              Format and then Indent_Params.Format_Operators;
-      Align_On_Colons     : constant Boolean :=
-                              Format and then Indent_Params.Align_On_Colons;
-      Align_On_Arrows     : constant Boolean :=
-                              Format and then Indent_Params.Align_On_Arrows;
-      Align_Decl_On_Colon : constant Boolean :=
-                              Format
-                                and then Indent_Params.Align_Decl_On_Colon;
-      Buffer_Last         : constant Natural := Buffer'Last;
-
-      ---------------
-      -- Variables --
-      ---------------
-
-      Line_Count          : Integer := 1;
-      Str                 : String (1 .. 1024);
-      Str_Len             : Natural := 0;
-      Current             : Natural;
-      Prec                : Natural := Buffer'First;
-      Start_Of_Line       : Natural;
-      Prev_Line           : Natural;
-      Num_Spaces          : Integer := 0;
-      Continuation_Val    : Integer := 0;
-      Indent_Done         : Boolean := False;
-      Num_Parens          : Integer := 0;
-      Index_Ident         : Natural;
-      In_Generic          : Boolean := False;
-
-      Aspect_Clause       : Boolean := False;
-      --  True when the current construct is an Ada 2012 aspect clause
-      --  Consider merging with Subprogram_Aspect ???
-
-      Aspect_Clause_Sloc  : Source_Location;
-      --  source location of start of the current aspect clause, when
-      --  Aspect_Clause is True.
-
-      type In_Declaration_Kind is
-        (No_Decl, Subprogram_Decl, Subprogram_Aspect, Type_Decl);
-
-      In_Declaration : In_Declaration_Kind := No_Decl;
-      --  Identifies when we are in a declaration
-
-      Syntax_Error        : Boolean := False;
-      --  Not used for now, but may be useful in the future
-      pragma Unreferenced (Syntax_Error);
-
-      Comments_Skipped    : Boolean := False;
-      Token               : Token_Type;
-      Prev_Token          : Token_Type := No_Token;
-      Prev_Prev_Token     : Token_Type := No_Token;
-      Tokens              : Token_Stack.Simple_Stack;
-      Paren_Stack         : Construct_Stack.Simple_Stack;
-      Indents             : Indent_Stack.Stack.Simple_Stack;
-      Top_Token           : Token_Stack.Generic_Type_Access;
-      Casing              : Casing_Type := Unchanged;
-      Terminated          : Boolean := False;
-      End_Reached         : Boolean := False;
-      Last_Replace_Line   : Natural := 0;
-      Padding             : Integer := 0;
-      Paren_In_Middle     : Boolean := False;
-
-      Is_Parameter        : Boolean := False;
-      --  This variable is true if the identifiers picked are parameters, false
-      --  otherwise.
-
-      Is_Discriminant     : Boolean := False;
-      --  This variable is true if the identifiers picked are parameters, false
-      --  otherwise.
-
-      Right_Assignment    : Boolean := False;
-      --  When this is true, we are in a left assignment section
-
-      procedure Handle_Word_Token
-        (Reserved : Token_Type;
-         Temp     : out Extended_Token;
-         Do_Pop   : out Integer;
-         Do_Push  : out Boolean;
-         Finish   : out Boolean);
-      --  Handle a reserved word and computes a token out of it. Results
-      --  reads as follows:
-      --    Temp    - the token created
-      --    Do_Pop  - number of tokens to be popped out of the token list after
-      --              intendation
-      --    Do_Push - does temp needs to be pushed to the token list after
-      --              indentation?
-      --    Finish  - should the analysis be terminated?
-
-      procedure Handle_Word_Indent
-        (Reserved : Token_Type; Temp : in out Extended_Token);
-      --  Performs indentation after a call to Handle_Word_Token, and before
-      --  tokens are pushed or popped.
-
-      procedure Finish_Aspect_Clause
-        (P, Line : Natural; Done : out Boolean);
-      --  We are at the end of an aspect clause, so pop the stack,
-      --  call corresponding callbacks.
-      --  Done is set to True if processing should stop after this call.
-      --  P points to the first character in Buffer after the aspect clause.
-      --  Line is the current line.
-
-      procedure Next_Word
-        (P           : in out Natural;
-         L           : in out Natural;
-         Terminated  : out Boolean;
-         End_Reached : out Boolean);
-      --  Starting at Buffer (P), find the location of the next word
-      --  and set P accordingly.
-      --  Formatting of operators is performed by this procedure.
-      --  The following variables are accessed read-only:
-      --    Buffer, Tokens, Num_Spaces, Indent_Continue
-      --  The following variables are read and modified:
-      --    New_Buffer, Num_Parens, Line_Count, Indents, Indent_Done,
-      --    Prev_Token.
-      --  If the end of the buffer has been reached, set End_Reached to True.
-      --  If parsing should be terminated, set Terminated to True.
-
-      function End_Of_Word (P : Natural) return Natural;
-      --  Return the end of the word pointed by P
-
-      function End_Of_Identifier (P : Natural) return Natural;
-      --  Starting from P, scan for the end of the identifier.
-      --  P should be at the first non word character, which means that
-      --  if the identifier does not contain any dot, P - 1 will be returned.
-
-      procedure Look_For_End_Of_Data_Declaration
-        (Sloc : in out Source_Location);
-      --  Search the first ; character, or the first closing parenthesis,
-      --  skipping nested ones. Intended to go at the end of a variable or
-      --  parameter declaration.
-
-      procedure Look_For (Sloc : in out Source_Location; Char : Character);
-      --  Search Char in Buffer starting from Sloc.
-      --  Sloc is updated to the first occurrence of Char in Buffer, or
-      --  Buffer_Last if not found.
-
-      function Look_For (Index : Natural; S : String) return Boolean;
-      --  Return True if Buffer (Index) contains the word S
-
-      procedure New_Line (Count : in out Natural);
-      pragma Inline (New_Line);
-      --  Increment Count and poll if needed (e.g for graphic events)
-
-      procedure Do_Indent
-        (Prec         : Natural;
-         Line_Count   : Natural;
-         Num_Spaces   : Integer;
-         Continuation : Boolean := False);
-      --  Perform indentation by inserting spaces in the buffer.
-      --  If Continuation is True, Indent_Continue extra spaces are added.
-
-      procedure Indent_Function_Return (Prec : Natural);
-      --  Perform special indentation for function return/rename statements
-
-      function Is_Continuation_Line
-        (Token           : Token_Type;
-         Prev_Token      : Token_Type;
-         Prev_Prev_Token : Token_Type) return Boolean;
-      --  Return True if we are indenting a continuation line
-
-      procedure Compute_Indentation
-        (Token           : Token_Type;
-         Prev_Token      : Token_Type;
-         Prev_Prev_Token : Token_Type;
-         Prec            : Natural;
-         Line_Count      : Natural;
-         Num_Spaces      : Integer);
-      --  Compute proper indentation, taking into account various cases
-      --  of simple/continuation/declaration/... lines.
-
-      function Next_Char (P : Natural) return Natural;
-      --  Return the next char in buffer. P is the current character
-      pragma Inline (Next_Char);
-
-      function Prev_Char (P : Natural) return Natural;
-      --  Return the previous char in buffer. P is the current character
-      pragma Inline (Prev_Char);
-
-      function Compute_Alignment
-        (P                  : Natural;
-         Stop_On_Blank_Line : Boolean    := False;
-         Skip_First_Line    : Boolean    := True;
-         Align_On           : Token_Type := Tok_Colon) return Natural;
-      --  Compute the column number for an alignment on Align_On, starting at P
-      --  Align_On can take one of the following values:
-      --  - Tok_Colon
-      --  - Tok_Arrow
-      --  - Tok_Colon_Equal (not supported yet)
-
-      procedure Replace_Text
-        (First : Natural;
-         Last  : Natural;
-         Line  : Natural;
-         Str   : String);
-      --  Wrapper for Replace.all, taking (From, To) into account
-
-      function Call_Callback
-        (Entity         : Language_Entity;
-         Sloc_Start     : Source_Location;
-         Sloc_End       : Source_Location;
-         Partial_Entity : Boolean) return Boolean;
-      --  Call Callback and take into account Aspect_Clause/Aspect_Clause_Sloc
-      --  if needed.
-
-      --------------------
-      -- Stack Routines --
-      --------------------
-
-      procedure Pop
-        (Stack : in out Token_Stack.Simple_Stack; Value : out Extended_Token);
-      --  Pop Value on top of Stack
-
-      procedure Pop (Stack : in out Token_Stack.Simple_Stack);
-      --  Pop Value on top of Stack. Ignore returned value
-
-      ---------------
-      -- Next_Char --
-      ---------------
-
-      function Next_Char (P : Natural) return Natural is
-      begin
-         return UTF8_Next_Char (Buffer, P);
-      end Next_Char;
-
-      ---------------
-      -- Prev_Char --
-      ---------------
-
-      function Prev_Char (P : Natural) return Natural is
-      begin
-         return UTF8_Prev_Char (Buffer, P);
-      end Prev_Char;
-
-      ---------------
-      -- Do_Indent --
-      ---------------
-
-      procedure Do_Indent
-        (Prec         : Natural;
-         Line_Count   : Natural;
-         Num_Spaces   : Integer;
-         Continuation : Boolean := False)
-      is
-         Start       : Natural;
-         Indentation : Integer;
-         Index       : Natural;
-
-      begin
-         if Indent_Done or not Format then
-            return;
-         end if;
-
-         Paren_In_Middle := False;
-
-         if Prec > Buffer_Last then
-            --  In this case, we've parsed the entire buffer, so just compute
-            --  from the last offset
-
-            Start := Line_Start (Buffer, Buffer'Last);
-         else
-            Start := Line_Start (Buffer, Prec);
-         end if;
-
-         Index := Start;
-
-         loop
-            --  Manual unrolling for efficiency
-
-            exit when Buffer (Index) /= ' '
-              and then Buffer (Index) /= ASCII.HT;
-
-            Index := Index + 1;
-
-            exit when Buffer (Index) /= ' '
-              and then Buffer (Index) /= ASCII.HT;
-
-            Index := Index + 1;
-
-            exit when Buffer (Index) /= ' '
-              and then Buffer (Index) /= ASCII.HT;
-
-            Index := Index + 1;
-         end loop;
-
-         if Top (Indents).Level = None then
-            Indentation := Num_Spaces + Indent_Offset;
-         else
-            Indentation := Top (Indents).Level;
-         end if;
-
-         if Continuation then
-            Continuation_Val := Continuation_Val + Indent_Continue;
-            Indentation := Indentation + Continuation_Val;
-         else
-            Continuation_Val := 0;
-         end if;
-
-         Replace_Text
-           (Start, Index, Line_Count,
-            Blank_Slice (Indentation, Use_Tabs, Tab_Width));
-         Indent_Done := True;
-      end Do_Indent;
-
-      ----------------------------
-      -- Indent_Function_Return --
-      ----------------------------
-
-      procedure Indent_Function_Return (Prec : Natural) is
-         Top_Token : constant Token_Stack.Generic_Type_Access := Top (Tokens);
-      begin
-         --  function A
-         --    return B;   --  from Indent_Continue
-         --  function A (....)
-         --              return B;
-         --  function A
-         --    (...)
-         --     return B;
-
-         if Top_Token.Profile_Start = 0 then
-            Do_Indent (Prec, Line_Count, Num_Spaces + Indent_Continue);
-         else
-            Do_Indent
-              (Prec,
-               Line_Count,
-               Top_Token.Profile_Start -
-                 Line_Start (Buffer, Top_Token.Profile_Start) + 1);
-         end if;
-      end Indent_Function_Return;
-
-      -----------------------
-      -- Compute_Alignment --
-      -----------------------
-
-      function Compute_Alignment
-        (P                  : Natural;
-         Stop_On_Blank_Line : Boolean    := False;
-         Skip_First_Line    : Boolean    := True;
-         Align_On           : Token_Type := Tok_Colon) return Natural
-      is
-         Alignment        : Natural := 0;
-         New_Align        : Natural;
-         Found_Align      : Boolean := False;
-         J                : Natural;
-         Non_Blank        : Natural := 0;
-         Length_Ident     : Natural := 0;
-         Local_Num_Parens : Natural := 0;
-
-      begin
-         if Align_On /= Tok_Colon
-           and then Align_On /= Tok_Arrow
-         --  and then Align_On /= Tok_Colon_Equal  ??? not supported yet
-         then
-            return 0;
-         end if;
-
-         if Skip_First_Line then
-            J := Next_Line (Buffer, P);
-         else
-            J := P;
-         end if;
-
-         Main_Loop :
-         loop
-            exit Main_Loop when J >= Buffer'Last;
-
-            if Non_Blank = 0 then
-               if not Is_Blank (Buffer (J)) then
-                  Non_Blank := J;
-                  Length_Ident := 1;
-               end if;
-
-            else
-               Length_Ident := Length_Ident + 1;
-            end if;
-
-            exit Main_Loop when Look_For (J, "begin")
-              or else Look_For (J, "case")
-              or else Look_For (J, "end")
-              or else Look_For (J, "package")
-              or else Look_For (J, "protected")
-              or else Look_For (J, "task")
-              or else Look_For (J, "type");
-
-            case Buffer (J) is
-               when '"' =>
-                  if Buffer (J - 1) /= ''' then
-                     J := J + 1;
-                     Skip_To_Char (Buffer, J, '"');
-                  end if;
-
-               when '-' =>
-                  if Buffer (J + 1) = '-' then
-                     --  Skip comment
-
-                     J := Next_Line (Buffer, J) - 1;
-                     Found_Align := False;
-                     Non_Blank := 0;
-                  end if;
-
-               when '(' =>
-                  if Buffer (J - 1) /= '''
-                    or else Buffer (J + 1) /= '''
-                  then
-                     Local_Num_Parens := Local_Num_Parens + 1;
-                  end if;
-
-               when ')' =>
-                  if Buffer (J - 1) /= ''' then
-                     exit Main_Loop when Local_Num_Parens = 0;
-
-                     Local_Num_Parens := Local_Num_Parens - 1;
-                  end if;
-
-               when ':' =>
-                  if Align_On = Tok_Colon
-                    and then Local_Num_Parens = 0
-                    and then Buffer (J - 1) /= '''
-                    and then not Found_Align
-                  then
-                     Found_Align := True;
-                     New_Align   := Length_Ident;
-
-                     if Format_Operators
-                       and then not Is_Blank (Buffer (J - 1))
-                     then
-                        New_Align := New_Align + 1;
-                     end if;
-
-                     Alignment := Natural'Max (Alignment, New_Align);
-                  end if;
-
-               when '=' =>
-                  if Align_On = Tok_Arrow
-                    and then Buffer (J + 1) = '>'
-                    and then Local_Num_Parens = 0
-                    and then not Found_Align
-                  then
-                     Found_Align := True;
-                     New_Align   := Length_Ident + 1;
-
-                     if Format_Operators
-                       and then not Is_Blank (Buffer (J - 1))
-                     then
-                        --  ??? Format_Operators may add more than a single
-                        --  blank inside the expression.
-
-                        New_Align := New_Align + 1;
-                     end if;
-
-                     Alignment := Natural'Max (Alignment, New_Align);
-                  end if;
-
-               when ASCII.LF =>
-                  exit Main_Loop when Stop_On_Blank_Line
-                    and then Non_Blank = 0;
-
-                  Found_Align := False;
-                  Non_Blank   := 0;
-
-               when others =>
-                  null;
-            end case;
-
-            J := Next_Char (J);
-         end loop Main_Loop;
-
-         return Alignment;
-      end Compute_Alignment;
-
-      --------------------------
-      -- Is_Continuation_Line --
-      --------------------------
-
-      function Is_Continuation_Line
-        (Token           : Token_Type;
-         Prev_Token      : Token_Type;
-         Prev_Prev_Token : Token_Type) return Boolean
-      is
-         Top_Tok : constant Token_Type := Top (Tokens).Token;
-      begin
-         if Aspect_Clause then
-            return True;
-         end if;
-
-         if Prev_Token = Tok_Is and then In_Generic then
-            return True;
-         end if;
-
-         if Top_Tok = No_Token then
-            return False;
-         end if;
-
-         --  Special case for variable (Tok_Colon) or type (only case when
-         --  Tok_Is is passed to this subprogram) declarations.
-         --  In these cases, and if the Indent_Decl preference is set to 0
-         --  then this is not a continuation line, e.g:
-         --     Var
-         --     : Integer;
-         --     type T
-         --     is new Integer;
-         --  Note that we reuse Indent_Decl for now to avoid introducing
-         --  a new preference.
-
-         if (Top_Tok = Tok_Colon and then Token = Tok_Colon)
-           or else Token = Tok_Is
-         then
-            return Indent_Decl /= 0;
-         end if;
-
-         return
-           (Token not in Reserved_Token_Type
-            and then Prev_Token not in Token_Class_No_Cont
-            and then
-              (Prev_Token /= Tok_Arrow
-               or else (not Top (Tokens).In_Declaration
-                        and then Top_Tok not in
-                          Tok_Case | Tok_When | Tok_Select
-                          | Tok_Exception)))
-           or else (Prev_Token = Tok_Is
-                    and then (Token in Tok_New | Tok_Access
-                               | Tok_Separate | Tok_Abstract
-                              or else
-                                (Top_Tok = Tok_Subtype
-                                 and then Token /= Tok_Subtype)))
-           or else Token in Tok_Array | Tok_Of
-           or else (Token = Tok_Not
-                    and then (Prev_Token in Tok_And | Tok_Or
-                                | Tok_Then | Tok_Else))
-           or else (Prev_Token = Tok_With
-                    and then (Token = Tok_String_Literal
-                              or else Token = Tok_Private
-                              or else Top_Tok = Tok_Procedure
-                              or else Top_Tok = Tok_Function))
-           or else Prev_Token in Tok_Colon_Equal | Tok_Access | Tok_Of
-           or else (Prev_Token = Tok_Protected
-                    and then Prev_Prev_Token = Tok_Access)
-           or else (Prev_Token = Tok_When and then Token = Tok_Others)
-           or else (Prev_Token = Tok_Exit and then Token = Tok_When)
-           or else (Prev_Token = Tok_Null and then Token = Tok_Record)
-           or else (Prev_Prev_Token = Tok_And
-                    and then Prev_Token = Tok_Then
-                    and then Num_Parens = 0)
-           or else (Prev_Prev_Token = Tok_Or
-                    and then Prev_Token = Tok_Else
-                    and then Num_Parens = 0)
-           or else (Token = Tok_With
-                    and then (Prev_Prev_Token = Tok_Raise
-                              or else Top_Tok = Tok_Colon))
-           or else
-             (Top_Tok = Tok_Type
-              and then (Token = Tok_Null or else Token = Tok_Tagged))
-           or else (Token = Tok_When and then Top_Tok = Tok_Entry);
-      end Is_Continuation_Line;
-
-      -------------------------
-      -- Compute_Indentation --
-      -------------------------
-
-      procedure Compute_Indentation
-        (Token           : Token_Type;
-         Prev_Token      : Token_Type;
-         Prev_Prev_Token : Token_Type;
-         Prec            : Natural;
-         Line_Count      : Natural;
-         Num_Spaces      : Integer)
-      is
-         Top_Tok : constant Token_Type := Top (Tokens).Token;
-      begin
-         if Indent_Done or not Format then
-            return;
-         end if;
-
-         if (Prev_Token = Tok_Vertical_Bar or else Prev_Token = Tok_Or)
-           and then Top_Tok = Tok_When
-         then
-            --  Indent multiple-line when statements specially:
-            --  case Foo is
-            --     when A |
-            --          B =>  --  from Indent_When
-
-            Do_Indent
-              (Prec, Line_Count, Num_Spaces - Indent_Level + Indent_When);
-
-         elsif Prev_Token = Tok_Comma
-           and then (Num_Parens = 0 or else Token /= Tok_When)
-         then
-            if Top_Tok = Tok_Declare
-              or else Top_Tok = Tok_Identifier
-              or else Top_Tok = Tok_Record
-              or else Top_Tok = Tok_Case
-              or else Top_Tok = Tok_When
-            then
-               --  Inside a declare block, indent broken lines specially
-               --  declare
-               --     A,
-               --         B : Integer;  --  from Indent_Decl
-
-               Do_Indent (Prec, Line_Count, Num_Spaces + Indent_Decl);
-
-            elsif Top_Tok = Tok_With then
-               --  Indent continuation lines in with clauses:
-               --  with Package1,
-               --     Package2;  --  from Indent_With
-
-               Do_Indent (Prec, Line_Count, Num_Spaces + Indent_With);
-
-            elsif Top_Tok = Tok_Use then
-               --  Ditto for use clauses:
-               --  use Package1,
-               --    Package2;  --  from Indent_Use
-
-               Do_Indent (Prec, Line_Count, Num_Spaces + Indent_Use);
-
-            elsif Num_Parens = 0 then
-               if Continuation_Val > 0 then
-                  declare
-                     Tmp_Index : Natural := Prec + 1;
-                  begin
-                     Skip_Blanks (Buffer, Tmp_Index);
-
-                     if Look_For (Tmp_Index, "=>") then
-                        --  May happen with aspects:
-                        --  procedure G with
-                        --    Pre => F,
-                        --    Post => F;
-
-                        Continuation_Val := Continuation_Val - Indent_Continue;
-                     end if;
-                  end;
-               end if;
-
-               Do_Indent (Prec, Line_Count, Num_Spaces, Continuation => True);
-            else
-               --  Default case, simply use Num_Spaces
-
-               Do_Indent (Prec, Line_Count, Num_Spaces);
-            end if;
-
-         elsif Top (Tokens).Colon_Col /= 0
-           and then Continuation_Val = 0
-           and then Num_Parens = 0
-           and then (Prev_Token = Tok_Colon_Equal
-                     or else Prev_Token = Tok_Renames
-                     or else Is_Operator (Prev_Token)
-                     or else Is_Operator (Token))
-         then
-            Continuation_Val := Top (Tokens).Colon_Col + 4 - Indent_Continue;
-            Do_Indent (Prec, Line_Count, Num_Spaces, Continuation => True);
-
-         elsif Prev_Token = Tok_Ampersand or else Token = Tok_Ampersand then
-            if Continuation_Val > 0 then
-               Continuation_Val := Continuation_Val - Indent_Continue;
-            end if;
-
-            Do_Indent (Prec, Line_Count, Num_Spaces, Continuation => True);
-            Continuation_Val := 0;
-
-         elsif Is_Continuation_Line
-           (Token, Prev_Token, Prev_Prev_Token)
-         then
-            Do_Indent (Prec, Line_Count, Num_Spaces, Continuation => True);
-
-            if Is_Operator (Token) then
-               Continuation_Val := 0;
-            end if;
-
-         elsif Num_Parens > 0
-           and then
-             (Token in Tok_When | Tok_Vertical_Bar
-              or else Prev_Token = Tok_Arrow
-              or else (Prev_Token = Tok_Then
-                       and then Prev_Prev_Token /= Tok_And)
-              or else (Prev_Token = Tok_Else
-                       and then Prev_Prev_Token /= Tok_Or))
-         then
-            --  Handle a bit better Ada 2012 conditional expressions
-
-            if Token in Tok_When | Tok_Vertical_Bar then
-               Continuation_Val := Indent_Level - Indent_Continue;
-            else
-               Continuation_Val :=
-                 Continuation_Val + Indent_Level - Indent_Continue;
-            end if;
-
-            Do_Indent (Prec, Line_Count, Num_Spaces, Continuation => True);
-         else
-            Do_Indent (Prec, Line_Count, Num_Spaces);
-         end if;
-      end Compute_Indentation;
-
-      -----------------
-      -- End_Of_Word --
-      -----------------
-
-      function End_Of_Word (P : Natural) return Natural is
-         Cur : Natural;
-      begin
-         if P >= Buffer_Last then
-            return Buffer_Last;
-         end if;
-
-         Cur := Next_Char (P);
-
-         while Cur <= Buffer_Last
-           and then Is_Entity_Letter
-             (UTF8_Get_Char (Buffer (Cur .. Buffer_Last)))
-         loop
-            Cur := Next_Char (Cur);
-         end loop;
-
-         if Cur > Buffer_Last then
-            return Buffer_Last;
-         else
-            return Cur - 1;
-         end if;
-      end End_Of_Word;
-
-      -----------------------
-      -- End_Of_Identifier --
-      -----------------------
-
-      function End_Of_Identifier (P : Natural) return Natural is
-         Tmp       : Natural := P;
-         Prev      : Natural := P - 1;
-         Start     : Natural;
-         New_Lines : Natural;
-         Last_Dot  : Natural;
-
-      begin
-         --  Do not try to go past '.' and line breaks when reformatting,
-         --  this is causing too much trouble for no gain.
-         --  Getting full identifiers is only useful when parsing, not
-         --  when reformatting.
-
-         if Format then
-            return P - 1;
-         end if;
-
-         loop
-            New_Lines := 0;
-
-            while Tmp < Buffer_Last and then Is_Blank (Buffer (Tmp)) loop
-               if Buffer (Tmp) = ASCII.LF then
-                  New_Lines := New_Lines + 1;
-               end if;
-
-               Tmp := Tmp + 1;
-            end loop;
-
-            if Tmp >= Buffer_Last
-              or else Buffer (Tmp) /= '.'
-              or else Buffer (Tmp + 1) = '.'
-            then
-               return Prev;
-            end if;
-
-            Last_Dot := Tmp;
-
-            while Tmp < Buffer_Last loop
-               Tmp := Tmp + 1;
-
-               if Buffer (Tmp) = ASCII.LF then
-                  Compute_Indentation
-                    (Token, Prev_Token, Prev_Prev_Token,
-                     Tmp - 1, Line_Count, Num_Spaces);
-                  New_Lines := New_Lines + 1;
-               end if;
-
-               exit when not Is_Blank (Buffer (Tmp));
-            end loop;
-
-            if Buffer (Tmp) = '"' then
-               --  Case of an operator, e.g System."=", will be handled
-               --  separately for proper highlighting.
-
-               return Prev;
-
-            elsif not Is_Entity_Letter
-              (UTF8_Get_Char (Buffer (Tmp .. Buffer_Last)))
-            then
-               return Last_Dot;
-            else
-               Start := Tmp;
-               Tmp   := End_Of_Word (Tmp);
-
-               if Buffer (Start .. Tmp) = "all"
-               --  constructions like sth.procedure often reflect incomplete
-               --  statements, e.g.:
-               --
-               --  use Ada.
-               --  procedure P is
-               --
-               --  retreiving these here improve the general tree balance in
-               --  case of incomplete constructs.
-                 or else Buffer (Start .. Tmp) = "procedure"
-                 or else Buffer (Start .. Tmp) = "function"
-                 or else Buffer (Start .. Tmp) = "package"
-               then
-                  return Prev;
-               end if;
-            end if;
-
-            Line_Count := Line_Count + New_Lines;
-            Prev := Tmp;
-            Tmp  := Tmp + 1;
-         end loop;
-      end End_Of_Identifier;
-
-      --------------------------------------
-      -- Look_For_End_Of_Data_Declaration --
-      --------------------------------------
-
-      procedure Look_For_End_Of_Data_Declaration
-        (Sloc : in out Source_Location)
-      is
-         C           : Character;
-         In_Comments : Boolean := False;
-         Paren_Depth : Integer := 0;
-      begin
-         for J in Sloc.Index .. Buffer_Last loop
-            C := Buffer (J);
-
-            if not In_Comments
-              and then Paren_Depth = 0
-              and then (C = ';' or else C = ')')
-            then
-               Sloc.Index := J;
-               return;
-
-            elsif C = '-' and then Buffer (J - 1) = '-' then
-               In_Comments := True;
-
-            elsif C = ASCII.LF then
-               In_Comments := False;
-               Sloc.Line := Sloc.Line + 1;
-               Sloc.Column := 1;
-
-            elsif C = '(' then
-               Paren_Depth := Paren_Depth + 1;
-               Sloc.Column := Sloc.Column + 1;
-
-            elsif C = ')' then
-               Paren_Depth := Paren_Depth - 1;
-               Sloc.Column := Sloc.Column + 1;
-
-            elsif C /= ASCII.CR then
-               Sloc.Column := Sloc.Column + 1;
-
-            end if;
-         end loop;
-      end Look_For_End_Of_Data_Declaration;
-
-      --------------
-      -- Look_For --
-      --------------
-
-      procedure Look_For (Sloc : in out Source_Location; Char : Character) is
-         C           : Character;
-         In_Comments : Boolean := False;
-      begin
-         for J in Sloc.Index .. Buffer_Last loop
-            C := Buffer (J);
-
-            if not In_Comments and then C = Char then
-               Sloc.Index := J;
-               return;
-
-            elsif C = '-' and then Buffer (J - 1) = '-' then
-               In_Comments := True;
-
-            elsif C = ASCII.LF then
-               In_Comments := False;
-               Sloc.Line := Sloc.Line + 1;
-               Sloc.Column := 1;
-
-            elsif C /= ASCII.CR then
-               Sloc.Column := Sloc.Column + 1;
-            end if;
-         end loop;
-      end Look_For;
-
-      function Look_For (Index : Natural; S : String) return Boolean is
-      begin
-         return Is_Blank (Buffer (Index - 1))
-           and then Index + S'Length < Buffer'Last
-           and then To_Lower (Buffer (Index .. Index + S'Length - 1)) = S
-           and then (Buffer (Index + S'Length) = ';'
-                     or else Buffer (Index + S'Length) = '-'
-                     or else Is_Blank (Buffer (Index + S'Length)));
-      end Look_For;
-
-      --------------
-      -- New_Line --
-      --------------
-
-      procedure New_Line (Count : in out Natural) is
-      begin
-         Count := Count + 1;
-      end New_Line;
-
-      ---------
-      -- Pop --
-      ---------
-
-      procedure Pop
-        (Stack : in out Token_Stack.Simple_Stack;
-         Value : out Extended_Token)
-      is
-         Column : Natural;
-         Info   : Construct_Access;
-
-      begin
-         --  Never pop the initial value
-
-         if Top (Stack).Token = No_Token then
-            Value := Top (Stack).all;
-            return;
-         end if;
-
-         Token_Stack.Pop (Stack, Value);
-
-         Top_Token := Token_Stack.Top (Stack);
-
-         --  Tok_Record will be taken into account by Tok_Type if needed.
-         --  Build next entry of Constructs
-
-         if Value.Token = Tok_Colon and then Constructs /= null then
-            --  If we are on a Tok_Colon, then we want to assign attibutes to
-            --  all the data that are related to this declaration.
-
-            declare
-               Current : Construct_Access := Constructs.Current;
-            begin
-               while Current /= null
-                 and then Current.Category in Data_Category
-                 and then Current.Sloc_Start.Index <= Prec
-                 and then Current.Sloc_End.Index >= Prec
-               loop
-                  Current.Attributes := Value.Attributes;
-                  Current := Current.Prev;
-               end loop;
-            end;
-
-         elsif Value.Token /= Tok_Record
-           and then Value.Token /= Tok_When
-           and then Value.Token /= Tok_Generic
-           and then Constructs /= null
-         then
-            Column             := Prec - Line_Start (Buffer, Prec) + 1;
-            Info               := Constructs.Current;
-            Constructs.Current := new Construct_Information;
-
-            if Constructs.First = null then
-               Constructs.First := Constructs.Current;
-            else
-               Constructs.Current.Prev := Info;
-               Constructs.Current.Next := Info.Next;
-               Info.Next               := Constructs.Current;
-            end if;
-
-            Constructs.Last := Constructs.Current;
-            Constructs.Size := Constructs.Size + 1;
-
-            Constructs.Current.Visibility := Value.Visibility;
-            Constructs.Current.Attributes := Value.Attributes;
-
-            Constructs.Current.Is_Generic_Spec := Value.Is_Generic_Param;
-
-            if Value.Attributes (Ada_Tagged_Attribute) then
-               Constructs.Current.Category := Cat_Class;
-
-            elsif Value.Attributes (Ada_Record_Attribute) then
-               if Value.Token = Tok_Case then
-                  --  A case statement inside a record
-                  Constructs.Current.Category := Cat_Case_Inside_Record;
-               else
-                  Constructs.Current.Category := Cat_Structure;
-               end if;
-
-            else
-               case Value.Token is
-                  when Tok_Package =>
-                     Constructs.Current.Category := Cat_Package;
-                  when Tok_Procedure =>
-                     Constructs.Current.Category := Cat_Procedure;
-                  when Tok_Function =>
-                     Constructs.Current.Category := Cat_Function;
-                  when Tok_Task =>
-                     Constructs.Current.Category := Cat_Task;
-                  when Tok_Protected =>
-                     Constructs.Current.Category := Cat_Protected;
-                  when Tok_Entry =>
-                     Constructs.Current.Category := Cat_Entry;
-
-                  when Tok_Type =>
-                     Constructs.Current.Category := Cat_Type;
-                  when Tok_Subtype =>
-                     Constructs.Current.Category := Cat_Subtype;
-                  when Tok_For =>
-                     Constructs.Current.Category := Cat_Representation_Clause;
-                  when Tok_Identifier =>
-                     if Is_Library_Level (Stack) then
-                        Constructs.Current.Category := Cat_Variable;
-                     elsif Value.Variable_Kind = Parameter_Kind then
-                        Constructs.Current.Category := Cat_Parameter;
-                     elsif Value.Variable_Kind = Discriminant_Kind then
-                        Constructs.Current.Category := Cat_Discriminant;
-                     elsif Value.Is_In_Type_Definition then
-                        if Top (Stack).Type_Declaration
-                          or else Top (Stack).Protected_Declaration
-                          or else Top (Stack).Attributes (Ada_Record_Attribute)
-                        then
-                           Constructs.Current.Category := Cat_Field;
-                        else
-                           Constructs.Current.Category := Cat_Literal;
-                        end if;
-                     else
-                        Constructs.Current.Category := Cat_Local_Variable;
-                     end if;
-                  when Tok_With =>
-                     Constructs.Current.Category := Cat_With;
-                  when Tok_Use =>
-                     Constructs.Current.Category := Cat_Use;
-
-                  when Tok_Loop =>
-                     Constructs.Current.Category := Cat_Loop_Statement;
-                  when Tok_Then =>
-                     Constructs.Current.Category := Cat_If_Statement;
-                  when Tok_Case =>
-                     Constructs.Current.Category := Cat_Case_Statement;
-                  when Tok_Select =>
-                     Constructs.Current.Category := Cat_Select_Statement;
-                  when Tok_Accept | Tok_Do =>
-                     Constructs.Current.Category := Cat_Accept_Statement;
-                  when Tok_Declare =>
-                     Constructs.Current.Category := Cat_Declare_Block;
-                  when Tok_Begin =>
-                     Constructs.Current.Category := Cat_Simple_Block;
-                  when Tok_Return =>
-                     Constructs.Current.Category := Cat_Return_Block;
-
-                  when Tok_Exception =>
-                     Constructs.Current.Category := Cat_Exception_Handler;
-                  when Tok_Pragma =>
-                     Constructs.Current.Category := Cat_Pragma;
-                  when Tok_Arrow =>
-                     Constructs.Current.Category := Cat_Aspect;
-                  when others =>
-                     Constructs.Current.Category := Cat_Unknown;
-               end case;
-            end if;
-
-            if Value.Ident_Len > 0 then
-               Constructs.Current.Name :=
-                 Symbols.Find (Value.Identifier (1 .. Value.Ident_Len));
-               Constructs.Current.Sloc_Entity := Value.Sloc_Name;
-            end if;
-
-            if Value.Profile_Start /= 0 then
-               Constructs.Current.Profile :=
-                 new String'
-                   (Buffer (Value.Profile_Start .. Value.Profile_End));
-            end if;
-
-            Constructs.Current.Sloc_Start := Value.Sloc;
-
-            if Comments_Skipped then
-               Constructs.Current.Sloc_End := (Prev_Line, Column, Prec);
-            else
-               Constructs.Current.Sloc_End := (Line_Count, Column, Prec);
-            end if;
-
-            case Constructs.Current.Category is
-               when Cat_Parameter | Cat_Discriminant =>
-                  --  Adjust the Sloc_End to the next semicolon for enclosing
-                  --  entities and variable declarations, or next closing
-                  --  parenthesis
-
-                  Look_For_End_Of_Data_Declaration
-                    (Constructs.Current.Sloc_End);
-
-               when Cat_Variable | Cat_Local_Variable | Cat_Field |
-                    Cat_Declare_Block | Cat_Simple_Block |
-                    Cat_Type | Cat_Subtype | Namespace_Category |
-                    Subprogram_Category | Cat_Pragma
-               =>
-                  --  Adjust the Sloc_End to the next semicolon for enclosing
-                  --  entities and variable declarations. In case if loops,
-                  --  adjust the end of the source location to the end of the
-                  --  identifier.
-
-                  if Prev_Token /= Tok_For then
-                     Look_For (Constructs.Current.Sloc_End, ';');
-                  else
-                     Constructs.Current.Sloc_End.Column :=
-                       Constructs.Current.Sloc_End.Column +
-                         Value.Ident_Len - 1;
-                     Constructs.Current.Sloc_End.Index :=
-                       Constructs.Current.Sloc_End.Index +
-                         Value.Ident_Len - 1;
-                  end if;
-
-               when others =>
-                  null;
-            end case;
-
-            Constructs.Current.Is_Declaration :=
-              In_Declaration in Subprogram_Decl .. Subprogram_Aspect
-                or else Value.Type_Declaration
-                or else Value.Package_Declaration
-                or else Value.Protected_Declaration;
-         end if;
-      end Pop;
-
-      procedure Pop (Stack : in out Token_Stack.Simple_Stack) is
-         Value : Extended_Token;
-      begin
-         Pop (Stack, Value);
-      end Pop;
-
-      --------------------------
-      -- Finish_Aspect_Clause --
-      --------------------------
-
-      procedure Finish_Aspect_Clause
-        (P, Line : Natural; Done : out Boolean)
-      is
-         Prec_Saved : constant Natural := Prec;
-      begin
-         Aspect_Clause := False;
-         Done := False;
-
-         --  Pop aspect clause
-         --  Set Prec so that Pop will use the proper index/column
-         Prec := Prev_Char (P);
-         Pop (Tokens);
-
-         if Callback /= null then
-            Start_Of_Line := Line_Start (Buffer, Prec);
-
-            Done := Callback
-              (Aspect_Text,
-               Aspect_Clause_Sloc,
-               (Line, Prec - Start_Of_Line + 1, Prec),
-               False);
-         end if;
-
-         Prec := Prec_Saved;
-      end Finish_Aspect_Clause;
-
-      -----------------------
-      -- Handle_Word_Token --
-      -----------------------
-
-      procedure Handle_Word_Token
-        (Reserved : Token_Type;
-         Temp     : out Extended_Token;
-         Do_Pop   : out Integer;
-         Do_Push  : out Boolean;
-         Finish   : out Boolean)
-      is
-         Top_Token     : Token_Stack.Generic_Type_Access;
-         Start_Of_Line : Natural;
-         Index_Next    : Natural;
-         Tmp_Index     : Natural;
-
-         procedure Adjust_Block_Column;
-         --  Adjust status column of declare block to take into
-         --  account a label at start of the line by using the first
-         --  non blank character on the line.
-
-         -------------------------
-         -- Adjust_Block_Column --
-         -------------------------
-
-         procedure Adjust_Block_Column is
-         begin
-            if Prev_Token = Tok_Colon then
-               Tmp_Index := Start_Of_Line;
-               Skip_Blanks (Buffer, Tmp_Index);
-               Temp.Sloc.Column := Tmp_Index - Start_Of_Line + 1;
-               Temp.Sloc.Index  := Tmp_Index;
-            end if;
-         end Adjust_Block_Column;
-
-      begin
-         Do_Push := False;
-         Do_Pop := 0;
-         Finish := False;
-
-         if Reserved = Tok_Is and then Aspect_Clause then
-            Finish_Aspect_Clause (Prec, Line_Count, Done => Finish);
-
-            if Finish then
-               return;
-            end if;
-         end if;
-
-         Top_Token := Top (Tokens);
-         Temp := (others => <>);
-         Temp.Token       := Reserved;
-         Start_Of_Line    := Line_Start (Buffer, Prec);
-         Temp.Sloc.Line   := Line_Count;
-         Temp.Sloc.Column := Prec - Start_Of_Line + 1;
-         Temp.Sloc.Index  := Prec;
-         Temp.Visibility  := Top_Token.Visibility_Section;
-
-         if Callback /= null then
-            Finish := Call_Callback
-              (Keyword_Text,
-               Temp.Sloc,
-               (Line_Count, Current - Start_Of_Line + 1, Current),
-               False);
-
-            if Finish then
-               return;
-            end if;
-         end if;
-
-         --  Computes Tok_Token.Type_Att
-
-         if not Right_Assignment then
-            case Reserved is
-               when Tok_Abstract =>
-                  Top_Token.Attributes (Ada_Abstract_Attribute) := True;
-               when Tok_Access =>
-                  Top_Token.Attributes (Ada_Access_Attribute) := True;
-               when Tok_Aliased =>
-                  Top_Token.Attributes (Ada_Aliased_Attribute) := True;
-               when Tok_Array =>
-                  Top_Token.Attributes (Ada_Array_Attribute) := True;
-               when Tok_Colon_Equal =>
-                  Top_Token.Attributes (Ada_Assign_Attribute) := True;
-               when Tok_Constant =>
-                  Top_Token.Attributes (Ada_Constant_Attribute) := True;
-               when Tok_Delta =>
-                  Top_Token.Attributes (Ada_Delta_Attribute) := True;
-               when Tok_Digits =>
-                  Top_Token.Attributes (Ada_Digits_Attribute) := True;
-               when Tok_Range =>
-                  Top_Token.Attributes (Ada_Range_Attribute) := True;
-               when Tok_Mod =>
-                  Top_Token.Attributes (Ada_Mod_Attribute) := True;
-               when Tok_New =>
-                  Top_Token.Attributes (Ada_New_Attribute) := True;
-               when Tok_Not =>
-                  Top_Token.Attributes (Ada_Not_Attribute) := True;
-               when Tok_Null =>
-                  Top_Token.Attributes (Ada_Null_Attribute) := True;
-               when Tok_Out =>
-                  Top_Token.Attributes (Ada_Out_Attribute) := True;
-               when Tok_Tagged =>
-                  Top_Token.Attributes (Ada_Tagged_Attribute) := True;
-               when Tok_In =>
-                  Top_Token.Attributes (Ada_In_Attribute) := True;
-               when Tok_Interface =>
-                  Top_Token.Attributes (Ada_Interface_Attribute) := True;
-               when Tok_Record =>
-                  if Prev_Token /= Tok_Null
-                    or else Prev_Prev_Token = Tok_Is
-                  then
-                     --  Do not take aggregates like (null record) as a record
-                     --  definition but we still want "is null record" to be
-                     --  properly reported as record type.
-                     Top_Token.Attributes (Ada_Record_Attribute) := True;
-                  end if;
-               when Tok_Renames =>
-                  Top_Token.Attributes (Ada_Renames_Attribute) := True;
-               when others =>
-                  null;
-            end case;
-         end if;
-
-         --  Computes the end of the profile
-
-         case Top_Token.Token is
-            when Tok_Procedure
-               | Tok_Function
-               | Tok_Entry =>
-
-               if Reserved = Tok_Is then
-                  Top_Token.In_Entity_Profile := False;
-               end if;
-
-            when Tok_Type =>
-               if Reserved = Tok_Record then
-                  Top_Token.In_Entity_Profile := False;
-
-                  --  type N is new O with record ...
-                  --  type N is new O with null record ...
-                  if Prev_Token = Tok_With or
-                    (Prev_Prev_Token = Tok_With and Prev_Token = Tok_Null)
-                  then
-                     Top_Token.Attributes (Ada_Tagged_Attribute) := True;
-                  end if;
-
-               --  type N is new O with private;
-               elsif Prev_Token = Tok_With and Reserved = Tok_Private then
-                  Top_Token.Attributes (Ada_Tagged_Attribute) := True;
-               end if;
-
-            when others =>
-               null;
-
-         end case;
-
-         --  Note: the order of the following conditions is important
-
-         if Reserved = Tok_Body then
-            if Top_Token.Token = Tok_Package then
-               Top_Token.Package_Declaration := False;
-            elsif Top_Token.Token = Tok_Protected then
-               Top_Token.Protected_Declaration := False;
-            end if;
-
-         elsif Prev_Token /= Tok_End
-           and then Reserved = Tok_Case
-           and then Num_Parens = 0
-         then
-            Temp.Visibility_Section := Top_Token.Visibility_Section;
-
-            --  If the case is in a type declaration (e.g. protected), then
-            --  mark itself as a type declaration so we will extract the
-            --  corresponding fields.
-            if Top_Token.Type_Declaration then
-               Temp.Type_Declaration := True;
-            end if;
-
-            --  If the case is in a record, then mark itself as a record so we
-            --  will extract the corresponding fields.
-            if Top_Token.Attributes (Ada_Record_Attribute) then
-               Temp.Attributes (Ada_Record_Attribute) := True;
-            end if;
-
-            Do_Push := True;
-
-         elsif Prev_Token /= Tok_End and then
-           ((Reserved = Tok_If and then Num_Parens = 0)
-            or else Reserved = Tok_For
-            or else Reserved = Tok_While
-            or else Reserved = Tok_Accept)
-         then
-            Do_Push := True;
-
-         elsif Reserved = Tok_Renames then
-            if not Top_Token.In_Declaration
-              and then (Top_Token.Token = Tok_Function
-                        or else Top_Token.Token = Tok_Procedure
-                        or else Top_Token.Token = Tok_Package)
-            then
-               --  Terminate current subprogram declaration, e.g:
-               --  procedure ... renames ...;
-
-               Do_Pop := Do_Pop + 1;
-            end if;
-
-         elsif Prev_Token = Tok_Is
-           and then Top_Token.Token /= Tok_Type
-           and then (Top_Token.Token not in Tok_Task | Tok_Protected
-                     or else Reserved = Tok_Separate)
-           and then Top_Token.Token /= Tok_Subtype
-           and then (Reserved = Tok_New
-                     or else Reserved = Tok_In
-                     or else Reserved = Tok_Abstract
-                     or else Reserved = Tok_Separate
-                     or else (Reserved = Tok_Null
-                              and then not In_Generic
-                              and then Top_Token.Token = Tok_Procedure))
-         then
-            In_Declaration := Subprogram_Decl;
-
-         elsif Reserved = Tok_Pragma then
-            Num_Parens := 0;
-            Do_Push := True;
-
-         elsif Reserved = Tok_Function
-           or else Reserved = Tok_Procedure
-           or else Reserved = Tok_Package
-           or else Reserved = Tok_Task
-           or else Reserved = Tok_Protected
-           or else Reserved = Tok_Entry
-         then
-            if not In_Generic
-              and then
-                (Top_Token.Token = Tok_With
-                 or else Top_Token.Token = Tok_Use)
-            then
-               --  In this case, we're probably parsing code in the process
-               --  of being written, and the use or with clause is not finished
-               --  yet. Close the construct anyway, so that the tree stays
-               --  correctly balanced.
-               Do_Pop := Do_Pop + 1;
-            end if;
-
-            if Reserved = Tok_Package then
-               Temp.Package_Declaration := True;
-
-            elsif Reserved = Tok_Protected then
-               Temp.Protected_Declaration := True;
-
-            elsif (Top_Token.Token = Tok_Type
-                   and then (Prev_Token /= Tok_Access
-                             or else Prev_Prev_Token = Tok_Is))
-              or else (Prev_Token /= Tok_Access
-                       and then Prev_Token /= Tok_Protected
-                       and then Prev_Token /= Tok_Constant)
-            then
-               --  take into account the following:
-               --  type P is access procedure;
-               --
-               --  and ignore the following cases:
-               --  type P is array () of access procedure;
-               --  procedure P (X : access procedure);
-
-               In_Declaration := Subprogram_Decl;
-               Num_Parens     := 0;
-            end if;
-
-            if Prev_Token = Tok_Overriding
-              or else (Token = Tok_Package and then Prev_Token = Tok_Private)
-              or else (Token in Tok_Procedure | Tok_Function
-                       and then Prev_Token = Tok_With)
-            then
-               --  Adjust column of subprogram to take into account possible
-               --  [not] overriding at start of the line by using the
-               --  first non blank character on the line.
-               --  Ditto for "private package xxx is" and "with procedure xx"
-
-               Tmp_Index := Start_Of_Line;
-               Skip_Blanks (Buffer, Tmp_Index);
-               Temp.Sloc.Column := Tmp_Index - Start_Of_Line + 1;
-               Temp.Sloc.Index  := Tmp_Index;
-            end if;
-
-            if Prev_Token = Tok_Access or else Prev_Token = Tok_Protected then
-               --  Ada 2005 anonymous access subprogram parameter:
-               --  procedure P (F : access [protected] procedure);
-
-               null;
-
-            elsif Top_Token.Token = Tok_Type then
-               null;
-
-            else
-               if not Top_Token.In_Declaration
-                 and then (Top_Token.Token = Tok_Function
-                           or else Top_Token.Token = Tok_Procedure)
-               then
-                  --  There was a function declaration, e.g:
-                  --
-                  --  procedure xxx ();
-                  --  procedure ...
-                  Do_Pop := Do_Pop + 1;
-               end if;
-
-               if Top_Token.Token = Tok_Generic
-                 and then Prev_Token /= Tok_With
-               then
-                  --  Pops the temporary generic token and replace it by
-                  --  the actual subprogram or package
-
-                  Temp.Sloc := Top_Token.Sloc;
-                  Temp.Attributes (Ada_Generic_Attribute) := True;
-                  Do_Pop := Do_Pop + 1;
-               end if;
-
-               Do_Push := True;
-            end if;
-
-         elsif Reserved = Tok_End
-           or else (Reserved = Tok_Elsif and then Num_Parens = 0)
-           or else (Reserved = Tok_Null
-                    and then Prev_Token = Tok_Is
-                    and then not In_Generic
-                    and then Top_Token.Token = Tok_Procedure)
-         then
-            --  unindent after end of elsif, e.g:
-            --
-            --  if xxx then
-            --     xxx
-            --  elsif xxx then
-            --     xxx
-            --  end if;
-
-            if Reserved = Tok_End then
-               case Top_Token.Token is
-                  when Tok_When | Tok_Exception =>
-                     --  End of subprogram
-                     Do_Pop := Do_Pop + 1;
-
-                  when others =>
-                     null;
-               end case;
-
-               Do_Pop := Do_Pop + 1;
-
-            elsif Top_Token.Token = Tok_Then
-              and then Reserved = Tok_Elsif
-            then
-               Top_Token.Token := Tok_If;
-            end if;
-
-         elsif Reserved = Tok_With then
-            if not In_Generic then
-               if Top_Token.Token = Tok_With
-                 or else Top_Token.Token = Tok_Use
-               then
-                  --  Incomplete clause, pops to preserve tree balance
-
-                  Do_Pop := Do_Pop + 1;
-               end if;
-
-               if Top_Token.Token = No_Token then
-                  Do_Push := True;
-               end if;
-            end if;
-
-            if Prev_Prev_Token not in Tok_Raise | Tok_Left_Paren
-            --  Exclude Tok_Raise: raise CE with "string";
-            --  Ditto for Tok_Left_Paren: X := (Parent with Field => null);
-              and then
-                ((Top_Token.Token in Tok_Type | Tok_Subtype
-                    | Tok_Function | Tok_Procedure | Tok_Colon
-                  and then Num_Parens = 0)
-                 or else (Top_Token.Token in Tok_Task | Tok_Protected
-                          and then (Prev_Prev_Token
-                                      in Tok_Protected | Tok_Task | Tok_Type
-                                    or else Prev_Token = Tok_Right_Paren))
-                 or else (Top_Token.Token = No_Token
-                          and then Prev_Token
-                            not in Tok_Semicolon | Tok_Limited |
-                                   Tok_Private | No_Token))
-            then
-               --  Recognize aspect clauses, even in the case of a partial
-               --  buffer. But do not confuse with a 'with' clause.
-
-               Tmp_Index := Current + 1;
-               Skip_Blanks (Buffer, Tmp_Index);
-
-               if not Look_For (Tmp_Index, "record")
-                 and then not Look_For (Tmp_Index, "null")
-                 and then not Look_For (Tmp_Index, "private")
-               then
-                  Aspect_Clause := True;
-                  Aspect_Clause_Sloc :=
-                    (Line_Count,
-                     Current + 1 - Start_Of_Line + 1,
-                     Current + 1);
-                  Do_Push := True;
-                  Temp.Token := Tok_Arrow;  --  Arrow is used for aspects
-                  Temp.Sloc := Aspect_Clause_Sloc;
-               end if;
-            end if;
-
-         elsif Reserved = Tok_Use and then
-           (Top_Token.Token = No_Token or else
-              (Top_Token.Token /= Tok_For
-               and then Top_Token.Token /= Tok_Record))
-         then
-            if Top_Token.Token = Tok_With
-              or else Top_Token.Token = Tok_Use
-            then
-               --  Incomplete clause, pops to preserve tree balance
-
-               Do_Pop := Do_Pop + 1;
-            end if;
-
-            Do_Push := True;
-
-         elsif     Reserved = Tok_Is
-           or else Reserved = Tok_Declare
-           or else Reserved = Tok_Begin
-           or else Reserved = Tok_Do
-           or else (Prev_Token /= Tok_Or
-                    and then Reserved = Tok_Else
-                    and then Num_Parens = 0)
-           or else (Prev_Token /= Tok_And
-                    and then Reserved = Tok_Then
-                    and then Num_Parens = 0)
-           or else (Prev_Token /= Tok_End and then Reserved = Tok_Select)
-           or else (Reserved = Tok_Or
-                    and then (Top_Token.Token = Tok_Select
-                              or else Top_Token.Token = Tok_When))
-           or else (Prev_Token /= Tok_End and then Reserved = Tok_Loop)
-           or else (Prev_Token /= Tok_End and then Prev_Token /= Tok_Null
-                    and then Reserved = Tok_Record)
-           or else ((Top_Token.Token = Tok_Exception
-                     or else Top_Token.Token = Tok_Case
-                     or else Top_Token.Token = Tok_Select)
-                    and then Reserved = Tok_When
-                    and then Prev_Token /= Tok_Exit
-                    and then Prev_Prev_Token /= Tok_Exit)
-           or else (Top_Token.In_Declaration
-                    and then Reserved = Tok_Private
-                    and then
-                      (Prev_Token /= Tok_Is
-                       or else Top_Token.Token = Tok_Package)
-                    and then Prev_Token /= Tok_Limited
-                    and then Prev_Token /= Tok_With)
-         then
-            if Reserved = Tok_Do then
-               if Top_Token.Token = Tok_Accept then
-                  Top_Token.Token := Tok_Do;
-               else
-                  --  Extended return statement:
-                  --  return X : xxx do
-                  --     ...
-                  --  end;
-
-                  Temp.Token := Tok_Return;
-                  Do_Push := True;
-               end if;
-            end if;
-
-            if Reserved = Tok_Select then
-               Do_Push := True;
-
-            elsif Top_Token.Token = Tok_If
-              and then Reserved = Tok_Then
-            then
-               --  Notify that we're past the 'if' condition
-
-               Top_Token.Token := Tok_Then;
-
-            elsif Reserved = Tok_Loop then
-               if Top_Token.Token = Tok_While
-                 or else Top_Token.Token = Tok_For
-               then
-                  --  Replace token since this is a loop construct
-                  --  but keep the original source location.
-
-                  Top_Token.Token := Tok_Loop;
-
-               else
-                  Do_Push := True;
-               end if;
-
-            elsif Reserved = Tok_Declare then
-               if Align_On_Colons then
-                  Temp.Align_Colon :=
-                    Compute_Alignment
-                      (Prec, Stop_On_Blank_Line => Stop_On_Blank_Line);
-               end if;
-
-               Temp.In_Declaration := True;
-               Adjust_Block_Column;
-               Do_Push := True;
-
-            elsif Reserved = Tok_Is then
-               case Top_Token.Token is
-                  when Tok_Case | Tok_When | Tok_Type | Tok_Subtype =>
-                     Top_Token.Type_Definition_Section := True;
-
-                  when Tok_Task | Tok_Protected =>
-                     if Top_Token.Token = Tok_Protected then
-                        Top_Token.Type_Definition_Section := True;
-                     end if;
-
-                     if Align_On_Colons then
-                        Top_Token.Align_Colon := Compute_Alignment
-                          (Prec, Stop_On_Blank_Line => Stop_On_Blank_Line);
-                     end if;
-
-                     Top_Token.In_Declaration := True;
-
-                  when others =>
-                     if Top_Token.Token = Tok_Function then
-                        Index_Next := Current + 1;
-
-                        --  Skip blanks on current line
-
-                        while Index_Next < Buffer'Last
-                          and then Buffer (Index_Next) /= ASCII.LF
-                          and then (Buffer (Index_Next) = ' '
-                                    or else Buffer (Index_Next) = ASCII.HT)
-                        loop
-                           Index_Next := Index_Next + 1;
-                        end loop;
-                     end if;
-
-                     if Align_On_Colons then
-                        Top_Token.Align_Colon := Compute_Alignment
-                          (Prec, Stop_On_Blank_Line => Stop_On_Blank_Line);
-                     end if;
-
-                     Top_Token.In_Declaration := True;
-               end case;
-
-            elsif Reserved = Tok_Begin then
-               if Top_Token.In_Declaration then
-                  Num_Spaces := Num_Spaces - Indent_Level;
-                  Top_Token.Align_Colon := 0;
-                  Top_Token.In_Declaration := False;
-
-               else
-                  Adjust_Block_Column;
-                  Do_Push := True;
-               end if;
-
-            elsif Reserved = Tok_Record then
-               --  Is "record" the first keyword on the line ?
-               --  If True, we are in a case like:
-               --     type A is
-               --        record    --  from Indent_Record
-               --           null;
-               --        end record;
-
-               if Top_Token.Token = Tok_Type then
-                  Top_Token.Attributes (Ada_Record_Attribute) := True;
-                  Temp.Attributes (Ada_Record_Attribute) := True;
-                  Temp.Type_Definition_Section :=
-                    Top_Token.Type_Definition_Section;
-               end if;
-
-               Do_Push := True;
-
-            elsif Reserved = Tok_Else
-              or else (Top_Token.Token = Tok_Select
-                       and then Reserved = Tok_Then)
-              or else (Reserved = Tok_When and then Num_Parens = 0)
-              or else Reserved = Tok_Or
-              or else Reserved = Tok_Private
-            then
-               if (Reserved = Tok_Or or else Reserved = Tok_Else)
-                 and then Top_Token.Token = Tok_When
-               then
-                  Do_Pop := Do_Pop + 1;
-                  Top_Token := Top (Tokens);
-               end if;
-
-               if Reserved = Tok_Private then
-                  Top_Token.Visibility_Section := Visibility_Private;
-               end if;
-
-               if Reserved = Tok_When then
-                  Do_Push := True;
-               end if;
-            end if;
-
-         elsif (Reserved = Tok_Type
-                and then Prev_Token /= Tok_With     --  with type
-                and then Prev_Token /= Tok_Use      --  use type
-                and then (Prev_Prev_Token /= Tok_Use or
-                            Prev_Token /= Tok_All)) --  use all type
-           or else Reserved = Tok_Subtype
-         then
-            --  Entering a type declaration/definition
-
-            if Prev_Token = Tok_Task               --  task type
-              or else Prev_Token = Tok_Protected   --  protected type
-            then
-               Top_Token.Type_Declaration := True;
-            else
-               Do_Push := True;
-            end if;
-
-            In_Declaration := Type_Decl;
-
-         elsif Reserved = Tok_Exception then
-            if Top_Token.Token /= Tok_Colon then
-               Do_Push := True;
-            end if;
-
-         elsif Reserved = Tok_Generic then
-            Temp.In_Declaration := True;
-            Do_Push := True;
-         end if;
-
-      exception
-         when Token_Stack.Stack_Empty =>
-            Syntax_Error := True;
-      end Handle_Word_Token;
-
-      ------------------------
-      -- Handle_Word_Indent --
-      ------------------------
-
-      procedure Handle_Word_Indent
-        (Reserved : Token_Type; Temp : in out Extended_Token)
-      is
-         Top_Token     : Token_Stack.Generic_Type_Access := Top (Tokens);
-         Start_Of_Line : Natural;
-         Index_Next    : Natural;
-         Tmp_Index     : Natural;
-
-      begin
-         Top_Token := Top (Tokens);
-         Start_Of_Line := Line_Start (Buffer, Prec);
-
-         --  Note: the order of the following conditions is important
-
-         if Prev_Token /= Tok_End and then Reserved = Tok_Case then
-            if Align_On_Colons
-              and then Top_Token.Token = Tok_Record
-            then
-               Temp.Align_Colon := Compute_Alignment
-                 (Prec,
-                  Stop_On_Blank_Line => Stop_On_Blank_Line);
-            end if;
-
-            Do_Indent (Prec, Line_Count, Num_Spaces);
-
-            if Prev_Token /= Tok_Left_Paren
-              and then Indent_Case_Extra = RM_Style
-            then
-               Temp.Extra_Indent := True;
-               Num_Spaces := Num_Spaces + Indent_Level;
-            end if;
-
-         elsif Reserved = Tok_Abort then
-            if Top_Token.Token = Tok_Select and then Prev_Token = Tok_Then then
-               --  Temporarily unindent if we have a 'then abort' construct,
-               --  with 'abort' on its own line, e.g:
-               --  select
-               --     Foo;
-               --  then
-               --    abort
-               --     Bar;
-
-               Do_Indent
-                 (Prec,
-                  Line_Count,
-                  Num_Spaces - Indent_Level,
-                  Continuation => True);
-            end if;
-
-         elsif Reserved = Tok_Renames then
-            if In_Declaration = Subprogram_Decl then
-               --  function A (....)
-               --    renames B;
-
-               Indent_Function_Return (Prec);
-            end if;
-
-         elsif Prev_Token = Tok_Is
-           and then not In_Generic
-           and then Top_Token.Token /= Tok_Type
-           and then (Top_Token.Token not in Tok_Task | Tok_Protected
-                     or else Reserved = Tok_Separate)
-           and then Top_Token.Token /= Tok_Subtype
-           and then (Reserved = Tok_New
-                     or else Reserved = Tok_In
-                     or else Reserved = Tok_Abstract
-                     or else Reserved = Tok_Separate
-                     or else (Reserved = Tok_Null
-                              and then not In_Generic
-                              and then Top_Token.Token = Tok_Procedure))
-         then
-            --  Handle indentation of e.g.
-            --
-            --  function Abstract_Func
-            --    return String
-            --    is abstract;
-
-            if Top_Token.Token = Tok_Function
-              and then Reserved /= Tok_New
-              and then
-                (Reserved = Tok_Abstract
-                 or else Reserved = Tok_Separate
-                 or else
-                   Start_Of_Line /= Line_Start (Buffer, Top_Token.Sloc.Index))
-            then
-               Indent_Function_Return (Prec);
-               Num_Spaces := Num_Spaces + Indent_Level;
-            end if;
-
-            --  Unindent since this is a declaration, e.g:
-            --  package ... is new ...;
-            --  function ... is abstract;
-            --  function ... is separate;
-            --  procedure ... is null;
-
-            --  Or a Gnatdist main procedure declaration :
-            --  procedure ... is in ...;
-
-            Num_Spaces := Num_Spaces - Indent_Level;
-
-            if Num_Spaces < 0 then
-               Num_Spaces := 0;
-               Syntax_Error := True;
-            end if;
-
-         elsif (Reserved in Tok_Function | Tok_Procedure | Tok_Protected
-                and then Top_Token.Token /= Tok_Type)
-           or else (Reserved in Tok_Package | Tok_Task | Tok_Entry
-                    and then Prev_Token /= Tok_Is)
-         then
-            if In_Generic and then Prev_Token not in Tok_With | Tok_Access then
-               --  unindent after a generic declaration, e.g:
-               --
-               --  generic
-               --     with procedure xxx;
-               --     with function xxx;
-               --     with package xxx;
-               --  package xxx is
-
-               Num_Spaces := Num_Spaces - Indent_Level;
-
-               if Num_Spaces < 0 then
-                  Num_Spaces := 0;
-                  Syntax_Error := True;
-               end if;
-            end if;
-
-         elsif Reserved = Tok_Return
-           and then In_Declaration = Subprogram_Decl
-         then
-            Indent_Function_Return (Prec);
-
-         elsif Reserved = Tok_End
-           or else (Reserved = Tok_Elsif and then Num_Parens = 0)
-           or else (Reserved = Tok_Null
-                    and then not In_Generic
-                    and then Prev_Token = Tok_Is
-                    and then Top_Token.Token = Tok_Procedure)
-         then
-            --  unindent after end of elsif, e.g:
-            --
-            --  if xxx then
-            --     xxx
-            --  elsif xxx then
-            --     xxx
-            --  end if;
-
-            if Reserved = Tok_End then
-               case Top_Token.Token is
-                  when Tok_When | Tok_Exception =>
-                     --  Undo additional level of indentation, as in:
-                     --     ...
-                     --  exception
-                     --     when others =>
-                     --        null;
-                     --  end;
-
-                     Num_Spaces := Num_Spaces - Indent_Level;
-
-                  when Tok_Case =>
-                     if Top_Token.Extra_Indent then
-                        Num_Spaces := Num_Spaces - Indent_Level;
-                     end if;
-
-                  when Tok_Record =>
-                     --  If the "record" keyword was on its own line
-
-                     if Top_Token.Extra_Indent then
-                        Do_Indent
-                          (Prec, Line_Count, Num_Spaces - Indent_Level);
-                        Num_Spaces := Num_Spaces - Indent_Record;
-                     end if;
-
-                  when others =>
-                     null;
-               end case;
-            end if;
-
-            Num_Spaces := Num_Spaces - Indent_Level;
-
-            if Num_Spaces < 0 then
-               Num_Spaces   := 0;
-               Syntax_Error := True;
-            end if;
-
-         elsif    (Reserved = Tok_Is
-                   and then Num_Parens = 0
-                   and then not In_Generic)
-           or else Reserved in Tok_Declare | Tok_Begin | Tok_Do
-           or else (Prev_Token /= Tok_Or
-                    and then Reserved = Tok_Else
-                    and then Num_Parens = 0)
-           or else (Prev_Token /= Tok_And
-                    and then Reserved = Tok_Then
-                    and then Num_Parens = 0)
-           or else (Prev_Token /= Tok_End and then Reserved = Tok_Select)
-           or else (Reserved = Tok_Or
-                    and then (Top_Token.Token = Tok_Select
-                              or else Top_Token.Token = Tok_When))
-           or else (Prev_Token /= Tok_End and then Reserved = Tok_Loop)
-           or else (Prev_Token /= Tok_End and then Prev_Token /= Tok_Null
-                    and then Reserved = Tok_Record)
-           or else ((Top_Token.Token = Tok_Exception
-                     or else Top_Token.Token = Tok_Case
-                     or else Top_Token.Token = Tok_Select)
-                    and then Reserved = Tok_When
-                    and then Prev_Token /= Tok_Exit
-                    and then Prev_Prev_Token /= Tok_Exit)
-           or else (Top_Token.In_Declaration
-                    and then Reserved = Tok_Private
-                    and then
-                      (Prev_Token /= Tok_Is
-                       or else Top_Token.Token = Tok_Package)
-                    and then Prev_Token /= Tok_Limited
-                    and then Prev_Token /= Tok_With)
-         then
-            --  unindent for this reserved word, and then indent again, e.g:
-            --
-            --  procedure xxx is
-            --     ...
-            --  begin    <--
-            --     ...
-
-            if Reserved = Tok_Declare then
-               if Align_On_Colons then
-                  Temp.Align_Colon :=
-                    Compute_Alignment
-                      (Prec, Stop_On_Blank_Line => Stop_On_Blank_Line);
-               end if;
-
-               if Prev_Token = Tok_Colon then
-                  --  Adjust status column of declare block to take into
-                  --  account a label at start of the line by using the first
-                  --  non blank character on the line.
-
-                  Tmp_Index := Start_Of_Line;
-                  Skip_Blanks (Buffer, Tmp_Index);
-                  Temp.Sloc.Column := Tmp_Index - Start_Of_Line + 1;
-                  Temp.Sloc.Index  := Tmp_Index;
-               end if;
-
-            elsif Reserved = Tok_Is then
-               if not In_Generic then
-                  case Top_Token.Token is
-                     when Tok_Case | Tok_When | Tok_Type | Tok_Subtype =>
-                        null;
-
-                     when Tok_Task | Tok_Protected =>
-                        if Align_On_Colons then
-                           Top_Token.Align_Colon := Compute_Alignment
-                             (Prec, Stop_On_Blank_Line => Stop_On_Blank_Line);
-                        end if;
-
-                     when others =>
-                        if Top_Token.Token = Tok_Function then
-                           Index_Next := Current + 1;
-
-                           --  Skip blanks on current line
-
-                           while Index_Next < Buffer'Last
-                             and then Buffer (Index_Next) /= ASCII.LF
-                             and then (Buffer (Index_Next) = ' '
-                                       or else Buffer (Index_Next) = ASCII.HT)
-                           loop
-                              Index_Next := Index_Next + 1;
-                           end loop;
-                        end if;
-
-                        if Align_On_Colons then
-                           Top_Token.Align_Colon := Compute_Alignment
-                             (Prec, Stop_On_Blank_Line => Stop_On_Blank_Line);
-                        end if;
-                  end case;
-               end if;
-
-            elsif Reserved = Tok_Begin then
-               if Top_Token.In_Declaration then
-                  Num_Spaces := Num_Spaces - Indent_Level;
-                  Top_Token.Align_Colon := 0;
-                  Top_Token.In_Declaration := False;
-               end if;
-
-            elsif Reserved = Tok_Record then
-               --  Is "record" the first keyword on the line ?
-               --  If True, we are in a case like:
-               --     type A is
-               --        record    --  from Indent_Record
-               --           null;
-               --        end record;
-
-               if not Indent_Done then
-                  Temp.Extra_Indent := True;
-                  Num_Spaces := Num_Spaces + Indent_Record;
-                  Do_Indent (Prec, Line_Count, Num_Spaces);
-               end if;
-
-               if Top_Token.Token = Tok_Type then
-                  Num_Spaces := Num_Spaces + Indent_Level;
-
-                  if Align_On_Colons then
-                     Temp.Align_Colon := Compute_Alignment
-                       (Prec, Stop_On_Blank_Line => Stop_On_Blank_Line);
-                  end if;
-               end if;
-
-            elsif Reserved = Tok_Else
-              or else (Top_Token.Token = Tok_Select
-                       and then Reserved = Tok_Then)
-              or else (Reserved = Tok_When and then Num_Parens = 0)
-              or else Reserved = Tok_Or
-              or else Reserved = Tok_Private
-            then
-               if (Reserved = Tok_Or or else Reserved = Tok_Else)
-                 and then Top_Token.Token = Tok_When
-                 and then (Next (Tokens) = null
-                           or else Next (Tokens).Token /= Tok_Case)
-               then
-                  Num_Spaces := Num_Spaces - Indent_Level;
-               end if;
-
-               if Reserved /= Tok_When
-                 or else Top_Token.Token /= Tok_Select
-               then
-                  Num_Spaces := Num_Spaces - Indent_Level;
-               end if;
-
-               if Reserved = Tok_When then
-                  if Top_Token.Token = Tok_Case then
-                     if Indent_Case_Extra = Automatic
-                       and then not Top_Token.Extra_Indent
-                       and then Prec - Start_Of_Line > Num_Spaces
-                     then
-                        Top_Token.Extra_Indent := True;
-                        Num_Spaces := Num_Spaces + Indent_Level;
-                     end if;
-                  end if;
-               end if;
-            end if;
-
-            if Num_Spaces < 0 then
-               Num_Spaces   := 0;
-               Syntax_Error := True;
-            end if;
-
-            if Top_Token.Token /= Tok_Type
-              and then Top_Token.Token /= Tok_Subtype
-              and then (Token /= Tok_Is
-                        or else In_Generic
-                        or else Top_Token.Token /= Tok_Function
-                        or else not
-                          (Look_For (Index_Next, "abstract")
-                           or else Look_For (Index_Next, "separate")))
-               --  'is abstract|separate' will be indented when handling
-               --  'abstract|separate' for functions
-            then
-               Do_Indent (Prec, Line_Count, Num_Spaces);
-               Num_Spaces := Num_Spaces + Indent_Level;
-            end if;
-
-         elsif Reserved = Tok_Or
-           or else Reserved = Tok_And
-           or else Reserved = Tok_Xor
-         then
-            --  "and then", "or else", "and", "or" and "xor" should get an
-            --  extra indentation on line start, e.g:
-            --  if ...
-            --    and then ...
-
-            if Top (Indents).Level = None then
-               if Continuation_Val > 0 then
-                  if Top (Tokens).Colon_Col = 0 then
-                     Continuation_Val := Continuation_Val - Indent_Continue;
-                  else
-                     Continuation_Val := Continuation_Val + Indent_Continue;
-                  end if;
-               end if;
-
-               Do_Indent (Prec, Line_Count, Num_Spaces, Continuation => True);
-            else
-               Do_Indent (Prec, Line_Count, Num_Spaces);
-            end if;
-
-         elsif Reserved = Tok_Generic then
-            --  Indent before a generic entity, e.g:
-            --
-            --  generic
-            --     type ...;
-
-            Do_Indent (Prec, Line_Count, Num_Spaces);
-            Num_Spaces := Num_Spaces + Indent_Level;
-
-         elsif Reserved = Tok_Exception then
-            if Top_Token.Token /= Tok_Colon then
-               Num_Spaces := Num_Spaces - Indent_Level;
-               Do_Indent (Prec, Line_Count, Num_Spaces);
-               Num_Spaces := Num_Spaces + 2 * Indent_Level;
-            end if;
-         end if;
-
-      exception
-         when Token_Stack.Stack_Empty =>
-            Syntax_Error := True;
-      end Handle_Word_Indent;
-
-      ---------------
-      -- Next_Word --
-      ---------------
-
-      procedure Next_Word
-        (P           : in out Natural;
-         L           : in out Natural;
-         Terminated  : out Boolean;
-         End_Reached : out Boolean)
-      is
-         Comma           : String := ", ";
-         Spaces          : String := "    ";
-         End_Of_Line     : Natural;
-         Start_Of_Line   : Natural;
-         Long            : Natural;
-         First           : Natural;
-         Last            : Natural;
-         Offs            : Natural;
-         Align           : Natural;
-         Adjust          : Natural;
-         Insert_Spaces   : Boolean;
-         Char            : Character;
-         Prev_Prev_Token : Token_Type := No_Token;
-         Prev3_Token     : Token_Type;
-         Local_Top_Token : Token_Stack.Generic_Type_Access;
-         Tmp             : Boolean;
-         Token_Found     : Boolean;
-         Recompute_Align : Boolean;
-
-         procedure Close_Parenthesis;
-         --  Current buffer contents is a closed parenthesis,
-         --  reset stacks and states accordingly.
-
-         procedure Handle_Arrow;
-         --  Current buffer contents is an arrow colon, handle it.
-         --  In particular, align arrows in statements.
-
-         procedure Handle_Colon;
-         --  Current buffer contents is a colon, handle it.
-         --  In particular, align colons in declarations.
-
-         procedure Handle_Two_Chars (Second_Char : Character);
-         --  Handle a two char operator, whose second char is Second_Char
-
-         procedure Preprocessor_Directive;
-         --  Handle preprocessor directive.
-         --  Assume that Buffer (P) = '#'
-
-         procedure Skip_Blank_Lines;
-         --  Skip empty lines
-
-         procedure Skip_Comments;
-         --  Skip comment & blank lines
-
-         procedure Pop_And_Set_Local (Stack : in out Token_Stack.Simple_Stack);
-         --  Pops the last element of the stack and set Local_Top_Token
-         --  to the top element, null if the stack is empty.
-
-         -----------------------
-         -- Close_Parenthesis --
-         -----------------------
-
-         procedure Close_Parenthesis is
-         begin
-            if not Is_Empty (Paren_Stack) then
-               Pop (Paren_Stack);
-            end if;
-
-            if Is_Empty (Indents) or else Top (Indents).Level = None then
-               --  Syntax error
-               null;
-
-            else
-               if not Indent_Done then
-                  --  Adjust indentation level for closing parenthesis at the
-                  --  beginning of a line, e.g:
-                  --
-                  --    (x,
-                  --     y
-                  --    );  <-
-
-                  Top (Indents).Level := Top (Indents).Level - 1;
-                  Do_Indent (P, L, Num_Spaces);
-                  Continuation_Val := Top (Indents).Continuation_Val;
-               end if;
-
-               Num_Parens := Num_Parens - 1;
-               Pop (Indents);
-               Local_Top_Token := Top (Tokens);
-
-               if Num_Parens = 0 then
-                  Is_Parameter := False;
-                  Is_Discriminant := False;
-                  Right_Assignment := False;
-                  Paren_In_Middle := False;
-
-                  if Local_Top_Token.Token in Token_Class_Declk
-                    and then Local_Top_Token.Profile_End = 0
-                    and then In_Declaration = Subprogram_Decl
-                  then
-                     Local_Top_Token.Profile_End := P;
-                     Local_Top_Token.Align_Colon := 0;
-                  end if;
-               end if;
-            end if;
-         end Close_Parenthesis;
-
-         ------------------
-         -- Handle_Colon --
-         ------------------
-
-         procedure Handle_Colon is
-            Align_Colon  : Natural := 0;
-            Non_Blank    : Natural;
-            Offset_Align : Natural;
-            First_Paren  : Natural;
-            Colon_Token  : Token_Stack.Generic_Type_Access;
-            Char         : Character;
-
-         begin
-            Prev_Token := Tok_Colon;
-            Non_Blank := Start_Of_Line;
-            Is_Parameter := False;
-            Is_Discriminant := False;
-
-            if Format then
-               Skip_Blanks (Buffer, Non_Blank);
-            end if;
-
-            if Local_Top_Token.In_Declaration
-              and then Local_Top_Token.Token = Tok_Identifier
-            then
-               Pop_And_Set_Local (Tokens);
-
-               declare
-                  Val : Extended_Token;
-               begin
-                  --  Create a dummy token to separate variables
-                  --  declaration from their type.
-
-                  Val.Token := Tok_Colon;
-
-                  case In_Declaration is
-                     when Subprogram_Decl =>
-                        Val.Variable_Kind := Parameter_Kind;
-
-                     when Type_Decl =>
-                        Val.Variable_Kind := Discriminant_Kind;
-
-                     when others =>
-                        null;
-
-                  end case;
-
-                  if Align_Decl_On_Colon then
-                     Val.Colon_Col := P - Non_Blank;
-                  end if;
-
-                  Push (Tokens, Val);
-                  Colon_Token := Top (Tokens);
-               end;
-            end if;
-
-            if P > Buffer'First
-              and then P < Buffer'Last
-              and then Buffer (Prev_Char (P)) in '0' .. '9'
-            then
-               Char := Buffer (Next_Char (P));
-
-               if Char in '0' .. '9' or else Char = ';' then
-                  --  Special case 16:12: obsolete format (equivalent to
-                  --  16#12#), e.g:
-                  --     X : Integer := 16:12:;
-
-                  Insert_Spaces := False;
-               end if;
-            end if;
-
-            --  Auto align colons in declarations (parameters, variables, ...)
-
-            if Local_Top_Token.Align_Colon = 0
-              or else Num_Parens > 1
-            then
-               return;
-            end if;
-
-            Align_Colon := Local_Top_Token.Align_Colon;
-
-            if Format_Operators then
-               if Buffer (Next_Char (P)) = ' '
-                 or else Last - 1 = End_Of_Line
-               then
-                  Long := 2;
-               else
-                  Long := 3;
-               end if;
-
-               if Buffer (Prev_Char (P)) = ' ' then
-                  Offs := 2;
-                  Long := Long - 1;
-               else
-                  Align_Colon := Align_Colon - 1;
-               end if;
-            else
-               Offs := 2;
-               Long := 1;
-            end if;
-
-            if Num_Parens /= 0 then
-               --  Handle properly alignment of first parameter in the
-               --  following case:
-               --
-               --  procedure F (X : Integer;    <--
-               --               Foo : Integer);
-
-               First_Paren := Non_Blank;
-
-               while First_Paren < P
-                 and then Buffer (First_Paren) /= '('
-               loop
-                  First_Paren := First_Paren + 1;
-               end loop;
-
-               if Buffer (First_Paren) = '(' then
-                  Align_Colon := Align_Colon + First_Paren - Non_Blank + 1;
-               end if;
-            end if;
-
-            --  In case Align_Colon is too small, avoid truncating non blank
-            --  characters by never using a negative offset.
-
-            Offset_Align :=
-              Integer'Max (0, Align_Colon - (P - Non_Blank + 1));
-
-            if Align_Decl_On_Colon
-              and then Colon_Token /= null
-            then
-               Colon_Token.Colon_Col := Colon_Token.Colon_Col + Offset_Align;
-            end if;
-
-            Replace_Text
-              (First, Last, L,
-               (1 .. Offset_Align => ' ')
-                & Spaces (Offs .. Offs + Long - 1));
-            Insert_Spaces := False;
-         end Handle_Colon;
-
-         ------------------
-         -- Handle_Arrow --
-         ------------------
-
-         procedure Handle_Arrow is
-            Align_Arrow  : Natural := Top (Indents).Align_Arrow;
-            Non_Blank    : Natural;
-            Offset_Align : Natural;
-            J            : Natural;
-            First_Paren  : Natural;
-            Next_Tok     : Token_Stack.Generic_Type_Access;
-
-         begin
-            if Num_Parens > 0
-              and then Analyze_Ada_Source.Prev_Prev_Token
-                         in Tok_When | Tok_Dot_Dot
-            then
-               --  Handle case expression:
-               --     (case X is
-               --         when 1
-               --            =>
-
-               Compute_Indentation
-                 (Tok_Arrow, Prev_Token, Prev_Prev_Token,
-                  P, L, Num_Spaces);
-            else
-               Do_Indent (P, L, Num_Spaces);
-            end if;
-
-            Prev_Token := Tok_Arrow;
-            Next_Tok := Next (Tokens);
-
-            if (Local_Top_Token.Token = Tok_When
-                and then (Next_Tok = null
-                          or else Next_Tok.Token /= Tok_Select))
-              or else Local_Top_Token.Token = Tok_For
-            then
-               Pop_And_Set_Local (Tokens);
-            end if;
-
-            Handle_Two_Chars ('>');
-
-            if Align_Arrow = 0 then
-               return;
-            end if;
-
-            if not Is_Blank (Buffer (P - 2)) then
-               Align_Arrow := Align_Arrow - 1;
-            end if;
-
-            Non_Blank := Start_Of_Line;
-            Skip_Blanks (Buffer, Non_Blank);
-
-            --  Handle properly alignment of first parameter in the
-            --  following case:
-            --
-            --  Foo (X => 1,    <--
-            --       Foo => 2);
-
-            First_Paren := 0;
-            J := Non_Blank;
-
-            while J < P - 1 loop
-               if Buffer (J) = '('
-                 and then (Buffer (J - 1) /= '''
-                           or else Buffer (J + 1) /= ''')
-                 and then First_Paren = 0
-               then
-                  First_Paren := J;
-               end if;
-
-               if Buffer (J) = ')'
-                 and then (Buffer (J - 1) /= '''
-                           or else Buffer (J + 1) /= ''')
-               then
-                  First_Paren := 0;
-               end if;
-
-               J := J + 1;
-            end loop;
-
-            if First_Paren /= 0 and then Buffer (First_Paren) = '(' then
-               Align_Arrow := Align_Arrow + First_Paren - Non_Blank + 1;
-            end if;
-
-            --  In case Align_Arrow is too small, avoid truncating non blank
-            --  characters by never using a negative offset.
-
-            Offset_Align := Integer'Max (0, Align_Arrow - (P - Non_Blank + 1));
-
-            Replace_Text
-              (First, Last, L,
-               (1 .. Offset_Align => ' ')
-                & Spaces (Offs .. Offs + Long - 1));
-            Insert_Spaces := False;
-         end Handle_Arrow;
-
-         ----------------------
-         -- Handle_Two_Chars --
-         ----------------------
-
-         procedure Handle_Two_Chars (Second_Char : Character) is
-            Prev_Tmp : constant Integer := Prev_Char (P);
-         begin
-            Last := P + 2;
-
-            if Prev_Tmp < Buffer'First
-              or else Is_Blank (Buffer (Prev_Tmp))
-            then
-               Offs := 2;
-               Long := 2;
-
-            else
-               Long := 3;
-            end if;
-
-            P := Next_Char (P);
-
-            if P < Buffer_Last
-              and then not Is_Blank (Buffer (Next_Char (P)))
-            then
-               Long := Long + 1;
-            end if;
-
-            Spaces (3) := Second_Char;
-         end Handle_Two_Chars;
-
-         ----------------------
-         -- Skip_Blank_Lines --
-         ----------------------
-
-         procedure Skip_Blank_Lines is
-         begin
-            if P > Buffer_Last
-              or else (Buffer (P) /= ASCII.LF and then Buffer (P) /= ASCII.CR)
-            then
-               return;
-            end if;
-
-            while P < Buffer_Last and then
-              (Buffer (P) = ASCII.LF or else Buffer (P) = ASCII.CR)
-            loop
-               if Buffer (P) = ASCII.LF then
-                  New_Line (L);
-                  Indent_Done := False;
-               end if;
-
-               P := Next_Char (P);
-            end loop;
-
-            if P < Buffer_Last then
-               Start_Of_Line := P;
-               End_Of_Line   := Line_End (Buffer, Start_Of_Line);
-            end if;
-         end Skip_Blank_Lines;
-
-         -------------------
-         -- Skip_Comments --
-         -------------------
-
-         procedure Skip_Comments is
-            Prev_Start_Line : Natural;
-            Last            : Natural;
-            Ref_Indent      : Natural;
-            Success         : Boolean;
-            Entity          : Language_Entity;
-            First_Indent    : Boolean := True;
-
-         begin
-            Ref_Indent := Integer'Max (Num_Spaces, 0);
-
-            if not Indent_Done
-              and then Stick_Comments
-              and then (Prev_Token = Tok_Is or else Prev_Token = Tok_Record)
-              and then Start_Of_Line > Buffer'First + 2
-              and then Buffer (Start_Of_Line - 2) /= ASCII.LF
-            then
-               Ref_Indent := Integer'Max (Ref_Indent - Indent_Level, 0);
-            end if;
-
-            while P < Buffer_Last
-              and then Buffer (P) = '-'
-              and then Buffer (P + 1) = '-'
-            loop
-               Prev_Start_Line := Start_Of_Line;
-               Prev_Line := L;
-               First := P;
-               Comments_Skipped := True;
-
-               --  If we do not indent here, then automatic indentation
-               --  won't work for comments right after 'is' and 'begin',
-               --  e.g:
-               --  procedure Foo is
-               --  begin
-               --     --  comment
-
-               if Indent_Comments then
-                  if First_Indent
-                    and then not Indent_Done
-                    and then
-                      ((Prev_Token in Reserved_Token_Type
-                        and then Prev_Token not in Token_Class_No_Cont)
-                       or else (Prev_Token = Tok_Right_Paren
-                                and then Top (Tokens).Token /= No_Token)
-                       or else (Num_Parens > 0 and then Continuation_Val /= 0))
-                  then
-                     --  Add simple handling of comment and continuation lines
-
-                     if Num_Parens > 0 then
-                        Continuation_Val := Continuation_Val - Indent_Continue;
-                     end if;
-
-                     Do_Indent (P, L, Ref_Indent, Continuation => True);
-                     Ref_Indent :=
-                             Integer'Max (Ref_Indent + Continuation_Val, 0);
-                     Continuation_Val := 0;
-                  else
-                     Do_Indent (P, L, Ref_Indent);
-                  end if;
-
-                  First_Indent := False;
-               end if;
-
-               --  Keep track of the indentation of the first comment line,
-               --  in case we're doing incremental reformatting: in this case,
-               --  we want to follow the indentation (possibly manual) of this
-               --  first line.
-
-               if Ref_Indent = Num_Spaces
-                 and then To /= 0
-                 and then L not in From .. To
-               then
-                  Ref_Indent :=
-                          Integer'Max (P - Start_Of_Line - Indent_Offset, 0);
-               end if;
-
-               Next_Line (Buffer, P + 1, P, Success);
-               Last := P;
-
-               if Success then
-                  New_Line (L);
-                  Last := Prev_Char (Last);
-                  Indent_Done := False;
-               end if;
-
-               loop
-                  --  Skip blank lines
-                  --  ??? need to handle ASCII.CR as well, although we now
-                  --  only use LF separators internally in GPS.
-
-                  while P < Buffer_Last and then Buffer (P) = ASCII.LF loop
-                     Ref_Indent :=  Integer'Max (Num_Spaces, 0);
-                     New_Line (L);
-                     P := P + 1;
-                  end loop;
-
-                  Start_Of_Line := P;
-
-                  if P /= Buffer_Last then
-                     while Buffer (P) = ' ' or else Buffer (P) = ASCII.HT loop
-                        P := P + 1;
-
-                        if P = Buffer_Last then
-                           exit;
-                        end if;
-                     end loop;
-                  end if;
-
-                  exit when P = Buffer_Last or else Buffer (P) /= ASCII.LF;
-               end loop;
-
-               End_Of_Line := Line_End (Buffer, P);
-               Padding     := 0;
-
-               if Indent_Comments and then Buffer (P) = ASCII.LF then
-                  --  Indent last buffer line before exiting, to position
-                  --  the cursor at the right location
-
-                  pragma Assert (P = Buffer_Last);
-                  Do_Indent (P, L, Ref_Indent);
-               end if;
-
-               if Callback /= null then
-                  if First + 2 <= Buffer_Last
-                    and then Buffer (First + 2) = '#'
-                  then
-                     Entity := Annotated_Comment_Text;
-                  else
-                     Entity := Comment_Text;
-                  end if;
-
-                  if Entity = Annotated_Comment_Text
-                    and then Replace = null
-                  then
-                     --  Recognize and handle SPARK reserved words when parsing
-                     --  constructs.
-
-                     declare
-                        Prev_Sloc : Source_Location;
-                        Line      : constant Natural := Prev_Line - 1;
-                        Col       : constant Natural :=
-                                     First + 2 - Prev_Start_Line + 1;
-
-                        function Is_SPARK_Keyword (S : String) return Boolean;
-                        --  Callback for Analyze_Ada_Source to recognize SPARK
-                        --  keywords.
-
-                        function Local_Callback
-                          (Entity         : Language_Entity;
-                           Sloc_Start     : Source_Location;
-                           Sloc_End       : Source_Location;
-                           Partial_Entity : Boolean) return Boolean;
-                        --  Wrapper around Callback
-
-                        function Adjust
-                          (Loc : Source_Location) return Source_Location;
-                        --  Adjust Loc taking Line, Col and Offset into account
-
-                        ----------------------
-                        -- Is_SPARK_Keyword --
-                        ----------------------
-
-                        function Is_SPARK_Keyword
-                          (S : String) return Boolean is
-                        begin
-                           return Match (SPARK_Keywords, S);
-                        end Is_SPARK_Keyword;
-
-                        ------------
-                        -- Adjust --
-                        ------------
-
-                        function Adjust
-                          (Loc : Source_Location) return Source_Location is
-                        begin
-                           return
-                             (Loc.Line + Line, Loc.Column + Col, Loc.Index);
-                        end Adjust;
-
-                        --------------------
-                        -- Local_Callback --
-                        --------------------
-
-                        function Local_Callback
-                          (Entity         : Language_Entity;
-                           Sloc_Start     : Source_Location;
-                           Sloc_End       : Source_Location;
-                           Partial_Entity : Boolean) return Boolean
-                        is
-                           Ignore : Boolean;
-                           pragma Unreferenced (Ignore);
-                           Sloc1  : constant Source_Location :=
-                                      Adjust (Sloc_Start);
-                           Sloc2  : constant Source_Location :=
-                                      Adjust (Sloc_End);
-
-                        begin
-                           if Entity = Keyword_Text
-                             and then Is_SPARK_Keyword (Buffer
-                               (Sloc_Start.Index .. Sloc_End.Index))
-                           then
-                              Ignore := Callback
-                                (Annotated_Comment_Text,
-                                 Prev_Sloc,
-                                 (Sloc1.Line,
-                                  Sloc1.Column - 1,
-                                  Sloc1.Index - 1),
-                                 Partial_Entity);
-                              Prev_Sloc := (Sloc2.Line, Sloc2.Column + 1,
-                                            Sloc2.Index + 1);
-
-                              return Callback
-                                (Annotated_Keyword_Text,
-                                 Sloc1, Sloc2, Partial_Entity);
-
-                           else
-                              return False;
-                           end if;
-                        end Local_Callback;
-
-                     begin
-                        Prev_Sloc :=
-                          (Prev_Line, First - Prev_Start_Line + 1, First);
-
-                        --  Call Analyze_Ada_Source recursively on the SPARK
-                        --  annotations to highlight keywords.
-
-                        Analyze_Ada_Source
-                          (Buffer (First + 3 .. Last - 1),
-                           Symbols,
-                           Indent_Params => Indent_Params,
-                           Format        => Format,
-                           Replace       => null,
-                           Constructs    => null,
-                           Callback      => Local_Callback'Unrestricted_Access,
-                           Indent_Offset => Indent_Offset,
-                           Case_Exceptions     => Case_Exceptions,
-                           Is_Optional_Keyword => Is_SPARK_Keyword'Access);
-
-                        if Prev_Sloc.Index <= Last then
-                           if Callback
-                                (Entity,
-                                 Prev_Sloc,
-                                 (Prev_Line, Last - Prev_Start_Line + 1, Last),
-                                 False)
-                           then
-                              Terminated := True;
-                              return;
-                           end if;
-                        end if;
-                     end;
-
-                  else
-                     if Call_Callback
-                         (Entity,
-                          (Prev_Line, First - Prev_Start_Line + 1, First),
-                          (Prev_Line, Last - Prev_Start_Line + 1, Last),
-                          False)
-                     then
-                        Terminated := True;
-                        return;
-                     end if;
-                  end if;
-               end if;
-
-               if P = Buffer_Last then
-                  --  In this case, the comment goes until the end of the
-                  --  buffer. There's nothing more to be analyzed, so
-                  --  put P beyond the last analyzed element.
-
-                  P := P + 1;
-               end if;
-            end loop;
-
-            if P > Buffer_Last then
-               End_Reached := True;
-            end if;
-         end Skip_Comments;
-
-         ----------------------------
-         -- Preprocessor_Directive --
-         ----------------------------
-
-         procedure Preprocessor_Directive is
-         begin
-            --  Skip line
-
-            while P < Buffer'Last and then Buffer (P + 1) /= ASCII.LF loop
-               P := P + 1;
-            end loop;
-
-            --  Mark this line as indented, so that the current indentation is
-            --  kept.
-
-            Indent_Done := True;
-         end Preprocessor_Directive;
-
-         -----------------------
-         -- Pop_And_Set_Local --
-         -----------------------
-
-         procedure Pop_And_Set_Local
-           (Stack : in out Token_Stack.Simple_Stack) is
-         begin
-            Pop (Stack);
-
-            if not Is_Empty (Stack) then
-               Local_Top_Token := Top (Stack);
-            else
-               Local_Top_Token := null;
-            end if;
-         end Pop_And_Set_Local;
-
-      begin  --  Next_Word
-         Start_Of_Line := Line_Start (Buffer, P);
-         End_Of_Line   := Line_End (Buffer, Start_Of_Line);
-         Terminated    := False;
-         End_Reached   := False;
-
-         loop
-            declare
-               L1, L2 : Natural;
-            begin
-               L1 := L;
-               Skip_Blank_Lines;
-               Skip_Comments;
-               L2 := L;
-               --  If we have blank lines and/or comment line we need to
-               --  recompute the alignment for the next block of code.
-               Recompute_Align := L2 > L1 + 1;
-            end;
-
-            if (End_Reached and then Buffer (Buffer_Last) /= ASCII.LF)
-              or else Terminated
-            then
-               return;
-            end if;
-
-            exit when P > Buffer_Last
-              or else Is_Entity_Letter
-                (UTF8_Get_Char (Buffer (P .. Buffer_Last)));
-
-            --  WARNING: any call to Pop (Token) during the case statement
-            --  below should be followed by a recomputation of Top_Token.
-            --  See e.g. Handle_Arrow where this is done.
-            --  Only if Top_Token is not accessed further down this procedure
-            --  can the recomputation be omitted.
-
-            Local_Top_Token := Top (Tokens);
-
-            if Align_On_Colons and then Recompute_Align then
-               Local_Top_Token.Align_Colon := Compute_Alignment
-                 (P,
-                  Stop_On_Blank_Line => True,
-                  Skip_First_Line    => False);
-            end if;
-
-            Prev3_Token := Prev_Prev_Token;
-            Prev_Prev_Token := Prev_Token;
-            Token_Found := True;
-
-            case Buffer (P) is
-               when '#' =>
-                  First := P;
-                  Prev_Token := Tok_Pound;
-
-                  if (P = Buffer'First
-                      or else not Is_Alphanumeric (Buffer (P - 1)))
-                    and then P < Buffer'Last
-                    and then (Is_Letter (Buffer (P + 1))
-                              or else Buffer (P + 1) = ' ')
-                  then
-                     Preprocessor_Directive;
-                  end if;
-
-               when '[' =>
-                  First := P;
-                  Prev_Token := Tok_Left_Square_Bracket;
-
-               when ']' =>
-                  First := P;
-                  Prev_Token := Tok_Right_Square_Bracket;
-
-               when '(' =>
-                  First := P;
-                  Prev_Token := Tok_Left_Paren;
-
-                  if Num_Parens = 0 then
-                     if In_Declaration = Subprogram_Decl
-                       and then
-                         (Top_Token = null
-                          or else not Top_Token.Attributes (Ada_New_Attribute))
-                     then
-                        Is_Parameter := True;
-                     elsif In_Declaration = Type_Decl then
-                        Is_Discriminant := True;
-                     elsif Prev_Prev_Token = Tok_Is
-                       and then Local_Top_Token.Token = Tok_Function
-                     then
-                        --  This is an expression function so we won't have
-                        --  and 'end function', unindent accordingly.
-
-                        Num_Spaces := Num_Spaces - Indent_Level;
-
-                        --  ??? The code below is not quite right: ideally we
-                        --  want to register the end of the expression function
-                        --  at the semicolon.
-
-                        Pop_And_Set_Local (Tokens);
-                     end if;
-                  end if;
-
-                  if not Is_Empty (Paren_Stack) then
-                     Push (Paren_Stack, Top (Paren_Stack).all);
-                  elsif Local_Top_Token.Token = Tok_Type then
-                     Push (Paren_Stack, Type_Declaration);
-                  elsif Prev_Prev_Token = Tok_Return then
-                     Push (Paren_Stack, Aggregate);
-                  elsif Prev_Prev_Token in Reserved_Token_Type then
-                     Push (Paren_Stack, Conditional);
-                  elsif Prev_Prev_Token = Tok_Identifier then
-                     Push (Paren_Stack, Function_Call);
-                  else
-                     Push (Paren_Stack, Aggregate);
-                  end if;
-
-                  if Continuation_Val > Indent_Continue
-                    and then Top (Indents).Level /= None
-                  then
-                     Continuation_Val := 0;
-                  end if;
-
-                  if P > Buffer'First then
-                     Char := Buffer (Prev_Char (P));
-                  else
-                     Char := ' ';
-                  end if;
-
-                  if Indent_Done then
-                     Adjust := Indent_Continue + Continuation_Val;
-                     Paren_In_Middle := True;
-
-                     --  If Prev_Prev_Token is an operator, it means that
-                     --  spaces have already been inserted.
-
-                     if Format_Operators
-                       and then not Is_Blank (Char)
-                       and then Char /= '('
-                       and then Char /= '''
-                       and then not Is_Extended_Operator (Prev_Prev_Token)
-                     then
-                        Spaces (2) := Buffer (P);
-                        Replace_Text (P, P + 1, L, Spaces (1 .. 2));
-                     end if;
-
-                  else
-                     --  Indent with extra spaces if the '(' is the first
-                     --  non blank character on the line
-
-                     if Prev_Prev_Token = Tok_Comma then
-                        Adjust := 1;
-                     else
-                        Adjust := Indent_Continue + 1;
-                     end if;
-
-                     if Prev_Prev_Token = Tok_Comma
-                       or else Prev_Prev_Token = Tok_Ampersand
-                     then
-                        Do_Indent (P, L, Num_Spaces);
-                     else
-                        if Prev_Prev_Token = Tok_Colon_Equal
-                          and then Local_Top_Token.Colon_Col /= 0
-                          and then Continuation_Val = 0
-                        then
-                           Continuation_Val :=
-                             Top (Tokens).Colon_Col + 4 - Indent_Continue;
-                        end if;
-
-                        Adjust := Adjust + Continuation_Val;
-                        Tmp := Paren_In_Middle;
-                        Do_Indent
-                          (P, L, Num_Spaces,
-                           Continuation =>
-                             Prev_Prev_Token = Tok_Apostrophe
-                             or else Prev_Prev_Token = Tok_Arrow
-                             or else not Paren_In_Middle
-                             or else Prev_Prev_Token in Reserved_Token_Type);
-                        Paren_In_Middle := Tmp;
-                     end if;
-                  end if;
-
-                  Num_Parens := Num_Parens + 1;
-                  Align      := 0;
-
-                  if Num_Parens = 1
-                    and then Local_Top_Token.Token in Token_Class_Declk
-                    and then Local_Top_Token.Profile_Start = 0
-                    and then not Local_Top_Token.Attributes (Ada_New_Attribute)
-                  then
-                     if In_Declaration = Subprogram_Decl then
-                        Local_Top_Token.Profile_Start := P;
-                     end if;
-
-                     if Align_On_Colons then
-                        Local_Top_Token.Align_Colon := Compute_Alignment
-                          (P + 1, Skip_First_Line => False);
-                     end if;
-
-                  else
-                     if Align_On_Arrows then
-                        Align := Compute_Alignment
-                          (P + 1,
-                           Skip_First_Line => False,
-                           Align_On        => Tok_Arrow);
-                     end if;
-                  end if;
-
-                  --  Indent on the left parenthesis for subprogram & type
-                  --  declarations, and for subprogram calls/aggregates with no
-                  --  nested parenthesis except on the same line and for
-                  --  arrows+paren as in:
-                  --     X := (Foo => (Y,
-                  --                   Z));
-                  --  In other cases (complex subprogram call),
-                  --  indent as for continuation lines.
-
-                  declare
-                     Level, Tmp_Index, Val : Integer;
-                  begin
-                     if Top (Paren_Stack).all = Conditional then
-                        Level := P - Start_Of_Line + Padding
-                          + Indent_Conditional;
-
-                     else
-                        --  ../test/ada-gps/ada_gps_bug_006.adb
-                        --    The_TV := E (Query, 
(Def_Restriction.Traffic_Volume,
-                        Tmp_Index := P + 1;
-
-                        while Tmp_Index <= Buffer'Last
-                          and then Buffer (Tmp_Index) = ' '
-                        loop
-                           Tmp_Index := Tmp_Index + 1;
-                        end loop;
-
-                        Level := Tmp_Index - Start_Of_Line + Padding;
-                     end if;
-
-                     Val := Top (Indents).Continuation_Val;
-                     Push (Indents, (Level, Align, L, Continuation_Val));
-
-                     --  If Align_Decl_On_Colon is set and Colon_Col is set
-                     --  then ignore Val and continue indenting based on
-                     --  the current Continuation_Val since the saved value
-                     --  does not take Colon_Col into account.
-
-                     if Local_Top_Token.Colon_Col /= 0 then
-                        if Continuation_Val > 0 then
-                           Continuation_Val :=
-                             Continuation_Val - Indent_Continue;
-                        end if;
-
-                     else
-                        Continuation_Val := Val;
-                     end if;
-                  end;
-
-               when ')' =>
-                  if (Local_Top_Token.Token = Tok_Colon
-                      or else Local_Top_Token.Token = Tok_Identifier)
-                    and then
-                      (Local_Top_Token.Variable_Kind
-                         in Parameter_Kind .. Discriminant_Kind
-                       or else
-                         (Local_Top_Token.Is_In_Type_Definition
-                          and then not
-                            Local_Top_Token.Attributes (Ada_Record_Attribute)
-                          and then not Local_Top_Token.Type_Declaration))
-                  then
-                     if Local_Top_Token.Token = Tok_Identifier
-                       and then not
-                         (Local_Top_Token.Is_In_Type_Definition
-                          and then not Local_Top_Token.Attributes
-                            (Ada_Record_Attribute)
-                          and then not Local_Top_Token.Type_Declaration)
-                     then
-                        --  This handles cases where we have a family entry.
-                        --  For example:
-                        --    entry E (Integer);
-                        --  here Integer is a type, so we don't want it in the
-                        --  constructs. But is has already been pushed. The
-                        --  code below disactivate its addition to the
-                        --  constructs
-
-                        Local_Top_Token.Token := Tok_Colon;
-                     end if;
-
-                     Pop_And_Set_Local (Tokens);
-                  end if;
-
-                  First := P;
-                  Prev_Token := Tok_Right_Paren;
-                  Close_Parenthesis;
-
-               when '"' =>
-                  declare
-                     Len    : Natural;
-                     Entity : Language_Entity;
-                  begin
-                     First := P;
-
-                     while P < End_Of_Line loop
-                        P := Next_Char (P);
-
-                        exit when Buffer (P) = '"';
-                     end loop;
-
-                     if Buffer (P) /= '"' then
-                        --  Syntax error: the string was not terminated
-                        --  Try to recover properly, and in particular, try
-                        --  to reset the parentheses stack.
-
-                        if Num_Parens > 0 then
-                           Close_Parenthesis;
-                        end if;
-                     end if;
-
-                     if (Local_Top_Token.Token in Token_Class_Declk
-                         and then Local_Top_Token.Ident_Len = 0)
-                       or else Prev_Token in Tok_End | Tok_Dot
-                       or else Local_Top_Token.Token = Tok_With
-                     then
-                        --  This is an operator symbol, e.g function ">=" (...)
-                        --  Or we're parsing a GNAT Project file and this is
-                        --  a dependency declaration (with "bla.gpr")
-
-                        if Prev_Token not in Tok_End | Tok_Dot then
-                           Len := P - First + 1;
-                           Local_Top_Token.Identifier (1 .. Len) :=
-                             Buffer (First .. P);
-                           Local_Top_Token.Ident_Len := Len;
-                           Local_Top_Token.Sloc_Name.Line := L;
-                           Local_Top_Token.Sloc_Name.Column :=
-                             First - Start_Of_Line + 1;
-                           Local_Top_Token.Sloc_Name.Index := First;
-                        end if;
-
-                        Prev_Token := Tok_Operator_Symbol;
-                        Entity     := Block_Text;
-                     else
-                        Prev_Token := Tok_String_Literal;
-                        Entity     := String_Text;
-                     end if;
-
-                     Compute_Indentation
-                       (Prev_Token, Prev_Prev_Token, Prev3_Token,
-                        P, L, Num_Spaces);
-
-                     if Callback /= null then
-                        if Call_Callback
-                          (Entity,
-                           (L, First - Start_Of_Line + 1,
-                            First),
-                           (L, P - Start_Of_Line + 1, P),
-                           False)
-                        then
-                           Terminated := True;
-                           return;
-                        end if;
-                     end if;
-                  end;
-
-               when '&' | '+' | '-' | '*' | '/' | ':' | '<' | '>' | '=' |
-                    '|' | '.'
-               =>
-                  Spaces (2) := Buffer (P);
-                  Spaces (3) := ' ';
-                  First := P;
-                  Last  := P + 1;
-                  Offs  := 1;
-
-                  case Buffer (P) is
-                     when '+' | '-' =>
-                        if Buffer (P) = '-' then
-                           Prev_Token := Tok_Minus;
-                        else
-                           Prev_Token := Tok_Plus;
-                        end if;
-
-                        if Prev_Prev_Token = Tok_Identifier
-                          and then
-                            (P <= Buffer'First + 1
-                             or else To_Upper (Buffer (P - 1)) /= 'E'
-                             or else
-                               (Buffer (P - 2) /= '#'
-                                and then Buffer (P - 2) not in '0' .. '9'))
-                          and then
-                            (P = Buffer'Last
-                             or else (Buffer (P + 1) /= '"'
-                                      and then Buffer (P + 1) /= '('))
-                        then
-                           Insert_Spaces := True;
-                        else
-                           Insert_Spaces := False;
-                        end if;
-
-                     when '&' | '|' =>
-                        if Buffer (P) = '&' then
-                           Prev_Token := Tok_Ampersand;
-                        else
-                           Prev_Token := Tok_Vertical_Bar;
-                        end if;
-
-                        Insert_Spaces := True;
-
-                     when '/' | ':' =>
-                        Insert_Spaces := True;
-
-                        if P < Buffer'Last
-                          and then Buffer (P + 1) = '='
-                        then
-                           if Buffer (P) = ':'
-                             and then Local_Top_Token.Token = Tok_Colon
-                           then
-                              Right_Assignment := True;
-                              Local_Top_Token.Attributes
-                                (Ada_Assign_Attribute) := True;
-
-                              if Local_Top_Token.Variable_Kind
-                                in Parameter_Kind .. Discriminant_Kind
-                              then
-                                 Pop_And_Set_Local (Tokens);
-                              end if;
-                           end if;
-
-                           Handle_Two_Chars ('=');
-
-                           if Buffer (P) = '/' then
-                              Prev_Token := Tok_Not_Equal;
-                           else
-                              Prev_Token := Tok_Colon_Equal;
-                           end if;
-
-                        elsif Buffer (P) = '/' then
-                           Prev_Token := Tok_Slash;
-                        else
-                           Handle_Colon;
-                        end if;
-
-                     when '*' =>
-                        declare
-                           Prev_Tmp : constant Integer := Prev_Char (P);
-                        begin
-                           Insert_Spaces :=
-                             Prev_Tmp >= Buffer'First
-                             and then Buffer (Prev_Tmp) /= '*';
-                        end;
-
-                        if P < Buffer'Last
-                          and then Buffer (Next_Char (P)) = '*'
-                        then
-                           Handle_Two_Chars ('*');
-                           Prev_Token := Tok_Double_Asterisk;
-                        else
-                           Prev_Token := Tok_Asterisk;
-                        end if;
-
-                     when '.' =>
-                        declare
-                           Next_Tmp : constant Natural := Next_Char (P);
-                        begin
-                           Insert_Spaces :=
-                             Next_Tmp <= Buffer'Last
-                             and then Buffer (Next_Tmp) = '.';
-                        end;
-
-                        if Insert_Spaces then
-                           Handle_Two_Chars ('.');
-                           Prev_Token := Tok_Dot_Dot;
-                        else
-                           Prev_Token := Tok_Dot;
-                        end if;
-
-                     when '<' =>
-                        declare
-                           Next_Tmp : constant Natural := Next_Char (P);
-                        begin
-                           if Next_Tmp <= Buffer'Last then
-                              case Buffer (Next_Tmp) is
-                                 when '=' =>
-                                    Insert_Spaces := True;
-                                    Prev_Token    := Tok_Less_Equal;
-                                    Handle_Two_Chars ('=');
-
-                                 when '<' =>
-                                    Prev_Token    := Tok_Less_Less;
-                                    Insert_Spaces := False;
-                                    Handle_Two_Chars ('<');
-
-                                 when '>' =>
-                                    Prev_Token    := Tok_Box;
-                                    Insert_Spaces := False;
-                                    Handle_Two_Chars ('>');
-
-                                 when others =>
-                                    Prev_Token    := Tok_Less;
-                                    Insert_Spaces := True;
-                              end case;
-                           else
-                              Prev_Token    := Tok_Less;
-                              Insert_Spaces := True;
-                           end if;
-                        end;
-
-                     when '>' =>
-                        declare
-                           Next_Tmp : constant Natural := Next_Char (P);
-                        begin
-                           if Next_Tmp <= Buffer'Last then
-                              case Buffer (Next_Tmp) is
-                                 when '=' =>
-                                    Insert_Spaces := True;
-                                    Prev_Token    := Tok_Greater_Equal;
-                                    Handle_Two_Chars ('=');
-
-                                 when '>' =>
-                                    Prev_Token    := Tok_Greater_Greater;
-                                    Insert_Spaces := False;
-                                    Handle_Two_Chars ('>');
-
-                                 when others =>
-                                    Prev_Token    := Tok_Greater;
-                                    Insert_Spaces := True;
-                              end case;
-                           else
-                              Prev_Token    := Tok_Greater;
-                              Insert_Spaces := True;
-                           end if;
-                        end;
-
-                     when '=' =>
-                        Insert_Spaces := True;
-
-                        if P + 1 <= Buffer'Last
-                          and then Buffer (P + 1) = '>'
-                        then
-                           Handle_Arrow;
-                        else
-                           Prev_Token := Tok_Equal;
-                        end if;
-
-                     when others =>
-                        null;
-                  end case;
-
-                  if Spaces (3) = ' ' then
-                     if P + 1 > Buffer'Last
-                       or else Is_Blank (Buffer (P + 1))
-                       or else Last - 1 = End_Of_Line
-                     then
-                        Long := 2;
-                     else
-                        Long := 3;
-                     end if;
-                  end if;
-
-                  if P > Buffer'First and then Is_Blank (Buffer (P - 1)) then
-                     Offs := 2;
-                     Long := Long - 1;
-                  end if;
-
-                  if (Num_Parens = 0
-                      or else Prev_Token in Tok_Ampersand | Tok_Vertical_Bar
-                      or else Prev_Prev_Token
-                                in Tok_Arrow | Tok_Then | Tok_Else)
-                    and then Local_Top_Token.Token /= Tok_When
-                  then
-                     --  If we're not inside parens or if we're in a
-                     --  conditional expression, then handle continuation
-                     --  lines here. Otherwise, continuation lines are already
-                     --  handled separately.
-
-                     Compute_Indentation
-                       (Prev_Token, Prev_Prev_Token, Prev3_Token,
-                        P, L, Num_Spaces);
-                  else
-                     Do_Indent (P, L, Num_Spaces);
-                  end if;
-
-                  if Format_Operators and then Insert_Spaces then
-                     Replace_Text
-                       (First, Last, L, Spaces (Offs .. Offs + Long - 1));
-                  end if;
-
-               when ',' | ';' =>
-                  First := P;
-
-                  if Buffer (P) = ';' then
-                     Prev_Token := Tok_Semicolon;
-                     Right_Assignment := False;
-
-                     if Aspect_Clause then
-                        Finish_Aspect_Clause (P, L, Done => Terminated);
-                        Local_Top_Token := Top (Tokens);
-
-                        if Terminated then
-                           return;
-                        end if;
-                     end if;
-
-                     if Local_Top_Token.Token = Tok_Colon then
-                        Pop_And_Set_Local (Tokens);
-
-                     elsif Num_Parens = 0 then
-                        if In_Declaration /= No_Decl
-                          or else
-                            (Local_Top_Token.Token = Tok_Task
-                             and then In_Declaration = Type_Decl)
-                          or else Local_Top_Token.Token = Tok_Subtype
-                          or else Local_Top_Token.Token = Tok_For
-                        then
-                           --  subprogram spec or type decl or repr. clause,
-                           --  e.g:
-                           --  procedure xxx (...);
-                           --  type ... is ...;
-                           --  for ... use ...;
-
-                           Pop_And_Set_Local (Tokens);
-                           In_Declaration := No_Decl;
-
-                        elsif Local_Top_Token.Token = Tok_With
-                          or else Local_Top_Token.Token = Tok_Use
-                          or else Local_Top_Token.Token = Tok_Identifier
-                          or else Local_Top_Token.Token = Tok_Type
-                          or else Local_Top_Token.Token = Tok_Accept
-                          or else Local_Top_Token.Token = Tok_Pragma
-                        then
-                           Pop_And_Set_Local (Tokens);
-                        end if;
-
-                     end if;
-
-                     if In_Declaration = Subprogram_Decl
-                       and then not
-                         (Top_Token /= null
-                          and then Top_Token.Attributes (Ada_New_Attribute))
-                     then
-                        Is_Parameter := True;
-                     elsif In_Declaration = Type_Decl then
-                        Is_Discriminant := True;
-                     end if;
-
-                  else
-                     Prev_Token := Tok_Comma;
-
-                     if Local_Top_Token.In_Declaration
-                       and then Local_Top_Token.Token = Tok_Identifier
-                     then
-                        Pop_And_Set_Local (Tokens);
-
-                     elsif Local_Top_Token.Token = Tok_With
-                       or else Local_Top_Token.Token = Tok_Use
-                     then
-                        declare
-                           Val : Extended_Token;
-                        begin
-                           --  Create a separate entry for each with clause:
-                           --  with a, b;
-                           --  will get two entries: one for a, one for b.
-
-                           Val.Token := Local_Top_Token.Token;
-                           Pop_And_Set_Local (Tokens);
-                           Val.Sloc.Line   := L;
-                           Val.Sloc.Column :=
-                             Prec - Line_Start (Buffer, Prec) + 2;
-                           Val.Sloc.Index  := Prec + 1;
-                           Val.Ident_Len := 0;
-                           Push (Tokens, Val);
-                        end;
-                     end if;
-                  end if;
-
-                  if Format_Operators and then P /= End_Of_Line then
-                     Char := Buffer (P + 1);
-
-                     if Char /= ' ' then
-                        Do_Indent (P, L, Num_Spaces);
-                        Comma (1) := Buffer (P);
-                        Replace_Text (P, P + 1, L, Comma (1 .. 2));
-                     end if;
-                  end if;
-
-               when ''' =>
-                  --  Apostrophe. This can either be the start of a character
-                  --  literal, an isolated apostrophe used in a qualified
-                  --  expression or an attribute. We treat it as a character
-                  --  literal if it does not follow a right parenthesis,
-                  --  identifier, the keyword ALL or a literal. This means that
-                  --  we correctly treat constructs like:
-                  --    A := Character'('A');
-
-                  First := P;
-
-                  if Prev_Token = Tok_Identifier
-                     or else Prev_Token = Tok_Right_Paren
-                     or else Prev_Token = Tok_All
-                     or else Prev_Token in Token_Class_Literal
-                     or else P = End_Of_Line
-                  then
-                     Prev_Token := Tok_Apostrophe;
-                  else
-                     if P = End_Of_Line - 1 then
-                        P := P + 1;
-                     else
-                        P := P + 2;
-                     end if;
-
-                     while P < End_Of_Line
-                       and then Buffer (P) /= '''
-                     loop
-                        P := Next_Char (P);
-                     end loop;
-
-                     Prev_Token := Tok_Char_Literal;
-
-                     if Callback /= null then
-                        if Call_Callback
-                          (Character_Text,
-                           (L, First - Start_Of_Line + 1, First),
-                           (L, P - Start_Of_Line + 1, P),
-                           False)
-                        then
-                           Terminated := True;
-                           Comments_Skipped := False;
-                           return;
-                        end if;
-                     end if;
-                  end if;
-
-               when others =>
-                  Token_Found := False;
-            end case;
-
-            if Buffer (P) /= ' ' and then not Is_Control (Buffer (P)) then
-               Comments_Skipped := False;
-            end if;
-
-            if Token_Found
-              and then (Prev_Token in Tok_Double_Asterisk .. Tok_Colon_Equal
-                        or else Prev_Token in Tok_Semicolon .. Tok_Dot_Dot)
-            then
-               if Callback /= null then
-                  if Call_Callback
-                    (Operator_Text,
-                     (L, First - Start_Of_Line + 1, First),
-                     (L, P - Start_Of_Line + 1, P),
-                     False)
-                  then
-                     Terminated := True;
-                     Comments_Skipped := False;
-                     return;
-                  end if;
-               end if;
-            end if;
-
-            P := Next_Char (P);
-         end loop;
-
-         Comments_Skipped := False;
-         Terminated := False;
-      end Next_Word;
-
-      ------------------
-      -- Replace_Text --
-      ------------------
-
-      procedure Replace_Text
-        (First : Natural;
-         Last  : Natural;
-         Line  : Natural;
-         Str   : String)
-      is
-         Start : Natural;
-      begin
-         if Replace /= null
-           and then (To = 0 or else Line in From .. To)
-         then
-            if Last_Replace_Line /= Line then
-               Last_Replace_Line := Line;
-               Padding := 0;
-            end if;
-
-            Start := Line_Start (Buffer, First);
-            Replace
-              (Line,
-               Padding + First - Start + 1,
-               Padding + Last - Start + 1, Str);
-
-            Padding := Padding + Str'Length - (Last - First);
-         end if;
-      end Replace_Text;
-
-      -------------------
-      -- Call_Callback --
-      -------------------
-
-      function Call_Callback
-        (Entity         : Language_Entity;
-         Sloc_Start     : Source_Location;
-         Sloc_End       : Source_Location;
-         Partial_Entity : Boolean) return Boolean
-      is
-         Ignore : Boolean;
-         pragma Unreferenced (Ignore);
-         Ent : Language_Entity := Entity;
-
-      begin
-         if Aspect_Clause then
-            case Entity is
-               when Keyword_Text =>
-                  Ent := Aspect_Keyword_Text;
-               when Comment_Text | Annotated_Comment_Text =>
-                  Ent := Aspect_Comment_Text;
-               when others =>
-                  --  Highlight everything else with Aspect_Text,
-                  --  which will be done next time Call_Callback is called.
-                  return False;
-            end case;
-
-            Ignore := Callback
-              (Aspect_Text,
-               Aspect_Clause_Sloc,
-               (Sloc_Start.Line,
-                Sloc_Start.Column - 1,
-                Sloc_Start.Index - 1),
-               Partial_Entity);
-            Aspect_Clause_Sloc :=
-              (Sloc_End.Line, Sloc_End.Column + 1, Sloc_End.Index + 1);
-
-         end if;
-
-         return Callback (Ent, Sloc_Start, Sloc_End, Partial_Entity);
-      end Call_Callback;
-
-   begin  --  Analyze_Ada_Source
-      if Buffer'Length = 0 then
-         return;
-      end if;
-
-      --  Push a dummy token so that stack will never be empty
-
-      Push (Tokens, Default_Extended);
-
-      --  Push a dummy indentation so that stack will never be empty
-
-      Push (Indents, (None, 0, 0, 0));
-
-      Next_Word (Prec, Line_Count, Terminated, End_Reached);
-
-      --  If there is only one character in the buffer and the end of the
-      --  buffer has been reached, enter the main loop anyway. Otherwise,
-      --  the on-the-fly auto-casing will not work when adding a space after
-      --  single character identifier.
-
-      if (End_Reached
-          and then Buffer_Last > 1
-          and then Buffer (Buffer_Last) /= ASCII.LF)
-        or else Terminated
-      then
-         Clear (Paren_Stack);
-         Clear (Tokens);
-         Clear (Indents);
-         return;
-      end if;
-
-      Current := End_Of_Word (Prec);
-
-      Main_Loop :
-      loop
-         Str_Len := Current - Prec + 1;
-
-         Str (1 .. Str_Len) := Buffer (Prec .. Current);
-
-         Token := Get_Token (Str (1 .. Str_Len), Prev_Token);
-
-         if Token = Tok_Identifier then
-            --  Handle dotted names, e.g Foo.Bar.X
-
-            Prev_Line := Line_Count;
-
-            if Current < Buffer_Last then
-               Index_Ident := End_Of_Identifier (Current + 1);
-
-               if Index_Ident /= Current then
-                  --  We have a dotted name, update indexes
-
-                  Str_Len := Index_Ident - Prec + 1;
-
-                  Str (Current - Prec + 2 .. Index_Ident - Prec + 1) :=
-                    Buffer (Current + 1 .. Index_Ident);
-
-                  Current := Index_Ident;
-               end if;
-            end if;
-
-            Top_Token := Top (Tokens);
-            Start_Of_Line := Line_Start (Buffer, Prec);
-
-            if Top_Token.Ident_Len = 0
-              and then (Top_Token.Token in Token_Class_Declk
-                        or else Top_Token.Token = Tok_With
-                        or else Top_Token.Token = Tok_Pragma)
-            then
-               --  Store enclosing entity name
-
-               Top_Token.Identifier (1 .. Str_Len) := Buffer (Prec .. Current);
-               Top_Token.Ident_Len := Str_Len;
-               Top_Token.Sloc_Name.Line   := Prev_Line;
-               Top_Token.Sloc_Name.Column := Prec - Start_Of_Line + 1;
-               Top_Token.Sloc_Name.Index  := Prec;
-            end if;
-
-            if (Top_Token.In_Declaration
-                or else
-                  (Top_Token.Token = Tok_For
-                   and then Prev_Token = Tok_For)
-                or else Top_Token.Type_Declaration
-                or else (Top_Token.Attributes (Ada_Record_Attribute)
-                         and then (Top_Token.Token = Tok_Case
-                                   or else Prev_Token /= Tok_Arrow))
-                or else Is_Parameter
-                or else Is_Discriminant
-                or else
-                  (Top_Token.Type_Definition_Section
-                   and then Top_Token.Token = Tok_Type
-                   and then Top_Token.Attributes = No_Attribute))
-              and then (Num_Parens = 0
-                        or else Is_Parameter
-                        or else Is_Discriminant
-                        or else Top_Token.Type_Definition_Section)
-              and then (Prev_Token not in Reserved_Token_Type
-                        or else Prev_Token = Tok_Declare
-                        or else Prev_Token = Tok_Private
-                        or else Prev_Token = Tok_Record
-                        or else Prev_Token = Tok_Generic
-                        or else Prev_Token = Tok_For
-                        or else (Prev_Token = Tok_Is and then not In_Generic))
-              and then Prev_Token /= Tok_Dot
-              and then Prev_Token /= Tok_Apostrophe
-              and then not Aspect_Clause
-            then
-               --  This is a variable, a field declaration or a enumeration
-               --  literal
-
-               declare
-                  Val : Extended_Token;
-               begin
-                  Val.Token       := Tok_Identifier;
-                  Val.Sloc.Line   := Prev_Line;
-                  Val.Sloc.Column := Prec - Start_Of_Line + 1;
-                  Val.Sloc.Index  := Prec;
-                  Val.Identifier (1 .. Str_Len) := Str (1 .. Str_Len);
-                  Val.Ident_Len   := Str_Len;
-                  Val.Sloc_Name   := Val.Sloc;
-                  Val.In_Declaration := True;
-                  Val.Visibility  := Top_Token.Visibility_Section;
-
-                  if Is_Parameter then
-                     Val.Variable_Kind := Parameter_Kind;
-                  elsif Is_Discriminant then
-                     Val.Variable_Kind := Discriminant_Kind;
-                  end if;
-
-                  Val.Is_In_Type_Definition :=
-                    Top_Token.Type_Definition_Section;
-                  Val.Is_Generic_Param := In_Generic;
-                  Push (Tokens, Val);
-
-                  if Prev_Token = Tok_For then
-                     Pop (Tokens);
-                  end if;
-               end;
-            end if;
-
-            declare
-               Entity : Language_Entity;
-            begin
-               Entity := Identifier_Text;
-               Casing := Ident_Casing;
-
-               if Is_Digit (Str (1))
-                 or else (Prev_Token = Tok_Pound
-                          and then Is_Hexadecimal_Digit (Str (1)))
-               then
-                  --  Recognize simple cases of numeric values
-                  --  ??? recognizing more cases would require changing
-                  --  Next_Word parsing.
-
-                  Entity := Number_Text;
-
-               elsif Is_Optional_Keyword /= null
-                 and then Is_Optional_Keyword (Str (1 .. Str_Len))
-               then
-                  Entity := Keyword_Text;
-                  Casing := Reserved_Casing;
-
-               --  Try to differentiate type identifiers and block identifiers
-               --  from others in declarations.
-
-               elsif ((Prev_Token = Tok_In
-                       or else Prev_Token = Tok_Access
-                       or else Prev_Token = Tok_Aliased
-                       or else Prev_Token = Tok_Constant)
-                      and then (Prev_Prev_Token = Tok_Colon
-                                or else Prev_Prev_Token = Tok_Null
-                                or else Prev_Prev_Token = Tok_Is))
-                 or else (Prev_Token = Tok_All
-                          and then Prev_Prev_Token = Tok_Access)
-                 or else (Prev_Token = Tok_Is
-                          and then Prev_Prev_Token = Tok_Identifier
-                          and then Top_Token.Type_Declaration)
-                 or else (Prev_Token = Tok_Out
-                          and then (Prev_Prev_Token = Tok_Colon
-                                    or else Prev_Prev_Token = Tok_In))
-                 or else Prev_Token = Tok_Colon
-                 or else (In_Declaration = Subprogram_Decl
-                          and then Prev_Token = Tok_Return)
-               then
-                  Entity := Type_Text;
-               elsif (Prev_Token = Tok_Type
-                      and then Prev_Prev_Token /= Tok_Use)
-                 or else Prev_Token = Tok_Subtype
-                 or else Prev_Token = Tok_End
-                 or else Prev_Token = Tok_Procedure
-                 or else Prev_Token = Tok_Function
-                 or else Prev_Token = Tok_Task
-                 or else Prev_Token = Tok_Body
-                 or else Prev_Token = Tok_Entry
-                 or else Prev_Token = Tok_Accept
-                 or else Prev_Token = Tok_Package
-                 or else (Prev_Token = Tok_Renames
-                          and then Prev_Prev_Token = Tok_Right_Paren)
-                 or else (Current + 8 <= Buffer_Last
-                          and then Buffer (Current + 2) = ':'
-                          and then (Look_For (Current + 4, "begin")
-                                    or else Look_For (Current + 4, "declare")))
-               then
-                  Entity := Block_Text;
-               end if;
-
-               if Prev_Token = Tok_Apostrophe
-                 and then To_Upper (Str (1 .. Str_Len)) = "CLASS"
-                 and then Top_Token.In_Entity_Profile
-               then
-                  Top_Token.Attributes (Ada_Class_Attribute) := True;
-               end if;
-
-               if Callback /= null then
-                  exit Main_Loop when Call_Callback
-                    (Entity,
-                     (Prev_Line, Prec - Start_Of_Line + 1, Prec),
-                     (Line_Count,
-                      Current - Line_Start (Buffer, Current) + 1,
-                      Current),
-                     False);
-               end if;
-            end;
-
-         elsif Prev_Token = Tok_Apostrophe
-           and then (Token = Tok_Delta or else Token = Tok_Digits
-                     or else Token = Tok_Mod or else Token = Tok_Range
-                     or else Token = Tok_Access)
-         then
-            --  This token should not be considered as a reserved word
-            Casing := Ident_Casing;
-
-            if Callback /= null then
-               Start_Of_Line := Line_Start (Buffer, Prec);
-
-               exit Main_Loop when Call_Callback
-                 (Identifier_Text,
-                  (Line_Count, Prec - Start_Of_Line + 1, Prec),
-                  (Line_Count, Current - Start_Of_Line + 1, Current),
-                  False);
-            end if;
-
-         elsif Token = No_Token then
-            Casing := Unchanged;
-
-         else
-            --  We have a reserved word
-            Casing := Reserved_Casing;
-
-            declare
-               Temp      : aliased Extended_Token;
-               Do_Push   : Boolean;
-               Do_Pop    : Integer;
-               Do_Finish : Boolean;
-            begin
-               Handle_Word_Token (Token, Temp, Do_Pop, Do_Push, Do_Finish);
-
-               exit Main_Loop when Do_Finish;
-
-               Handle_Word_Indent (Token, Temp);
-
-               for J in 1 .. Do_Pop loop
-                  Pop (Tokens);
-               end loop;
-
-               --  Handles In_Generic
-
-               if not In_Generic
-                 and then Token = Tok_Generic
-               then
-                  In_Generic := True;
-               elsif In_Generic
-                 and then Prev_Token
-                   not in Tok_With | Tok_Access | Tok_Protected
-                 and then Token in Tok_Function | Tok_Procedure | Tok_Package
-               then
-                  In_Generic := False;
-               end if;
-
-               if Do_Push then
-                  Temp.Is_Generic_Param := In_Generic;
-                  Push (Tokens, Temp);
-               else
-                  null;
-               end if;
-
-               --  Computes In_Declaration
-               --  ??? There is still some computation of this done in
-               --  Handle_Word_Token. It would be nice to have all of it here.
-
-               if Token = Tok_Body
-                 or else Token = Tok_Renames
-                 or else (Token = Tok_Is and then not In_Generic)
-               then
-                  In_Declaration := No_Decl;
-               elsif In_Declaration = Subprogram_Decl
-                 and then Token = Tok_With
-               then
-                  In_Declaration := Subprogram_Aspect;
-               end if;
-            end;
-         end if;
-
-         if Indent_Params.Casing_Policy /= Disabled
-           and then Prev_Token /= Tok_Pound
-         --  Disable casing for based literal (so if a word is preceded by
-         --  a pound sign).
-         then
-            case Casing is
-               when Unchanged =>
-                  null;
-
-               when Upper | Lower | Mixed | Smart_Mixed  =>
-                  --  We do not want to case some as this is a new keyword in
-                  --  Ada 2012 but for upward compatibility issue GNAT does not
-                  --  forbid some as identifier. Without context it is not
-                  --  possible to determine if some is used as identifier or as
-                  --  keyword, so to avoid upsetting users we never change
-                  --  casing of some.
-                  if To_Lower (Str (1 .. Str_Len)) /= "some" then
-                     Replace_Text
-                       (Prec,
-                        Current + 1,
-                        Line_Count,
-                        Set_Case (Case_Exceptions,
-                                  Str (1 .. Str_Len),
-                                  Casing));
-                  end if;
-            end case;
-         end if;
-
-         --  'is' is handled specially, so nothing is needed here except
-         --  for type declarations, e.g:
-         --     type T
-         --       is ...
-
-         if Token /= Tok_Is
-           or else (Top_Token /= null and then Top_Token.Token = Tok_Type)
-         then
-            Compute_Indentation
-              (Token, Prev_Token, Prev_Prev_Token,
-               Current, Line_Count, Num_Spaces);
-         end if;
-
-         Prec            := Current + 1;
-         Prev_Prev_Token := Prev_Token;
-         Prev_Token      := Token;
-
-         exit Main_Loop when Prec > Buffer_Last;
-
-         Next_Word (Prec, Line_Count, Terminated, End_Reached);
-
-         exit Main_Loop when
-           Terminated
-           or else (End_Reached and then Buffer (Buffer_Last) /= ASCII.LF);
-
-         Current := End_Of_Word (Prec);
-      end loop Main_Loop;
-
-      --  Try to register partial constructs, friendlier
-
-      Prec := Integer'Min (Prec, Buffer'Last);
-
-      if Constructs /= null then
-         while Top (Tokens).Token /= No_Token loop
-            Pop (Tokens);
-         end loop;
-      end if;
-
-      Clear (Paren_Stack);
-      Clear (Tokens);
-      Clear (Indents);
-
-   exception
-      when E : others =>
-         Trace (Me, E);
-         raise;
-   end Analyze_Ada_Source;
-
-end Ada_Analyzer;
diff --git a/packages/ada-mode/gps_source/ada_analyzer.ads 
b/packages/ada-mode/gps_source/ada_analyzer.ads
deleted file mode 100755
index b88f3c8..0000000
--- a/packages/ada-mode/gps_source/ada_analyzer.ads
+++ /dev/null
@@ -1,76 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2001-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
---  This package provides a multi-purpose Ada parser designed to be very
---  fast and usable on non compilable sources.
---  Typical use of this package includes: source highlighting, block folding,
---  source reformatting, ...
-
-with Basic_Types;   use Basic_Types;
-with Language;      use Language;
-with Case_Handling; use Case_Handling;
-with GNATCOLL.Symbols;
-
-package Ada_Analyzer is
-
-   ----------------------
-   -- Parsing Routines --
-   ----------------------
-
-   procedure Analyze_Ada_Source
-     (Buffer              : UTF8_String;
-      Symbols             : GNATCOLL.Symbols.Symbol_Table_Access;
-      Indent_Params       : Indent_Parameters;
-      Format              : Boolean               := True;
-      From, To            : Natural               := 0;
-      Replace             : Replace_Text_Callback := null;
-      Constructs          : Construct_List_Access := null;
-      Callback            : Entity_Callback       := null;
-      Indent_Offset       : Natural               := 0;
-      Case_Exceptions     : Casing_Exceptions     := No_Casing_Exception;
-      Is_Optional_Keyword : access function (S : String)
-                                             return Boolean := null);
-   --  Analyze a given Ada source in Buffer, and perform source reformatting
-   --  between lines From .. To if Format is True.
-   --  If Constructs is not null, store the list of constructs analyzed.
-   --  If Callback is not null, call it for each Source_Entity_Kind.
-   --  Case_Exceptions is the handler containing all the casing exceptions
-   --  to be used while reformatting the code.
-
-   Ada_Abstract_Attribute  : constant Construct_Att_Key := Last_Gen_Att + 1;
-   Ada_Access_Attribute    : constant Construct_Att_Key := Access_Attribute;
-   Ada_Aliased_Attribute   : constant Construct_Att_Key := Last_Gen_Att + 2;
-   Ada_Array_Attribute     : constant Construct_Att_Key := Array_Attribute;
-   Ada_Assign_Attribute    : constant Construct_Att_Key := Last_Gen_Att + 3;
-   Ada_Constant_Attribute  : constant Construct_Att_Key := Last_Gen_Att + 4;
-   Ada_Delta_Attribute     : constant Construct_Att_Key := Last_Gen_Att + 5;
-   Ada_Digits_Attribute    : constant Construct_Att_Key := Last_Gen_Att + 6;
-   Ada_In_Attribute        : constant Construct_Att_Key := Last_Gen_Att + 7;
-   Ada_Interface_Attribute : constant Construct_Att_Key := Last_Gen_Att + 8;
-   Ada_Mod_Attribute       : constant Construct_Att_Key := Last_Gen_Att + 9;
-   Ada_New_Attribute       : constant Construct_Att_Key := Last_Gen_Att + 10;
-   Ada_Not_Attribute       : constant Construct_Att_Key := Last_Gen_Att + 11;
-   Ada_Null_Attribute      : constant Construct_Att_Key := Last_Gen_Att + 12;
-   Ada_Out_Attribute       : constant Construct_Att_Key := Last_Gen_Att + 13;
-   Ada_Range_Attribute     : constant Construct_Att_Key := Last_Gen_Att + 14;
-   Ada_Record_Attribute    : constant Construct_Att_Key := Last_Gen_Att + 15;
-   Ada_Tagged_Attribute    : constant Construct_Att_Key := Last_Gen_Att + 16;
-   Ada_Class_Attribute     : constant Construct_Att_Key := Last_Gen_Att + 17;
-   Ada_Renames_Attribute   : constant Construct_Att_Key := Last_Gen_Att + 18;
-   Ada_Generic_Attribute   : constant Construct_Att_Key := Last_Gen_Att + 19;
-
-end Ada_Analyzer;
diff --git a/packages/ada-mode/gps_source/basic_types.adb 
b/packages/ada-mode/gps_source/basic_types.adb
deleted file mode 100755
index 31678f1..0000000
--- a/packages/ada-mode/gps_source/basic_types.adb
+++ /dev/null
@@ -1,147 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2000-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-with GNAT.Strings; use GNAT.Strings;
-with Ada.Characters.Handling; use Ada.Characters.Handling;
-
-package body Basic_Types is
-
-   --------------
-   -- Is_Equal --
-   --------------
-
-   function Is_Equal
-     (List1, List2   : GNAT.OS_Lib.Argument_List;
-      Case_Sensitive : Boolean := True;
-      Ordered        : Boolean := False) return Boolean is
-   begin
-      if List1'Length /= List2'Length then
-         return False;
-
-      elsif Ordered then
-         for L in List1'Range loop
-            if List1 (L).all /= List2 (L - List1'First + List2'First).all then
-               return False;
-            end if;
-         end loop;
-         return True;
-
-      else
-         declare
-            L1 : GNAT.OS_Lib.Argument_List := List1;
-            L2 : GNAT.OS_Lib.Argument_List := List2;
-         begin
-            for A in L1'Range loop
-               for B in L2'Range loop
-                  if L2 (B) /= null and then
-                    ((Case_Sensitive and then L1 (A).all = L2 (B).all)
-                     or else
-                     (not Case_Sensitive
-                      and then To_Lower (L1 (A).all) = To_Lower (L2 (B).all)))
-                  then
-                     L1 (A) := null;
-                     L2 (B) := null;
-                     exit;
-                  end if;
-               end loop;
-            end loop;
-
-            return L1 = (L1'Range => null)
-              and then L2 = (L2'Range => null);
-         end;
-      end if;
-   end Is_Equal;
-
-   --------------
-   -- Contains --
-   --------------
-
-   function Contains
-     (List           : GNAT.OS_Lib.Argument_List;
-      Str            : String;
-      Case_Sensitive : Boolean := True) return Boolean is
-   begin
-      if not Case_Sensitive then
-         declare
-            S : constant String := To_Lower (Str);
-         begin
-            for L in List'Range loop
-               if To_Lower (List (L).all) = S then
-                  return True;
-               end if;
-            end loop;
-         end;
-      else
-         for L in List'Range loop
-            if List (L).all = Str then
-               return True;
-            end if;
-         end loop;
-      end if;
-
-      return False;
-   end Contains;
-
-   ---------
-   -- "<" --
-   ---------
-
-   function "<" (Left, Right : Date_Type) return Boolean is
-   begin
-      if Left.Year < Right.Year then
-         return True;
-      elsif Left.Year = Right.Year then
-         if Left.Month < Right.Month then
-            return True;
-         elsif Left.Month = Right.Month then
-            if Left.Day < Right.Day then
-               return True;
-            end if;
-         end if;
-      end if;
-
-      return False;
-   end "<";
-
-   ----------
-   -- "<=" --
-   ----------
-
-   function "<=" (Left, Right : Date_Type) return Boolean is
-   begin
-      return Left < Right or else Left = Right;
-   end "<=";
-
-   ---------
-   -- ">" --
-   ---------
-
-   function ">" (Left, Right : Date_Type) return Boolean is
-   begin
-      return not (Left < Right or else Left = Right);
-   end ">";
-
-   ----------
-   -- ">=" --
-   ----------
-
-   function ">=" (Left, Right : Date_Type) return Boolean is
-   begin
-      return not (Left < Right);
-   end ">=";
-
-end Basic_Types;
diff --git a/packages/ada-mode/gps_source/basic_types.ads 
b/packages/ada-mode/gps_source/basic_types.ads
deleted file mode 100755
index 353f3eb..0000000
--- a/packages/ada-mode/gps_source/basic_types.ads
+++ /dev/null
@@ -1,166 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2000-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-with Ada.Calendar;
-with Ada.Strings.Unbounded;
-with Ada.Unchecked_Deallocation;
-with Ada.Unchecked_Conversion;
-with Interfaces.C.Strings;
-with System;
-
-with GNAT.OS_Lib;
-with GNAT.Expect;
-with GNAT.Regpat;
-with GNAT.Strings;
-with GNATCOLL.VFS;
-with GNATCOLL.Xref;
-
-package Basic_Types is
-
-   subtype Pixmap_Array is Interfaces.C.Strings.chars_ptr_array (0 .. 0);
-   type Pixmap_Access is access all Pixmap_Array;
-
-   procedure Unchecked_Free is new Ada.Unchecked_Deallocation
-     (GNAT.Strings.String_List, GNAT.Strings.String_List_Access);
-   --  Free the array, but not the strings it contains.
-
-   procedure Unchecked_Free is new Ada.Unchecked_Deallocation
-     (GNAT.Regpat.Pattern_Matcher, GNAT.Expect.Pattern_Matcher_Access);
-
-   subtype Unchecked_String is String (Positive);
-   pragma Suppress (All_Checks, Unchecked_String);
-   --  Do not use this type directly, use Unchecked_String_Access instead.
-
-   type Unchecked_String_Access is access all Unchecked_String;
-   --  For efficiency reasons, use this type compatible with C char*,
-   --  so that C strings can be reused without making extra copies.
-
-   function To_Unchecked_String is new Ada.Unchecked_Conversion
-     (System.Address, Unchecked_String_Access);
-
-   function To_Unchecked_String is new Ada.Unchecked_Conversion
-     (Interfaces.C.Strings.chars_ptr, Unchecked_String_Access);
-
-   procedure Free is new Ada.Unchecked_Deallocation
-     (Unchecked_String, Unchecked_String_Access);
-
-   subtype UTF8_String is String;
-   subtype UTF8_Unbounded_String is Ada.Strings.Unbounded.Unbounded_String;
-
-   function Is_Equal
-     (List1, List2   : GNAT.OS_Lib.Argument_List;
-      Case_Sensitive : Boolean := True;
-      Ordered        : Boolean := False) return Boolean;
-   --  Return True if List1 has the same contents of List2 (no matter the order
-   --  of the strings in both arrays).
-   --  If Ordered is true, then each item of List1 much match the
-   --  corresponoding item of List2
-
-   function Contains
-     (List           : GNAT.OS_Lib.Argument_List;
-      Str            : String;
-      Case_Sensitive : Boolean := True) return Boolean;
-   --  Return True if List contains Str
-
-   type Date_Type is record
-      Year  : Ada.Calendar.Year_Number;
-      Month : Ada.Calendar.Month_Number;
-      Day   : Ada.Calendar.Day_Number;
-   end record;
-
-   Null_Date : constant Date_Type := Date_Type'
-     (Year  => Ada.Calendar.Year_Number'First,
-      Month => Ada.Calendar.Month_Number'First,
-      Day   => Ada.Calendar.Day_Number'First);
-
-   function "<" (Left, Right : Date_Type) return Boolean;
-   --  Compares the two dates, return true if left is before right
-
-   function "<=" (Left, Right : Date_Type) return Boolean;
-   function ">" (Left, Right : Date_Type) return Boolean;
-   function ">=" (Left, Right : Date_Type) return Boolean;
-
-   --------------
-   -- Entities --
-   --------------
-
-   type File_Error_Reporter_Record is abstract tagged null record;
-   type File_Error_Reporter is access all File_Error_Reporter_Record'Class;
-   procedure Error
-     (Report : in out File_Error_Reporter_Record;
-      File   : GNATCOLL.VFS.Virtual_File) is abstract;
-   --  Used to report errors while parsing files
-
-   ------------------
-   -- Column types --
-   ------------------
-
-   subtype Visible_Column_Type is GNATCOLL.Xref.Visible_Column;
-   --  Visible_Column_Type correspond to user perception of the columns, ie,
-   --  after TAB expansion. The first character in the line has a value of 1.
-   --  Columns are counted in terms of UT8 characters.
-
-   type Character_Offset_Type is new Integer;
-   --  Character_Offset_Type indicates the number of characters between the
-   --  beginning of the line and the character. First character has offset 0.
-
-   type String_Index_Type is new Natural;
-   --  String_Index_Type indicates a index in a string, in bytes, starts at 1.
-
-   -----------------
-   -- File caches --
-   -----------------
-
-   type Packed_Boolean_Array is array (Positive range <>) of Boolean;
-   pragma Pack (Packed_Boolean_Array);
-   type Packed_Boolean_Access is access Packed_Boolean_Array;
-
-   procedure Free is new Ada.Unchecked_Deallocation
-     (Packed_Boolean_Array, Packed_Boolean_Access);
-
-   type File_Cache;
-   type File_Cache_List is access File_Cache;
-   type File_Cache is record
-      File_Name     : GNAT.Strings.String_Access := null;
-      --  The full name (including directory) for the file associated with
-      --  this record.
-
-      Line_Has_Code : Packed_Boolean_Access := null;
-      Line_Parsed   : Packed_Boolean_Access := null;
-
-      File_Contents : GNAT.Strings.String_Access := null;
-      --  The contents of the file. To save some memory, this is not allocated
-      --  for files that can be found on the local disk. However, it is used
-      --  for files that had to be downloaded from a remote machine.
-
-      CR_Stripped : Boolean := False;
-      --  True if the carriage return characters were stripped when the file
-      --  was read.
-
-      Next : File_Cache_List := null;
-      --  Next file in the cache list
-   end record;
-   --  Data associated with each file, and that contain cached data for the
-   --  file.
-   --  Line_Parsed indicates whether the line at a given index has been parsed.
-   --  This array is freed once the parsing has been finished (and in the
-   --  case Current_Line points to the last line with a breakpoint.
-
-   procedure Free is new
-     Ada.Unchecked_Deallocation (File_Cache, File_Cache_List);
-
-end Basic_Types;
diff --git a/packages/ada-mode/gps_source/case_handling.adb 
b/packages/ada-mode/gps_source/case_handling.adb
deleted file mode 100755
index 63b14ab..0000000
--- a/packages/ada-mode/gps_source/case_handling.adb
+++ /dev/null
@@ -1,314 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2004-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-with Ada.Unchecked_Deallocation;
-with Ada.Characters.Wide_Wide_Latin_1;
-
-with Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
-use Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
-
-with Ada.Strings.Wide_Wide_Unbounded;   use Ada.Strings.Wide_Wide_Unbounded;
-with Ada.Wide_Wide_Characters.Handling; use Ada.Wide_Wide_Characters.Handling;
-
-package body Case_Handling is
-
-   procedure Add_Exception
-     (HTable    : Exceptions_Table;
-      Str       : String;
-      Read_Only : Boolean);
-   --  Add Str exception in HTable
-
-   procedure Remove_Exception (HTable : Exceptions_Table; Str : String);
-   --  Remove str exception from the HTable
-
-   function Mixed_Case
-     (Image : Wide_Wide_String;
-      Smart : Boolean := False) return Wide_Wide_String;
-   --  The same as one in package specification, but on Wide_Wide_String.
-
-   ----------------
-   -- Mixed_Case --
-   ----------------
-
-   function Mixed_Case
-     (Image : Wide_Wide_String;
-      Smart : Boolean := False) return Wide_Wide_String
-   is
-      package Latin_1 renames Ada.Characters.Wide_Wide_Latin_1;
-
-      Do_Upper : Boolean;
-      C        : Wide_Wide_Character;
-      Result : Unbounded_Wide_Wide_String;
-   begin
-      if Image'Length = 0 then
-         return Image;
-      end if;
-
-      Do_Upper := True;
-
-      for Index in Image'Range loop
-         C := Image (Index);
-
-         if C = '.'
-           or else C = '_'
-           or else C = ' '
-           or else C = '('
-           or else C = ')'
-           or else C = '+'
-           or else C = '-'
-           or else C = '*'
-           or else C = '/'
-           or else C = ','
-           or else C = ';'
-           or else C = '''
-           or else C = Latin_1.HT
-           or else C = Latin_1.LF
-           or else C = Latin_1.CR
-         then
-            Do_Upper := True;
-            Append (Result, C);
-         else
-            if Do_Upper then
-               Append (Result, Ada.Wide_Wide_Characters.Handling.To_Upper (C));
-            elsif not Smart then
-               Append (Result, To_Lower (C));
-            else
-               Append (Result, C);
-            end if;
-
-            Do_Upper := False;
-         end if;
-      end loop;
-
-      return To_Wide_Wide_String (Result);
-   end Mixed_Case;
-
-   ----------------
-   -- Mixed_Case --
-   ----------------
-
-   function Mixed_Case
-     (S : UTF8_String; Smart : Boolean := False) return UTF8_String
-   is
-      Image  : constant Wide_Wide_String := Decode (S);
-   begin
-      return Encode (Mixed_Case (Image, Smart));
-   end Mixed_Case;
-
-   ---------------
-   --  Set_Case --
-   ---------------
-
-   function Set_Case
-     (C      : Casing_Exceptions;
-      Word   : UTF8_String;
-      Casing : Casing_Type) return UTF8_String
-   is
-      function Set_Substring_Exception
-        (Word : Wide_Wide_String) return UTF8_String;
-      --  Apply substring exception to word if possible.
-
-      -----------------------------
-      -- Set_Substring_Exception --
-      -----------------------------
-
-      function Set_Substring_Exception
-        (Word : Wide_Wide_String) return UTF8_String
-      is
-         procedure Apply (Substring : Wide_Wide_String);
-         --  Check if a substring exception exists for this substring and
-         --  apply it.
-
-         Result : Unbounded_Wide_Wide_String;
-
-         -----------
-         -- Apply --
-         -----------
-
-         procedure Apply (Substring : Wide_Wide_String) is
-            --  Set L_Str with the key for Str in the exception hash table
-            L_Word  : constant Wide_Wide_String := To_Lower (Substring);
-
-            Pos : Cursor;
-         begin
-            Pos := C.S.Find (L_Word);
-
-            if Has_Element (Pos) then
-               Append (Result, Element (Pos).Word);
-            else
-               Append (Result, Substring);
-            end if;
-         end Apply;
-
-         First : Natural := Word'First - 1;
-      begin
-         if C.S = null then
-            return Encode (Word);
-         end if;
-
-         --  Look for all substring in this word
-
-         for K in Word'Range loop
-            if Word (K) = '_' then
-               Apply (Word (First + 1 .. K - 1));
-               First := K;
-               Append (Result, '_');
-            end if;
-         end loop;
-
-         --  Apply to the last one
-
-         Apply (Word (First + 1 .. Word'Last));
-
-         return Encode (To_Wide_Wide_String (Result));
-      end Set_Substring_Exception;
-
-      Image  : constant Wide_Wide_String := Decode (Word);
-      L_Str  : constant Wide_Wide_String := To_Lower (Image);
-      N      : Cursor;
-   begin
-      if Casing = Unchanged then
-         --  Nothing to do in this case
-         return Word;
-      end if;
-
-      --  Now we check for the case exception for this word. If found we
-      --  just return the record casing, if not set we set the word casing
-      --  according to the rule set in Casing.
-
-      if C.E /= null then
-         N := C.E.Find (L_Str);
-      end if;
-
-      if not Has_Element (N) then
-         --  No case exception for this word, apply standard rules
-
-         case Casing is
-            when Unchanged =>
-               return Set_Substring_Exception (Image);
-
-            when Upper =>
-               return Set_Substring_Exception (To_Upper (Image));
-
-            when Lower =>
-               return Set_Substring_Exception (L_Str);
-
-            when Mixed =>
-               return Set_Substring_Exception (Mixed_Case (Image));
-
-            when Smart_Mixed =>
-               return Set_Substring_Exception
-                 (Mixed_Case (Image, Smart => True));
-         end case;
-
-      else
-         --  We have found a case exception
-         return Encode (Element (N).Word);
-      end if;
-   end Set_Case;
-
-   -------------------
-   -- Add_Exception --
-   -------------------
-
-   procedure Add_Exception
-     (HTable    : Exceptions_Table;
-      Str       : String;
-      Read_Only : Boolean)
-   is
-      Image : constant Wide_Wide_String := Decode (Str);
-   begin
-      HTable.Include (To_Lower (Image), (Image'Length, Read_Only, Image));
-   end Add_Exception;
-
-   procedure Add_Exception
-     (C         : in out Casing_Exceptions;
-      Word      : String;
-      Read_Only : Boolean) is
-   begin
-      Add_Exception (C.E, Word, Read_Only);
-   end Add_Exception;
-
-   -----------------------------
-   -- Add_Substring_Exception --
-   -----------------------------
-
-   procedure Add_Substring_Exception
-     (C         : in out Casing_Exceptions;
-      Substring : String;
-      Read_Only : Boolean) is
-   begin
-      Add_Exception (C.S, Substring, Read_Only);
-   end Add_Substring_Exception;
-
-   ----------------------
-   -- Remove_Exception --
-   ----------------------
-
-   procedure Remove_Exception
-     (HTable : Exceptions_Table;
-      Str    : String)
-   is
-      Image : constant Wide_Wide_String := Decode (Str);
-      L_Str : constant Wide_Wide_String := To_Lower (Image);
-      Pos   : Cursor := HTable.Find (L_Str);
-   begin
-      if Has_Element (Pos) and then not Element (Pos).Read_Only then
-         HTable.Delete (Pos);
-      end if;
-   end Remove_Exception;
-
-   procedure Remove_Exception (C : in out Casing_Exceptions; Word : String) is
-   begin
-      Remove_Exception (C.E, Word);
-   end Remove_Exception;
-
-   --------------------------------
-   -- Remove_Substring_Exception --
-   --------------------------------
-
-   procedure Remove_Substring_Exception
-     (C         : in out Casing_Exceptions;
-      Substring : String) is
-   begin
-      Remove_Exception (C.S, Substring);
-   end Remove_Substring_Exception;
-
-   -------------
-   -- Destroy --
-   -------------
-
-   procedure Destroy (C : in out Casing_Exceptions) is
-      procedure Unchecked_Free is new Ada.Unchecked_Deallocation
-        (Map, Exceptions_Table);
-   begin
-      --  Word exceptions
-
-      if C.E /= null then
-         C.E.Clear;
-         Unchecked_Free (C.E);
-      end if;
-
-      --  Substring exceptions
-
-      if C.S /= null then
-         C.S.Clear;
-         Unchecked_Free (C.S);
-      end if;
-   end Destroy;
-
-end Case_Handling;
diff --git a/packages/ada-mode/gps_source/case_handling.ads 
b/packages/ada-mode/gps_source/case_handling.ads
deleted file mode 100755
index 9e64e96..0000000
--- a/packages/ada-mode/gps_source/case_handling.ads
+++ /dev/null
@@ -1,124 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2004-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
---  Case support for case insensitive languages. This package has
---  services to change the casing of a word (identifier or keyword) and
---  to handle a set of casing exceptions.
-
-with Basic_Types;        use Basic_Types;
-
-with Ada.Containers.Indefinite_Hashed_Maps;
-with Ada.Strings.Wide_Wide_Hash;
-
-package Case_Handling is
-
-   type Casing_Policy is (Disabled, End_Of_Line, End_Of_Word, On_The_Fly);
-   for Casing_Policy'Size use Integer'Size;
-   pragma Convention (C, Casing_Policy);
-   --  The list of supported casing policies.
-   --  - Disable means that no auto-casing will be applied to the buffer
-   --  - End_Of_Line casing done when pressing return
-   --  - On_The_Fly casing is done when inserting a word separator
-
-   type Casing_Type is (Unchanged, Upper, Lower, Mixed, Smart_Mixed);
-   for Casing_Type'Size use Integer'Size;
-   pragma Convention (C, Casing_Type);
-   --  Casing used for identifiers and reserved words.
-   --  Only relevant for case insensitive languages.
-   --  - Mixed: Set first character of each word and characters after an
-   --    underscore to upper-case, all other characters are set to lower-case.
-   --  - Smart_Mixed: As Mixed but never force an upper-case to lower-case.
-
-   function Mixed_Case
-     (S : UTF8_String; Smart : Boolean := False) return UTF8_String;
-   --  Return S with a casing matching Ada style: upper case after an
-   --  underscore or a dot.
-   --  If smart is set, do not change upper-case letters in S
-
-   ---------------------
-   -- Case Exceptions --
-   ---------------------
-
-   type Casing_Exceptions is private;
-   --  This is the case exceptions handler, a set of exceptions to the
-   --  standard casing rule can be recorded into this object.
-
-   No_Casing_Exception : aliased constant Casing_Exceptions;
-
-   function Set_Case
-     (C      : Casing_Exceptions;
-      Word   : UTF8_String;
-      Casing : Casing_Type) return UTF8_String;
-   --  Change the case of Str as specified by Casing. This routine also
-   --  checks for case exceptions.
-
-   procedure Add_Exception
-     (C         : in out Casing_Exceptions;
-      Word      : String;
-      Read_Only : Boolean);
-   --  Add a case exception into the container. Read_Only must be set for
-   --  case exception that can't be removed interactively.
-
-   procedure Add_Substring_Exception
-     (C         : in out Casing_Exceptions;
-      Substring : String;
-      Read_Only : Boolean);
-   --  Add a substring case exception into the container. Read_Only must be set
-   --  for case exception that can't be removed interactively.
-
-   procedure Remove_Exception (C : in out Casing_Exceptions; Word : String);
-   --  Remove a case exception from the container
-
-   procedure Remove_Substring_Exception
-     (C         : in out Casing_Exceptions;
-      Substring : String);
-   --  Remove a substring case exception from the container
-
-   procedure Destroy (C : in out Casing_Exceptions);
-   --  Destroy the case exceptions handler, release all memory associated
-   --  with this object.
-
-private
-
-   type W_Node (Size : Natural) is record
-      Read_Only : Boolean;
-      --  Set to True if this case exception is read only (can't be removed).
-      --  Such case exception comes from a global .xml files.
-      Word      : Wide_Wide_String (1 .. Size);
-   end record;
-
-   package Casing_Exception_Table is new Ada.Containers.Indefinite_Hashed_Maps
-     (Key_Type        => Wide_Wide_String,
-      Element_Type    => W_Node,
-      Hash            => Ada.Strings.Wide_Wide_Hash,
-      Equivalent_Keys => "=");
-   use Casing_Exception_Table;
-
-   type Exceptions_Table is access Map;
-   --  Exception Word handler, each exception is inserted into this hash
-   --  table. The key is the word in lower-case, the associated
-   --  value is the word with the right casing.
-
-   type Casing_Exceptions is record
-      E : Exceptions_Table := new Map;
-      S : Exceptions_Table := new Map;
-   end record;
-
-   No_Casing_Exception : aliased constant Casing_Exceptions :=
-      (E => null, S => null);
-
-end Case_Handling;
diff --git a/packages/ada-mode/gps_source/config.ads 
b/packages/ada-mode/gps_source/config.ads
deleted file mode 100755
index 83c3fa5..0000000
--- a/packages/ada-mode/gps_source/config.ads
+++ /dev/null
@@ -1,34 +0,0 @@
------------------------------------------------------------------------
---                               G P S                               --
---                                                                   --
---                     Copyright (C) 2001-2010, AdaCore              --
---                                                                   --
--- GPS is free  software;  you can redistribute it and/or modify  it --
--- under the terms of the GNU General Public License as published by --
--- the Free Software Foundation; either version 2 of the License, or --
--- (at your option) any later version.                               --
---                                                                   --
--- This program is  distributed in the hope that it will be  useful, --
--- but  WITHOUT ANY WARRANTY;  without even the  implied warranty of --
--- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU --
--- General Public License for more details. You should have received --
--- a copy of the GNU General Public License along with this library; --
--- if not,  write to the  Free Software Foundation, Inc.,  59 Temple --
--- Place - Suite 330, Boston, MA 02111-1307, USA.                    --
------------------------------------------------------------------------
-
---  This package contains target specific parameters that are set at configure
---  time.
-
-package Config is
-   pragma Pure;
-
-   pragma Style_Checks (Off);
-
-
-   Default_Charset : constant String := "ISO-8859-1";
-   --  Default charset for the host, used throughout GPS to convert strings
-   --  from outside GPS (e.g. pathnames, compiler output, file contents, ...)
-   --  to UTF-8 internally.
-
-end Config;
diff --git a/packages/ada-mode/gps_source/generic_stack.adb 
b/packages/ada-mode/gps_source/generic_stack.adb
deleted file mode 100755
index 9564a04..0000000
--- a/packages/ada-mode/gps_source/generic_stack.adb
+++ /dev/null
@@ -1,126 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2001-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-with Ada.Unchecked_Deallocation;
-
-package body Generic_Stack is
-
-   procedure Unchecked_Free is new
-     Ada.Unchecked_Deallocation (Type_Array, Type_Array_Access);
-
-   -----------
-   -- Clear --
-   -----------
-
-   procedure Clear (Stack : in out Simple_Stack) is
-   begin
-      Unchecked_Free (Stack.Values);
-      Stack.Last := 0;
-   end Clear;
-
-   ----------
-   -- Push --
-   ----------
-
-   Minimal_Array_Length : constant := 64;
-   --  Minimal length to allocate on an array
-
-   procedure Push (Stack : in out Simple_Stack; Value : Generic_Type) is
-      Tmp : Type_Array_Access;
-   begin
-      if Stack.Values = null then
-         Stack.Values := new Type_Array (1 .. Minimal_Array_Length);
-      elsif Stack.Last >= Stack.Values'Last then
-         Tmp := Stack.Values;
-         Stack.Values := new Type_Array (1 .. Tmp'Length * 2);
-         Stack.Values (Tmp'Range) := Tmp.all;
-         Unchecked_Free (Tmp);
-      end if;
-
-      Stack.Last := Stack.Last + 1;
-      Stack.Values (Stack.Last) := Value;
-   end Push;
-
-   ---------
-   -- Pop --
-   ---------
-
-   procedure Pop (Stack : in out Simple_Stack; Value : out Generic_Type) is
-   begin
-      if Stack.Last = 0 then
-         raise Stack_Empty;
-      else
-         Value := Stack.Values (Stack.Last);
-         Stack.Last := Stack.Last - 1;
-      end if;
-   end Pop;
-
-   procedure Pop (Stack : in out Simple_Stack) is
-      Value : Generic_Type;
-   begin
-      Pop (Stack, Value);
-   end Pop;
-
-   ---------
-   -- Top --
-   ---------
-
-   function Top (Stack : Simple_Stack) return Generic_Type_Access is
-   begin
-      if Stack.Last = 0 then
-         raise Stack_Empty;
-      else
-         return Stack.Values (Stack.Last)'Access;
-      end if;
-   end Top;
-
-   ----------
-   -- Next --
-   ----------
-
-   function Next (Stack : Simple_Stack) return Generic_Type_Access is
-   begin
-      if Stack.Last <= 1 then
-         return null;
-      else
-         return Stack.Values (Stack.Last - 1)'Access;
-      end if;
-   end Next;
-
-   --------------
-   -- Is_Empty --
-   --------------
-
-   function Is_Empty (Stack : Simple_Stack) return Boolean is
-   begin
-      return Stack.Last = 0;
-   end Is_Empty;
-
-   --------------------
-   -- Traverse_Stack --
-   --------------------
-
-   procedure Traverse_Stack
-     (Stack    : Simple_Stack;
-      Callback : access function (Obj : Generic_Type) return Boolean) is
-   begin
-      for J in 1 .. Stack.Last loop
-         exit when not Callback (Stack.Values (J));
-      end loop;
-   end Traverse_Stack;
-
-end Generic_Stack;
diff --git a/packages/ada-mode/gps_source/generic_stack.ads 
b/packages/ada-mode/gps_source/generic_stack.ads
deleted file mode 100755
index 167fa2b..0000000
--- a/packages/ada-mode/gps_source/generic_stack.ads
+++ /dev/null
@@ -1,74 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2001-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-generic
-   type Generic_Type is private;
-package Generic_Stack is
-   type Simple_Stack is private;
-
-   type Generic_Type_Access is access all Generic_Type;
-
-   Stack_Empty : exception;
-   --  Raised by the functions below when stack is empty.
-
-   procedure Push (Stack : in out Simple_Stack; Value : Generic_Type);
-   --  Push Value on top of Stack.
-
-   procedure Pop (Stack : in out Simple_Stack; Value : out Generic_Type);
-   --  Remove the value on top of Stack and return it in Value.
-   --  Raise Stack_Empty if Stack is empty.
-
-   procedure Pop (Stack : in out Simple_Stack);
-   --  Remove the value on top of Stack.
-   --  Raise Stack_Empty if Stack is empty.
-
-   function Top (Stack : Simple_Stack) return Generic_Type_Access;
-   --  Return a pointer to the top of the stack.
-   --  Note that modifying the contents of the returned pointer will
-   --  modify the contents of the stack.
-   --  Raise Stack_Empty if Stack is empty.
-
-   function Next (Stack : Simple_Stack) return Generic_Type_Access;
-   --  Return a pointer to the next item of the stack, or null if none.
-
-   procedure Traverse_Stack
-     (Stack    : Simple_Stack;
-      Callback : access function (Obj : Generic_Type) return Boolean);
-   --  Traverse Stack and call Callback on each element of the stack.
-   --  Stop when Stack is traversed or when Callback returns False.
-
-   procedure Clear (Stack : in out Simple_Stack);
-   --  Clear the contents of stack. This automatically frees memory for Stack
-   --  as well.
-
-   function Is_Empty (Stack : Simple_Stack) return Boolean;
-   --  Returns True if the stack is empty.
-
-private
-   type Type_Array is array (Positive range <>) of aliased Generic_Type;
-   type Type_Array_Access is access all Type_Array;
-
-   type Simple_Stack is record
-      Values : Type_Array_Access;  --  Index starts at 1
-      Last   : Natural := 0; --  Last significant element in Values
-   end record;
-
-   pragma Inline (Push);
-   pragma Inline (Pop);
-   pragma Inline (Top);
-   pragma Inline (Next);
-end Generic_Stack;
diff --git a/packages/ada-mode/gps_source/indent_stack.ads 
b/packages/ada-mode/gps_source/indent_stack.ads
deleted file mode 100755
index 9f3c6ae..0000000
--- a/packages/ada-mode/gps_source/indent_stack.ads
+++ /dev/null
@@ -1,32 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2002-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-with Generic_Stack;
-
-package Indent_Stack is
-
-   type Indent_Type is record
-      Level            : Integer;
-      Align_Arrow      : Natural;
-      --  The column on which to align arrow delimiters
-      Line             : Natural;
-      Continuation_Val : Natural;
-   end record;
-
-   package Stack is new Generic_Stack (Indent_Type);
-
-end Indent_Stack;
diff --git a/packages/ada-mode/gps_source/language.adb 
b/packages/ada-mode/gps_source/language.adb
deleted file mode 100755
index 9b94897..0000000
--- a/packages/ada-mode/gps_source/language.adb
+++ /dev/null
@@ -1,1051 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2000-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-with Ada.Unchecked_Deallocation;
-with Ada.Strings.Maps.Constants;
-with Ada.Strings.Unbounded;            use Ada.Strings.Unbounded;
-with Ada.Wide_Wide_Characters.Unicode; use Ada.Wide_Wide_Characters.Unicode;
-with Ada.Characters.Wide_Wide_Latin_1;
-with GNAT.Expect;                 use GNAT.Expect;
-with GNAT.Regpat;                 use GNAT.Regpat;
-with GNATCOLL.Symbols;            use GNATCOLL.Symbols;
-with GNATCOLL.Utils;              use GNATCOLL.Utils;
-with String_Utils;                use String_Utils;
-with UTF8_Utils;                  use UTF8_Utils;
-
-package body Language is
-
-   Default_Word_Character_Set : constant Character_Set :=
-     Constants.Letter_Set or Constants.Decimal_Digit_Set or To_Set ("_");
-   --  Default character set for keywords and indentifiers
-
-   procedure Looking_At
-     (Lang      : access Language_Root;
-      Buffer    : String;
-      First     : Natural;
-      Entity    : out Language_Entity;
-      Next_Char : out Positive;
-      Line      : out Natural;
-      Column    : out Natural);
-   --  Internal version of Looking_At, which also returns the Line and Column,
-   --  considering that Buffer (First) is at line 1 column 1.
-   --  Column is a byte index, not a character index.
-
-   ---------------------------
-   -- Can_Tooltip_On_Entity --
-   ---------------------------
-
-   function Can_Tooltip_On_Entity
-     (Lang   : access Language_Root;
-      Entity : String) return Boolean
-   is
-      pragma Unreferenced (Lang, Entity);
-   begin
-      return True;
-   end Can_Tooltip_On_Entity;
-
-   ---------------------
-   -- Scope_Separator --
-   ---------------------
-
-   function Scope_Separator
-     (Lang : access Language_Root) return String
-   is
-      pragma Unreferenced (Lang);
-   begin
-      return ".";
-   end Scope_Separator;
-
-   ----------------------
-   -- Explorer_Regexps --
-   ----------------------
-
-   function Explorer_Regexps
-     (Lang : access Language_Root) return Explorer_Categories
-   is
-      pragma Unreferenced (Lang);
-      E : Explorer_Categories (1 .. 0);
-   begin
-      return E;
-   end Explorer_Regexps;
-
-   ----------
-   -- Free --
-   ----------
-
-   procedure Free (Context : in out Language_Context_Access) is
-      procedure Unchecked_Free is new Ada.Unchecked_Deallocation
-        (Language_Context, Language_Context_Access);
-
-      Var : GNAT.Expect.Pattern_Matcher_Access :=
-        GNAT.Expect.Pattern_Matcher_Access
-          (Context.Syntax.New_Line_Comment_Start_Regexp);
-   begin
-      if Context /= null then
-         GNAT.Strings.Free (Context.Syntax.Comment_Start);
-         GNAT.Strings.Free (Context.Syntax.Comment_End);
-         Basic_Types.Unchecked_Free (Var);
-         GNAT.Strings.Free (Context.Syntax.New_Line_Comment_Start);
-         Unchecked_Free (Context);
-      end if;
-   end Free;
-
-   ----------
-   -- Free --
-   ----------
-
-   procedure Free (Lang : in out Language_Access) is
-      procedure Internal is new Ada.Unchecked_Deallocation
-        (Language_Root'Class, Language_Access);
-   begin
-      if Lang /= null then
-         Free (Lang.all);
-         Internal (Lang);
-      end if;
-   end Free;
-
-   procedure Free (List : in out Construct_List) is
-      Info, Tmp : Construct_Access;
-
-      procedure Free is new
-        Ada.Unchecked_Deallocation (Construct_Information, Construct_Access);
-
-   begin
-      Info := List.First;
-
-      loop
-         exit when Info = null;
-
-         GNAT.Strings.Free (Info.Profile);
-         Tmp := Info;
-         Info := Info.Next;
-         Free (Tmp);
-      end loop;
-
-      List.First   := null;
-      List.Current := null;
-      List.Last    := null;
-   end Free;
-
-   ----------
-   -- Free --
-   ----------
-
-   procedure Free (Category   : in out Explorer_Category) is
-   begin
-      Basic_Types.Unchecked_Free (Category.Regexp);
-   end Free;
-
-   ----------
-   -- Free --
-   ----------
-
-   procedure Free (Categories : in out Explorer_Categories) is
-   begin
-      for C in Categories'Range loop
-         Free (Categories (C));
-      end loop;
-   end Free;
-
-   --------------------
-   -- Is_System_File --
-   --------------------
-
-   function Is_System_File
-     (Lang      : access Language_Root;
-      File_Name : String) return Boolean
-   is
-      pragma Unreferenced (Lang, File_Name);
-   begin
-      return False;
-   end Is_System_File;
-
-   ----------------
-   -- Looking_At --
-   ----------------
-
-   procedure Looking_At
-     (Lang      : access Language_Root;
-      Buffer    : String;
-      First     : Natural;
-      Entity    : out Language_Entity;
-      Next_Char : out Positive)
-   is
-      Line, Column : Natural;
-   begin
-      Looking_At (Lang, Buffer, First, Entity, Next_Char, Line, Column);
-   end Looking_At;
-
-   procedure Looking_At
-     (Lang      : access Language_Root;
-      Buffer    : String;
-      First     : Natural;
-      Entity    : out Language_Entity;
-      Next_Char : out Positive;
-      Line      : out Natural;
-      Column    : out Natural)
-   is
-      Context       : constant Language_Context_Access :=
-                        Get_Language_Context (Language_Access (Lang));
-      Keys          : constant GNAT.Expect.Pattern_Matcher_Access :=
-                        Keywords (Language_Access (Lang));
-      Buffer_Length : constant Natural := Buffer'Last - First + 1;
-      Matched       : Match_Array (0 .. 1);
-      C             : Wide_Wide_Character;
-      Tmp           : Natural;
-      Found         : Boolean;
-
-      use GNAT.Strings;
-
-   begin
-      Line   := 1;
-      Column := 1;
-
-      if Buffer (First) = ASCII.LF then
-         Next_Char := First + 1;
-         Line := Line + 1;
-         Column := 1;
-         Entity := Normal_Text;
-         return;
-      end if;
-
-      --  Do we have a comment ?
-
-      if Context.Syntax.Comment_Start /= null
-        and then Starts_With
-          (Buffer (First .. Buffer'Last), Context.Syntax.Comment_Start.all)
-      then
-         Entity := Comment_Text;
-         Next_Char := First + Context.Syntax.Comment_Start'Length;
-         Column := Column + Context.Syntax.Comment_Start'Length;
-
-         while Starts_With
-           (Buffer (Next_Char .. Buffer'Last), Context.Syntax.Comment_End.all)
-         loop
-            Tmp := UTF8_Next_Char (Buffer, Next_Char);
-            Column := Column + (Tmp - Next_Char);
-            Next_Char := Tmp;
-
-            if Next_Char <= Buffer'Last
-              and then Buffer (Next_Char) = ASCII.LF
-            then
-               Column := 1;
-               Line := Line + 1;
-            end if;
-         end loop;
-
-         Next_Char := Next_Char + Context.Syntax.Comment_End'Length;
-         Column := Column + Context.Syntax.Comment_End'Length;
-         return;
-      end if;
-
-      --  Do we have a comment that ends on newline ?
-
-      if Context.Syntax.New_Line_Comment_Start /= null then
-         Found := Starts_With
-           (Buffer (First .. Buffer'Last),
-            Context.Syntax.New_Line_Comment_Start.all);
-      elsif Context.Syntax.New_Line_Comment_Start_Regexp /= null then
-         Found := Match (Context.Syntax.New_Line_Comment_Start_Regexp.all,
-                         Buffer (First .. Buffer'Last));
-      else
-         Found := False;
-      end if;
-
-      if Found  then
-         Entity := Comment_Text;
-         Next_Char := UTF8_Next_Char (Buffer, First);
-
-         while Next_Char <= Buffer'Last
-           and then Buffer (Next_Char) /= ASCII.LF
-         loop
-            Tmp := UTF8_Next_Char (Buffer, Next_Char);
-            Column := Column + (Tmp - Next_Char);
-            Next_Char := Tmp;
-         end loop;
-
-         return;
-      end if;
-
-      --  Do we have a string ?
-      --  Note that we consider that strings never span over multiple lines...
-
-      if Buffer (First) = Context.String_Delimiter then
-         Entity := String_Text;
-         Next_Char := First;
-
-         if Next_Char < Buffer'Last
-           and then Buffer (Next_Char + 1) /= ASCII.LF
-         then
-            loop
-               Next_Char := UTF8_Next_Char (Buffer, Next_Char);
-               Column := Column + 1;
-
-               exit when Next_Char >= Buffer'Last
-                 or else Buffer (Next_Char + 1) = ASCII.LF
-                 or else
-                   (Buffer (Next_Char) = Context.String_Delimiter
-                      and then
-                        (Context.Quote_Character = ASCII.NUL
-                         or else
-                           Buffer (Next_Char - 1) /= Context.Quote_Character));
-            end loop;
-         end if;
-
-         if Next_Char <= Buffer'Last then
-            Tmp := UTF8_Next_Char (Buffer, Next_Char);
-            Column := Column + (Tmp - Next_Char);
-            Next_Char := Tmp;
-         end if;
-
-         return;
-      end if;
-
-      --  A protected constant character
-      --  ??? The following test still does not handle cases such as
-      --  '\012' for instance, or multi-byte character constants.
-
-      if Buffer_Length > 4
-        and then Buffer (First) = Context.Constant_Character
-        and then Buffer (First + 1) = Context.Quote_Character
-        and then Buffer (First + 3) = Context.Constant_Character
-      then
-         Entity := Character_Text;
-         Next_Char := First + 4;
-         Column := Column + 4;
-         return;
-      end if;
-
-      --  A constant character
-
-      if Buffer_Length > 3
-        and then Buffer (First) = Context.Constant_Character
-        and then Buffer (First + 2) = Context.Constant_Character
-      then
-         Entity := Character_Text;
-         Next_Char := First + 3;
-         Column := Column + 3;
-         return;
-      end if;
-
-      --  Do we have a keyword ?
-      --  ??? It is assumed the regexp should check at the current char
-      --  only, not beyond for efficiency...
-
-      if Keys /= null then
-         Match (Keys.all, Buffer (First .. Buffer'Last), Matched);
-         if Matched (0) /= No_Match then
-            Next_Char := UTF8_Next_Char (Buffer, Matched (0).Last);
-            Column := Column + Matched (0).Last - Matched (0).First + 1;
-            Entity := Keyword_Text;
-            return;
-         end if;
-      end if;
-
-      --  Another special character, not part of a word: just skip it, before
-      --  doing some regexp matching
-      --  It is better to return a pointer to the newline, so that the icons
-      --  on the side might be displayed properly.
-
-      if not Is_Word_Char
-        (Language_Access (Lang),
-           UTF8_Get_Char (Buffer (First .. Buffer'Last)))
-      then
-         Entity := Normal_Text;
-         Next_Char := UTF8_Next_Char (Buffer, First);
-         Column := Column + (Next_Char - First);
-
-         while Next_Char <= Buffer'Last loop
-            C := UTF8_Get_Char (Buffer (Next_Char .. Buffer'Last));
-
-            exit when C = Ada.Characters.Wide_Wide_Latin_1.LF
-              or else not Is_Space (C);
-
-            Tmp := UTF8_Next_Char (Buffer, Next_Char);
-            Column := Column + (Tmp - Next_Char);
-            Next_Char := Tmp;
-         end loop;
-
-         return;
-      end if;
-
-      --  Skip to the next meaningful character. we know we are
-      --  starting with a letter
-
-      Next_Char := UTF8_Next_Char (Buffer, First);
-      Column := Column + (Next_Char - First);
-      Entity := Normal_Text;
-
-      if Buffer (Next_Char) = ASCII.LF then
-         return;
-      end if;
-
-      --  Skip the current word. We only take into account Is_Entity_Letter,
-      --  not the full set of chars supported by the language for its keywords
-      --  because of cases like "<foo>bar</foo>" in XML, which would otherwise
-      --  consider this as a single word when they are in fact several.
-
-      while Next_Char <= Buffer'Last
-        and then Is_Entity_Letter
-          (UTF8_Get_Char (Buffer (Next_Char .. Buffer'Last)))
-      loop
-         Tmp := UTF8_Next_Char (Buffer, Next_Char);
-         Column := Column + (Tmp - Next_Char);
-         Next_Char := Tmp;
-      end loop;
-   end Looking_At;
-
-   -------------------------------------
-   -- To_Simple_Construct_Information --
-   -------------------------------------
-
-   procedure To_Simple_Construct_Information
-     (Construct : Construct_Information;
-      Simple    : out Simple_Construct_Information;
-      Full_Copy : Boolean)
-   is
-      pragma Unreferenced (Full_Copy);
-   begin
-      Simple :=
-        (Category        => Construct.Category,
-         Is_Declaration  => Construct.Is_Declaration,
-         Is_Generic_Spec => Construct.Is_Generic_Spec,
-         Visibility      => Construct.Visibility,
-         Name            => Construct.Name,
-         Sloc_Start      => Construct.Sloc_Start,
-         Sloc_Entity     => Construct.Sloc_Entity,
-         Sloc_End        => Construct.Sloc_End,
-         Attributes      => Construct.Attributes,
-         Profile_Cache    => null);
-   end To_Simple_Construct_Information;
-
-   ------------------
-   -- Comment_Line --
-   ------------------
-
-   function Comment_Line
-     (Lang    : access Language_Root;
-      Line    : String;
-      Comment : Boolean := True;
-      Clean   : Boolean := False) return String
-   is
-      pragma Unreferenced (Lang, Comment, Clean);
-   begin
-      return Line;
-   end Comment_Line;
-
-   ------------------
-   -- Comment_Block --
-   ------------------
-
-   function Comment_Block
-     (Lang    : access Language_Root;
-      Block   : String;
-      Comment : Boolean := True;
-      Clean   : Boolean := False) return String
-   is
-      Start_Of_Line : Natural := Block'First;
-      End_Of_Line   : Natural;
-      New_Block     : Unbounded_String := Null_Unbounded_String;
-   begin
-      loop
-         End_Of_Line := Next_Line (Block, Start_Of_Line);
-         if End_Of_Line /= Block'Last and then End_Of_Line /= Block'First then
-            End_Of_Line := End_Of_Line - 1;
-         end if;
-
-         Append
-           (New_Block,
-            Comment_Line
-              (Language_Access (Lang),
-               Block (Start_Of_Line .. End_Of_Line),
-               Comment,
-               Clean));
-
-         Start_Of_Line := Next_Line (Block, Start_Of_Line);
-         exit when Start_Of_Line = Block'Last;
-      end loop;
-
-      return To_String (New_Block);
-   end Comment_Block;
-
-   ----------------------
-   -- Parse_Constructs --
-   ----------------------
-
-   procedure Parse_Constructs
-     (Lang   : access Language_Root;
-      File   : GNATCOLL.VFS.Virtual_File;
-      Buffer : UTF8_String;
-      Result : out Construct_List)
-   is
-      pragma Unreferenced (File);
-      Matches     : Match_Array (0 .. 10);
-      Categories  : constant Explorer_Categories :=
-                      Explorer_Regexps (Language_Access (Lang));
-      First       : Natural;
-      Line        : Natural;
-      Line_Pos    : Natural;
-      Sloc_Entity : Source_Location;
-      Sloc_Start  : Source_Location;
-      Sloc_End    : Source_Location;
-      Info        : Construct_Access;
-      Match_Index : Natural;
-      End_Index   : Natural;
-
-      procedure Forward
-        (Index : Natural;
-         Sloc  : in out Source_Location);
-      --  Compute Line and Column fields in Sloc and update Line and Line_Pos
-
-      -------------
-      -- Forward --
-      -------------
-
-      procedure Forward
-        (Index : Natural;
-         Sloc  : in out Source_Location) is
-      begin
-         for J in Index .. Sloc.Index loop
-            if Buffer (J) = ASCII.LF then
-               Line     := Line + 1;
-               Line_Pos := J;
-            end if;
-         end loop;
-
-         Sloc.Line   := Line;
-         Sloc.Column := Sloc.Index - Line_Pos;
-      end Forward;
-
-   begin
-      Result := (null, null, null, 0);
-
-      --  For each category, parse the buffer
-
-      for C in Categories'Range loop
-         First    := Buffer'First;
-         Line     := 1;
-         Line_Pos := 0;
-
-         loop
-            Match (Categories (C).Regexp.all,
-                   Buffer (First .. Buffer'Last),
-                   Matches);
-
-            exit when Matches (0) = No_Match;
-
-            Match_Index := Categories (C).Position_Index;
-            End_Index   := Categories (C).End_Index;
-
-            if Matches (Match_Index) /= No_Match then
-               Sloc_Start.Index  := Matches (0).First;
-               Sloc_Entity.Index := Matches (Match_Index).First;
-               Sloc_End.Index    := Matches (End_Index).Last;
-
-               Forward (First, Sloc_Start);
-               Forward (Sloc_Start.Index + 1, Sloc_Entity);
-               Forward (Sloc_Entity.Index + 1, Sloc_End);
-
-               Info           := Result.Current;
-               Result.Current := new Construct_Information;
-
-               if Result.First = null then
-                  Result.First := Result.Current;
-               else
-                  Result.Current.Prev := Info;
-                  Result.Current.Next := Info.Next;
-                  Info.Next           := Result.Current;
-               end if;
-
-               Result.Last := Result.Current;
-               Result.Current.Category := Categories (C).Category;
-               Result.Current.Category_Name := Categories (C).Category_Name;
-               Result.Size := Result.Size + 1;
-
-               if Categories (C).Make_Entry /= null then
-                  Result.Current.Name := Lang.Symbols.Find
-                    (Categories (C).Make_Entry (Buffer, Matches));
-               else
-                  Result.Current.Name := Lang.Symbols.Find
-                    (Buffer (Matches (Match_Index).First ..
-                             Matches (Match_Index).Last));
-               end if;
-
-               --  Result.Current.Profile := ???
-
-               Result.Current.Sloc_Entity    := Sloc_Entity;
-               Result.Current.Sloc_Start     := Sloc_Start;
-               Result.Current.Sloc_End       := Sloc_End;
-               Result.Current.Is_Declaration := False;
-            end if;
-
-            First := Matches (End_Index).Last + 1;
-         end loop;
-      end loop;
-   end Parse_Constructs;
-
-   --------------------
-   -- Parse_Entities --
-   --------------------
-
-   procedure Parse_Entities
-     (Lang     : access Language_Root;
-      Buffer   : String;
-      Callback : Entity_Callback)
-   is
-      use type GNAT.Strings.String_Access;
-      Index      : Natural := Buffer'First;
-      Next_Char  : Natural;
-      End_Char   : Natural;
-      Entity     : Language_Entity;
-      Line       : Natural;
-      Line_Inc   : Natural;
-      Col        : Natural;
-      Column     : Natural;
-      Column_Inc : Natural;
-
-   begin
-      Line := 1;
-      Column := 1;
-
-      while Index < Buffer'Last loop
-         Looking_At
-           (Lang, Buffer, Index, Entity, Next_Char, Line_Inc, Column_Inc);
-
-         if Next_Char = Buffer'Last then
-            End_Char := Buffer'Last;
-         else
-            End_Char := Next_Char - 1;
-         end if;
-
-         --  If we are still on the same line, Column_Inc is an increment
-         --  compared to what we have initially, otherwise it is an absolute
-         --  column.
-
-         if Line_Inc = 1 then
-            Column_Inc := Column + Column_Inc - 1;
-         end if;
-
-         --  Looking_At goes always one character beyond characters and
-         --  strings, otherwise next call to Looking_At would start on
-         --  a string or character delimiter. Keywords are also set one
-         --  character beyond.
-
-         if Column_Inc > 1
-           and then (Entity = String_Text
-                     or else Entity = Character_Text
-                     or else Entity = Keyword_Text)
-         then
-            Col := Column_Inc - 1;
-         else
-            Col := Column_Inc;
-         end if;
-
-         exit when Callback
-           (Entity,
-            (Line, Column, Index),
-            (Line + Line_Inc - 1, Col, End_Char),
-            Get_Language_Context
-              (Language_Access (Lang)).Syntax.Comment_Start /= null
-              and then Entity = Comment_Text and then Next_Char > Buffer'Last);
-
-         Line := Line + Line_Inc - 1;
-         Column := Column_Inc;
-
-         Index := Next_Char;
-      end loop;
-   end Parse_Entities;
-
-   ---------------------------
-   -- Get_Referenced_Entity --
-   ---------------------------
-
-   procedure Get_Referenced_Entity
-     (Lang       : access Language_Root;
-      Buffer     : String;
-      Construct  : Simple_Construct_Information;
-      Sloc_Start : out Source_Location;
-      Sloc_End   : out Source_Location;
-      Success    : out Boolean;
-      From_Index : Natural := 0)
-   is
-      pragma Unreferenced
-        (Lang, Buffer, Construct, Sloc_Start, Sloc_End, From_Index);
-   begin
-      Success := False;
-   end Get_Referenced_Entity;
-
-   -------------------
-   -- Format_Buffer --
-   -------------------
-
-   procedure Format_Buffer
-     (Lang                : access Language_Root;
-      Buffer              : String;
-      Replace             : Replace_Text_Callback;
-      From, To            : Natural := 0;
-      Indent_Params       : Indent_Parameters := Default_Indent_Parameters;
-      Indent_Offset       : Natural := 0;
-      Case_Exceptions     : Case_Handling.Casing_Exceptions :=
-        Case_Handling.No_Casing_Exception;
-      Is_Optional_Keyword : access function (S : String)
-                                             return Boolean := null)
-   is
-      pragma Unreferenced
-        (Lang, Indent_Offset, Case_Exceptions, Is_Optional_Keyword);
-
-      Use_Tabs        : Boolean renames Indent_Params.Use_Tabs;
-      Index           : Natural;
-      Indent          : Natural := 0;
-      Start_Of_Line   : Natural;
-      Start_Prev_Line : Natural;
-
-      function Find_Line_Start
-        (Buffer : String; Index : Natural) return Natural;
-      --  Find the starting ASCII.LF character of the line positioned at
-      --  Buffer (Index).
-
-      ---------------------
-      -- Find_Line_Start --
-      ---------------------
-
-      function Find_Line_Start
-        (Buffer : String; Index : Natural) return Natural
-      is
-         Result : Natural := Index;
-      begin
-         while Result > Buffer'First
-           and then Buffer (Result) /= ASCII.LF
-         loop
-            Result := Result - 1;
-         end loop;
-
-         return Result;
-      end Find_Line_Start;
-
-   begin
-      if Buffer'Length <= 1 or else To > From + 1 then
-         return;
-      end if;
-
-      Start_Of_Line   := Find_Line_Start (Buffer, Buffer'Last - 1);
-      Start_Prev_Line := Find_Line_Start (Buffer, Start_Of_Line - 1);
-
-      --  Compute the indentation level
-
-      for J in Start_Prev_Line + 1 .. Start_Of_Line - 1 loop
-         if Buffer (J) = ' ' then
-            Indent := Indent + 1;
-         elsif Buffer (J) = ASCII.HT then
-            Indent := Indent + Tab_Width - (Indent mod Tab_Width);
-         else
-            exit;
-         end if;
-      end loop;
-
-      --  Find the blank slice to replace
-
-      Index := Start_Of_Line + 1;
-
-      while Index < Buffer'Last
-        and then (Buffer (Index) = ' ' or else Buffer (Index) = ASCII.HT)
-      loop
-         Index := Index + 1;
-      end loop;
-
-      Replace
-        (To, 1, Index - Start_Of_Line,
-         Blank_Slice (Indent, Use_Tabs, Tab_Width));
-   end Format_Buffer;
-
-   -------------------
-   -- Category_Name --
-   -------------------
-
-   function Category_Name
-     (Category : Language.Language_Category;
-      Name     : GNATCOLL.Symbols.Symbol := GNATCOLL.Symbols.No_Symbol)
-      return String
-   is
-   begin
-      if Name /= No_Symbol then
-         return Get (Name).all;
-      end if;
-
-      case Category is
-         when Cat_Unknown               => return "";
-         when Cat_Custom                => return "custom";
-         when Cat_Package               => return "package";
-         when Cat_Namespace             => return "namespace";
-         when Cat_Task                  => return "task";
-         when Cat_Procedure             => return "subprogram";
-         when Cat_Function              => return "subprogram";
-         when Cat_Method                => return "method";
-         when Cat_Constructor           => return "constructor";
-         when Cat_Destructor            => return "destructor";
-         when Cat_Protected             => return "protected";
-         when Cat_Entry                 => return "entry";
-         when Cat_Class                 => return "class";
-         when Cat_Structure             => return "structure";
-         when Cat_Case_Inside_Record    => return "structure variant part";
-         when Cat_Union                 => return "union";
-         when Cat_Type                  => return "type";
-         when Cat_Subtype               => return "subtype";
-         when Cat_Variable              => return "variable";
-         when Cat_Local_Variable        => return "variable";
-         when Cat_Parameter             => return "parameter";
-         when Cat_Discriminant          => return "discriminant";
-         when Cat_Field                 => return "field";
-         when Cat_Literal               => return "literal";
-         when Cat_Representation_Clause => return "representation clause";
-         when Cat_With                  => return "with";
-         when Cat_Use                   => return "use";
-         when Cat_Include               => return "include";
-         when Construct_Category        => return "";
-         when Cat_Exception_Handler     => return "";
-         when Cat_Pragma                => return "pragma";
-         when Cat_Aspect                => return "aspect";
-      end case;
-   end Category_Name;
-
-   --------------------------------
-   -- Get_Indentation_Parameters --
-   --------------------------------
-
-   procedure Get_Indentation_Parameters
-     (Lang         : access Language_Root;
-      Params       : out Indent_Parameters;
-      Indent_Style : out Indentation_Kind) is
-   begin
-      Params       := Lang.Indent_Params;
-      Indent_Style := Lang.Indent_Style;
-   end Get_Indentation_Parameters;
-
-   --------------------------------
-   -- Set_Indentation_Parameters --
-   --------------------------------
-
-   procedure Set_Indentation_Parameters
-     (Lang         : access Language_Root;
-      Params       : Indent_Parameters;
-      Indent_Style : Indentation_Kind) is
-   begin
-      Lang.Indent_Params := Params;
-      Lang.Indent_Style  := Indent_Style;
-   end Set_Indentation_Parameters;
-
-   ----------
-   -- Free --
-   ----------
-
-   procedure Free (Fields : in out Project_Field_Array) is
-   begin
-      for F in Fields'Range loop
-         Strings.Free (Fields (F).Attribute_Name);
-         Strings.Free (Fields (F).Attribute_Index);
-         Strings.Free (Fields (F).Description);
-      end loop;
-   end Free;
-
-   ------------------------
-   -- Word_Character_Set --
-   ------------------------
-
-   function Word_Character_Set
-     (Lang : access Language_Root)
-      return Character_Set
-   is
-      pragma Unreferenced (Lang);
-   begin
-      return Default_Word_Character_Set;
-   end Word_Character_Set;
-
-   ------------------
-   -- Is_Word_Char --
-   ------------------
-
-   function Is_Word_Char
-     (Lang : access Language_Root; Char : Wide_Wide_Character) return Boolean
-   is
-      pragma Unreferenced (Lang);
-   begin
-      return Is_Entity_Letter (Char);
-   end Is_Word_Char;
-
-   ---------
-   -- "=" --
-   ---------
-
-   overriding function "=" (S1, S2 : Source_Location) return Boolean is
-   begin
-      if S1.Index > 0 and then S2.Index > 0 then
-         return S1.Index = S2.Index;
-      else
-         return S1.Line = S2.Line
-           and then S1.Column = S2.Column;
-      end if;
-   end "=";
-
-   ---------
-   -- "<" --
-   ---------
-
-   function "<" (S1, S2 : Source_Location) return Boolean is
-   begin
-      if S1.Index > 0 and then S2.Index > 0 then
-         return S1.Index < S2.Index;
-      elsif S1.Line = S2.Line then
-         return S1.Column < S2.Column;
-      else
-         return S1.Line < S2.Line;
-      end if;
-   end "<";
-
-   ----------
-   -- "<=" --
-   ----------
-
-   function "<=" (S1, S2 : Source_Location) return Boolean is
-   begin
-      return S1 = S2 or else S1 < S2;
-   end "<=";
-
-   ---------
-   -- ">" --
-   ---------
-
-   function ">" (S1, S2 : Source_Location) return Boolean is
-   begin
-      return S2 < S1;
-   end ">";
-
-   ----------
-   -- ">=" --
-   ----------
-
-   function ">=" (S1, S2 : Source_Location) return Boolean is
-   begin
-      return not (S1 < S2);
-   end ">=";
-
-   ---------------------------
-   -- Parse_Tokens_Backward --
-   ---------------------------
-
-   procedure Parse_Tokens_Backwards
-     (Lang              : access Language_Root;
-      Buffer            : UTF8_String;
-      Start_Offset      : String_Index_Type;
-      End_Offset        : String_Index_Type := 0;
-      --   ??? This analysis should be done when looking for comments !!!
-      Callback          :
-      access procedure (Token : Token_Record;
-                        Stop : in out Boolean))
-   is
-      pragma Unreferenced (Lang);
-      Lowest : constant String_Index_Type :=
-        String_Index_Type'Max (End_Offset, String_Index_Type (Buffer'First));
-      Index  : String_Index_Type := Start_Offset;
-      Stop   : Boolean := False;
-   begin
-      if Index not in Lowest .. String_Index_Type (Buffer'Last) then
-         return;
-      else
-         Skip_Word
-           (Buffer (Natural (Lowest) .. Natural (Index)),
-            Natural (Index),
-            Step => -1);
-
-         Callback
-           ((Tok_Type    => No_Token,
-             Token_First => Index + 1,
-             Token_Last  => Start_Offset),
-            Stop);
-      end if;
-   end Parse_Tokens_Backwards;
-
-   ------------------------------
-   -- Parse_Reference_Backward --
-   ------------------------------
-
-   function Parse_Reference_Backwards
-     (Lang              : access Language_Root;
-      Buffer            : UTF8_String;
-      Start_Offset      : String_Index_Type;
-      End_Offset        : String_Index_Type := 0) return String
-   is
-      Buf_Start : Integer := 1;
-      Buf_End   : Integer := 0;
-
-      procedure Callback
-        (Token : Token_Record;
-         Stop  : in out Boolean);
-
-      procedure Callback
-        (Token : Token_Record;
-         Stop  : in out Boolean)
-      is
-      begin
-         Buf_End := Integer (Token.Token_Last);
-         Buf_Start := Integer (Token.Token_First);
-         Stop := True;
-      end Callback;
-
-   begin
-
-      Lang.Parse_Tokens_Backwards
-        (Buffer            => Buffer,
-         Start_Offset      => Start_Offset,
-         End_Offset        => End_Offset,
-         Callback          => Callback'Access);
-
-      return Buffer (Buf_Start .. Buf_End);
-   end Parse_Reference_Backwards;
-
-   -----------------
-   -- Set_Symbols --
-   -----------------
-
-   procedure Set_Symbols
-     (Self   : access Language_Root'Class;
-      Symbols : not null access GNATCOLL.Symbols.Symbol_Table_Record'Class) is
-   begin
-      Self.Symbols := Symbol_Table_Access (Symbols);
-   end Set_Symbols;
-
-   -------------
-   -- Symbols --
-   -------------
-
-   function Symbols
-     (Self : access Language_Root'Class)
-      return GNATCOLL.Symbols.Symbol_Table_Access is
-   begin
-      return Self.Symbols;
-   end Symbols;
-
-   ----------------------
-   -- Entities_Indexed --
-   ----------------------
-
-   function Entities_Indexed (Self : Language_Root) return Boolean is
-      pragma Unreferenced (Self);
-   begin
-      return False;
-   end Entities_Indexed;
-
-end Language;
diff --git a/packages/ada-mode/gps_source/language.ads 
b/packages/ada-mode/gps_source/language.ads
deleted file mode 100755
index f4d2820..0000000
--- a/packages/ada-mode/gps_source/language.ads
+++ /dev/null
@@ -1,864 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2000-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-with Ada.Strings.Maps;  use Ada.Strings.Maps;
-with Case_Handling;
-with GNAT.Expect;
-with GNAT.Regpat;       use GNAT;
-with GNAT.Strings;
-with GNATCOLL.Symbols;
-with GNATCOLL.Xref;
-with Basic_Types;       use Basic_Types;
-with GNATCOLL.Traces;   use GNATCOLL.Traces;
-with GNATCOLL.VFS;
-with Ada.Strings.Unbounded;
-
-package Language is
-
-   Clang_Support : GNATCOLL.Traces.Trace_Handle := GNATCOLL.Traces.Create
-     ("libclang_backend", GNATCOLL.Traces.On);
-
-   type Language_Root is abstract tagged limited private;
-   type Language_Access is access all Language_Root'Class;
-
-   Unexpected_Type : exception;
-
-   procedure Free (Lang : in out Language_Root) is null;
-   procedure Free (Lang : in out Language_Access);
-   --  Free the memory pointed to by Lang and set it to null
-
-   function Get_Name (Lang : access Language_Root) return String is abstract;
-   --  Return the name of the language
-
-   procedure Set_Symbols
-     (Self    : access Language_Root'Class;
-      Symbols : not null access GNATCOLL.Symbols.Symbol_Table_Record'Class);
-   function Symbols
-     (Self : access Language_Root'Class)
-      return GNATCOLL.Symbols.Symbol_Table_Access;
-   --  Get the symbol table.
-   --  The symbol table is set automatically when the language is registered in
-   --  the language_handler.
-
-   function Entities_Indexed (Self : Language_Root) return Boolean;
-   --  Should the entities of this language be indexed in the entities
-   --  database? This concerns only the ALI or LI information, used for the
-   --- purpose of e.g. completion for languages others than Ada. False by
-   --  default.
-
-   ------------------------
-   -- Types manipulation --
-   ------------------------
-   --  The following functions are provided to manipulate types and variables
-   --  for each language.
-
-   function Is_Simple_Type
-     (Lang : access Language_Root; Str : String) return Boolean is abstract;
-   --  Return True if Str is a simple type, like integer, ...
-   --  These are the types that don't need information from the debugger to
-   --  be known, ie we can save a call to the debugger when parsing the value
-   --  of a variable.
-
-   --------------------------------
-   -- Highlighting in the editor --
-   --------------------------------
-
-   type Language_Entity is
-     (Normal_Text,
-      Identifier_Text,
-      Partial_Identifier_Text,
-      Block_Text,
-      Type_Text,
-      Number_Text,
-      Keyword_Text,
-      Comment_Text,
-      Annotated_Keyword_Text,
-      Annotated_Comment_Text,
-      Aspect_Keyword_Text,
-      Aspect_Comment_Text,
-      Aspect_Text,
-      Character_Text,
-      String_Text,
-      Operator_Text);
-   pragma Convention (C, Language_Entity);
-   --  The entities found in a language.
-   --  Block_Text represents a block (subprogram, task, entry, declare block,
-   --  ...), and Type_Text represents a type. Block_Text and Type_Text are
-   --  currently triggered only in declarations and not in statements.
-   --  Annotated_Comment_Text represents special comments that contain
-   --  annotations, e.g. SPARK annotations.
-   --  Aspect_Text represents Ada 2012 or SPARK 2014 aspects.
-
-   subtype Identifier_Entity is Language_Entity
-     range Identifier_Text .. Type_Text;
-   --  All the entities that represent an identifier
-
-   subtype Standout_Language_Entity is Language_Entity
-     range Block_Text .. String_Text;
-   --  All the entities that have a special meaning. Used for syntax
-   --  highlighting for example.
-
-   procedure Looking_At
-     (Lang      : access Language_Root;
-      Buffer    : String;
-      First     : Natural;
-      Entity    : out Language_Entity;
-      Next_Char : out Positive);
-   --  Should return the type of entity that is present at the first position
-   --  in the buffer (starting at First).
-   --  Next_Char should be set to the index of the first character after the
-   --  entity.
-   --  First is required so that regexps can be used to match on e.g. start
-   --  of lines.
-
-   function Keywords
-     (Lang : access Language_Root) return Strings.String_Access is abstract;
-   --  Returns the uncompiled keyword regular expression. This string is used
-   --  to create the pattern matcher as returned by the version below.
-
-   function Keywords
-     (Lang : access Language_Root)
-      return GNAT.Expect.Pattern_Matcher_Access is abstract;
-   --  Return a regular expression that matches the keywords for the current
-   --  language.
-   --  Note: we return an access type (instead of a Pattern_Matcher) for
-   --  efficiency.
-
-   function Is_Word_Char
-     (Lang : access Language_Root; Char : Wide_Wide_Character) return Boolean;
-   --  Return True if Char belongs to the set of characters that compose a
-   --  keyword for this language. By default, this returns true for letters,
-   --  digits and underscore characters.
-
-   function Keywords
-     (Lang : access Language_Root) return GNAT.Strings.String_List is abstract;
-   --  Return a list of keywords, encoded in UTF-8.
-   --  For case-insensitive languages, the keywords are listed in lower case.
-   --  Caller must not free the results.
-
-   ----------------------------
-   -- Tooltips in the editor --
-   ----------------------------
-
-   function Can_Tooltip_On_Entity
-     (Lang   : access Language_Root;
-      Entity : String) return Boolean;
-   --  Return True if we should display a tooltip for the Entity.
-   --  Note that Entity is analyzed in the current context. This is used at
-   --  least for the gdb Ada mode, since we don't want to evaluate subprograms
-   --  when the type of tooltips in Simple.
-   --  By default, this simply returns True.
-
-   ------------------------
-   -- Naming conventions --
-   ------------------------
-
-   function Dereference_Name
-     (Lang : access Language_Root;
-      Name : String) return String is abstract;
-   --  Return the name to use to dereference Name (ie in Ada "Name.all", in
-   --  C "*Name", ...). Note that Name can be a composite name (Name.Field),
-   --  and thus might have to be protected with parentheses.
-
-   function Array_Item_Name
-     (Lang  : access Language_Root;
-      Name  : String;
-      Index : String) return String is abstract;
-   --  Return the name to use to access a specific element of an array.
-   --  Index is a comma-separated list of the indexes for all the dimensions,
-   --  as in "1,2".
-
-   function Record_Field_Name
-     (Lang  : access Language_Root;
-      Name  : String;
-      Field : String) return String is abstract;
-   --  Return the name to use for a specific field of a record.
-
-   function Scope_Separator
-     (Lang : access Language_Root) return String;
-   --  Return the scope separator for the language.
-   --  e.g. "." for Ada, "::" for C++
-   --  Default implementation return ".", so is suitable for Ada, Java.
-
-   ---------------------
-   -- Project support --
-   ---------------------
-
-   type Project_Field is record
-      Attribute_Name  : Strings.String_Access;
-      Attribute_Index : Strings.String_Access := null;
-      Description     : Strings.String_Access;
-      Values          : Strings.String_List_Access := null;
-      Editable        : Boolean := True;
-   end record;
-   No_Project_Field : constant Project_Field := (null, null, null, null, True);
-   type Project_Field_Array is array (Natural range <>) of Project_Field;
-
-   procedure Free (Fields : in out Project_Field_Array);
-   --  Free the contents of the array
-
-   ----------------------
-   -- Language Context --
-   ----------------------
-
-   type Language_Context is record
-      Syntax : GNATCOLL.Xref.Language_Syntax;
-      --  Syntax information that is also useful in the context of the
-      --  cross references.
-
-      String_Delimiter              : Character;
-      --  How strings start and end
-
-      Quote_Character               : Character;
-      --  The character used to quote (protect) the following one. If this
-      --  is set to ASCII.NUL, then there is no such character in the
-      --  language. For instance, it should be set to \ for C.
-
-      Constant_Character            : Character;
-      --  The character that starts and ends constant characters
-
-      Can_Indent                    : Boolean;
-      --  Whether indentation is supported by this language
-
-      Syntax_Highlighting           : Boolean;
-      --  Whether syntax highlighting is relevant to this language
-
-      Case_Sensitive                : Boolean;
-      --  Whether the language is case sensitive
-
-      Accurate_Xref                 : Boolean;
-      --  Whether cross reference information for this language is supposed
-      --  to be fully accurate (and therefore any mismatch means the xref info
-      --  is not up-to-date) or not.
-
-      Use_Semicolon                 : Boolean;
-      --  Whether semicolons are expected in sources and may be used as a
-      --  delimiter for syntax highlighting purposes.
-   end record;
-   --  This record describes the syntax of the language (for color
-   --  highlighting purposes). All the fields in this record are language
-   --  specific, and do not depend on the debugger used.
-
-   type Language_Context_Access is access all Language_Context;
-
-   function Get_Language_Context
-     (Lang : access Language_Root) return Language_Context_Access is abstract;
-   --  Return the context to use for a specific language
-
-   procedure Free (Context : in out Language_Context_Access);
-   --  Free the memory allocated for Context
-
-   ----------------------
-   -- Source Analyzing --
-   ----------------------
-
-   type Source_Location is record
-      Line   : Natural := 0;
-      --  Line number for this entity. Line numbers start at 1.
-
-      Column : Natural := 0;
-      --  Column number for this entity. This is an index in bytes, not
-      --  characters. This is set to 0 if the end is on the last character of
-      --  the previous line.
-      --  Column numbers start at 1 otherwise.
-
-      Index  : Natural := 0;
-      --  Index in the buffer for this entity
-   end record;
-   pragma Convention (C, Source_Location);
-
-   function ">" (S1, S2 : Source_Location) return Boolean;
-   function ">=" (S1, S2 : Source_Location) return Boolean;
-   function "<" (S1, S2 : Source_Location) return Boolean;
-   function "<=" (S1, S2 : Source_Location) return Boolean;
-   overriding function "=" (S1, S2 : Source_Location) return Boolean;
-
-   type Indent_Style is (Automatic, RM_Style, Non_RM_Style);
-   --  Indentation style used by some constructs (e.g. case statements in
-   --  Ada).
-   --  Automatic means that the engine will guess the best value.
-   --  RM_Style means follows the style recommended by the RM, if any
-   --  Non_RM_Style means do not follow the style recommended by the RM.
-
-   type Indent_Parameters is record
-      Indent_Level        : Natural;
-      Indent_Continue     : Natural;
-      Indent_Decl         : Natural;
-      Indent_Conditional  : Natural;
-      Indent_Record       : Natural;
-      Indent_Case_Extra   : Indent_Style;
-      Casing_Policy       : Case_Handling.Casing_Policy;
-      Reserved_Casing     : Case_Handling.Casing_Type;
-      Ident_Casing        : Case_Handling.Casing_Type;
-      Format_Operators    : Boolean;
-      Use_Tabs            : Boolean;
-      Align_On_Colons     : Boolean;
-      Align_On_Arrows     : Boolean;
-      Align_Decl_On_Colon : Boolean;
-      --  ??? Missing alignment parameters:
-      --      - assignments in declarations
-      --      - assignments in assignment statements
-
-      Indent_Comments     : Boolean;
-      Stick_Comments      : Boolean;
-   end record;
-   pragma Convention (C, Indent_Parameters);
-   --  Define all parameters to indent a source code.
-   --  Note that some of these parameters will be ignored, depending on the
-   --  actual language.
-   --
-   --  Indent_Level        number of spaces when indenting a block.
-   --  Indent_Continue     number of spaces for a continuation line.
-   --  Indent_Decl         number of spaces for multi-line variables
-   --                      declaration.
-   --  Indent_Conditional  extra number of spaces when indenting multi-line
-   --                      conditionals.
-   --  Indent_Record       extra number of spaces when indenting record types
-   --  Tab_Width           number of spaces for a tab character.
-   --  Indent_Case_Extra   whether to add extra indent level for case
-   --                      statements
-   --  Reserved_Casing     casing of reserved words.
-   --  Indent_Casing       casing of identifiers.
-   --  Format_Operators    whether operators should be reformatted (e.g. spaces
-   --                      added around "<")
-   --  Use_Tabs            whether tabs should be used instead of spaces.
-   --  Align_On_Colons     perform alignment on colons in declarations (Ada)
-   --                      whether to indent if/for/while constructs an extra
-   --                      level after '{'  (C/C++/Java)
-   --  Align_On_Arrows     perform alignment on arrows in associations
-   --  Align_Decl_On_Colon align variable declarations based on the ':' of the
-   --                      variable decl.
-   --  Indent_Comments     whether comments should be indented or left as is
-   --  Stick_Comments      whether comments should stick to previous line
-   --                      indentation in some cases (language defined).
-
-   Default_Indent_Parameters : constant Indent_Parameters :=
-     (Indent_Level        => 8,
-      Indent_Continue     => 2,
-      Indent_Decl         => 0,
-      Indent_Conditional  => 0,
-      Indent_Record       => 8,
-      Indent_Case_Extra   => Automatic,
-      Casing_Policy       => Case_Handling.Disabled,
-      Reserved_Casing     => Case_Handling.Unchanged,
-      Ident_Casing        => Case_Handling.Unchanged,
-      Format_Operators    => False,
-      Use_Tabs            => False,
-      Align_On_Colons     => False,
-      Align_On_Arrows     => False,
-      Align_Decl_On_Colon => False,
-      Indent_Comments     => True,
-      Stick_Comments      => False);
-
-   type Indentation_Kind is (None, Simple, Extended);
-   --  Indentation kinds:
-   --  None: no indentation should be performed
-   --  Simple: use the amount of white spaces from previous line
-   --  Extended: use a language specific parser to compute indentation
-
-   procedure Get_Indentation_Parameters
-     (Lang         : access Language_Root;
-      Params       : out Indent_Parameters;
-      Indent_Style : out Indentation_Kind);
-   --  Return the indentation parameters for this language
-
-   procedure Set_Indentation_Parameters
-     (Lang         : access Language_Root;
-      Params       : Indent_Parameters;
-      Indent_Style : Indentation_Kind);
-   --  Set the indentation parameters to use for this language.
-   --  ??? This wouldn't be necessary if we had access to the preferences from
-   --  the language hierarchy.
-
-   type Language_Category is
-     (Cat_Unknown,
-
-      ------------------------
-      -- Enclosing Entities --
-      ------------------------
-
-      Cat_Package,
-      Cat_Namespace,
-      Cat_Task,        --  Subprogram
-      Cat_Procedure,   --  Subprogram, Subprogram_Explorer
-      Cat_Function,    --  Subprogram, Subprogram_Explorer
-      Cat_Method,      --  Subprogram, Subprogram_Explorer
-      Cat_Constructor, --  Subprogram, Subprogram_Explorer
-      Cat_Destructor,  --  Subprogram, Subprogram_Explorer
-      Cat_Protected,   --  Subprogram
-      Cat_Entry,       --  Subprogram
-
-      ----------------
-      -- Data/Types --
-      ----------------
-
-      Cat_Class,
-      Cat_Structure,
-      Cat_Case_Inside_Record,
-      Cat_Union,
-      Cat_Type,
-      Cat_Subtype,
-      Cat_Variable,
-      Cat_Local_Variable,
-      Cat_Parameter,
-      Cat_Discriminant,
-      Cat_Field,
-      Cat_Literal,
-      Cat_Representation_Clause,
-
-      ----------------
-      -- Dependency --
-      ----------------
-
-      Cat_With,
-      Cat_Use,
-      Cat_Include,
-
-      ----------------
-      -- Constructs --
-      ----------------
-
-      Cat_Loop_Statement,
-      Cat_If_Statement,
-      Cat_Case_Statement,
-      Cat_Select_Statement,
-      Cat_Accept_Statement,
-      Cat_Declare_Block,
-      Cat_Return_Block,
-      Cat_Simple_Block,
-
-      --------------------
-      -- Sub-constructs --
-      --------------------
-
-      Cat_Exception_Handler,
-      Cat_Pragma,
-      Cat_Aspect,    --  Ada 2012 or SPARK 2014 aspect clauses
-
-      ----------------------
-      -- Custom construct --
-      ----------------------
-
-      Cat_Custom);
-   --  Keep the above synchronized with completion.py
-
-   subtype Enclosing_Entity_Category is Language_Category
-     range Cat_Package .. Cat_Union;
-
-   subtype Namespace_Category is Enclosing_Entity_Category
-     range Cat_Package .. Cat_Namespace;
-
-   subtype Subprogram_Category is Enclosing_Entity_Category
-     range Cat_Task .. Cat_Entry;
-
-   subtype Subprogram_Explorer_Category is Subprogram_Category
-     range Cat_Procedure .. Cat_Destructor;
-   --  Subprograms, as displayed in the explorer
-
-   subtype Data_Type_Category is Language_Category
-     range Cat_Class .. Cat_Variable;
-
-   subtype Type_Category is Data_Type_Category
-     range Cat_Class .. Cat_Subtype;
-
-   subtype Data_Category is Language_Category
-     range Cat_Variable .. Cat_Field;
-
-   subtype Dependency_Category is Language_Category
-     range Cat_With .. Cat_Include;
-
-   subtype Construct_Category is Language_Category
-     range Cat_Loop_Statement .. Cat_Simple_Block;
-
-   function Category_Name
-     (Category : Language.Language_Category;
-      Name     : GNATCOLL.Symbols.Symbol := GNATCOLL.Symbols.No_Symbol)
-      return String;
-   --  Return the external name to display in GUIs for a given category.
-   --  Name is an optional value, which is returned by this function if
-   --  not null.
-
-   type Construct_Visibility is
-     (Visibility_Private,
-      Visibility_Protected,
-      Visibility_Public);
-   --  Represents the visibility of a construct from the enclosing entity.
-
-   type Construct_Att_Key is range 1 .. 32;
-   --  This is the type of keys attributes. In order to minimize size, there
-   --  cannot be more than 32 attributes at all for a given language. Some
-   --  of them are language independent (up to Last_Gen_Att).
-   --  Specific languages might want to implement they own keys, which have to
-   --  start at Last_Gen_Att + 1.
-   --  We might consider raising the limit if we have specific needs.
-
-   type Construct_Attribute_Map is array (Construct_Att_Key) of Boolean;
-   pragma Pack (Construct_Attribute_Map);
-
-   No_Attribute : constant Construct_Attribute_Map := (others => False);
-
-   Access_Attribute : constant Construct_Att_Key  := 1;
-   Array_Attribute  : constant Construct_Att_Key  := 2;
-   --  ??? This list is currently incomplete. To be completed.
-
-   Last_Gen_Att : constant Construct_Att_Key := 2;
-
-   type Construct_Information;
-   type Construct_Access is access all Construct_Information;
-
-   type Construct_Information is record
-      Category       : Language_Category;
-      --  Define the kind of construct
-
-      Category_Name  : GNATCOLL.Symbols.Symbol := GNATCOLL.Symbols.No_Symbol;
-      --  Optional category name. Used if Category = Cat_Custom.
-
-      Is_Declaration : Boolean;
-      --  Is this a declaration (e.g function specification) ?
-
-      Is_Generic_Spec : Boolean := False;
-      --  Is this in a generic parameter?
-
-      Visibility     : Construct_Visibility := Visibility_Public;
-      --  Is the construct public, private or protected ?
-
-      Name           : GNATCOLL.Symbols.Symbol := GNATCOLL.Symbols.No_Symbol;
-      --  Name of the enclosing token. Null if not relevant for Token
-      --  This is encoded in UTF-8
-
-      Profile        : Strings.String_Access;
-      --  Subprogram profile, if Category is in Subprogram_Category.
-      --  Note that even for Subprogram_Category, Profile can be null if the
-      --  subprogram does not have any parameter.
-      --  This is encoded in UTF-8.
-
-      Sloc_Start     : Source_Location;
-      --  Location of beginning of the construct
-
-      Sloc_Entity    : Source_Location;
-      --  Location of beginning of the name of the entity. Only relevant if
-      --  Name is non null. This is different from Sloc_Start since Sloc_Start
-      --  is the beginning of the construct itself, e.g for
-      --  "procedure Foo;", Sloc_Start will point to the first character, while
-      --  Sloc_Entity will point to the 11th character.
-
-      Sloc_End       : Source_Location;
-      --  Location of end of the construct
-
-      Prev, Next     : Construct_Access;
-      --  Links to the previous and the next construct info
-
-      Attributes     : Construct_Attribute_Map := (others => False);
-      --  Set of construct attributes
-   end record;
-   --  Information needed to define a language construct (e.g procedure,
-   --  loop statement, ...).
-
-   type Simple_Construct_Information is record
-      Category        : Language_Category;
-      Is_Declaration  : Boolean;
-      Is_Generic_Spec : Boolean := False;
-      Visibility      : Construct_Visibility := Visibility_Public;
-      Name            : aliased GNATCOLL.Symbols.Symbol;
-      Sloc_Start      : aliased Source_Location;
-      Sloc_Entity     : aliased Source_Location;
-      Sloc_End        : aliased Source_Location;
-      Attributes      : aliased Construct_Attribute_Map;
-      Profile_Cache   : Ada.Strings.Unbounded.String_Access := null;
-   end record;
-   --  Same as above, but containing only the needed construct information, no
-   --  list constructions.
-
-   procedure To_Simple_Construct_Information
-     (Construct : Construct_Information;
-      Simple    : out Simple_Construct_Information;
-      Full_Copy : Boolean);
-   --  Convert a Construct_Information into a simple construct information
-
-   Null_Construct_Info : constant Construct_Information;
-
-   Null_Simple_Construct_Info : constant Simple_Construct_Information;
-
-   type Construct_List is record
-      First, Current, Last : Construct_Access;
-      Size                 : Integer := 0;
-   end record;
-
-   type Construct_List_Access is access all Construct_List;
-
-   procedure Free (List : in out Construct_List);
-   --  Free the contents of List.
-
-   function Word_Character_Set
-     (Lang : access Language_Root) return Character_Set;
-   --  Returns the character set used for the language identifiers
-
-   function Comment_Block
-     (Lang    : access Language_Root;
-      Block   : String;
-      Comment : Boolean := True;
-      Clean   : Boolean := False) return String;
-   --  Comment or uncomment (if Comment is false) a text block
-   --  Comment_Block (L, Comment_Block (L, A), Comment => False)
-   --  should return A.
-   --  If Clean is True, a clean up of of the block should be performed
-   --  (e.g. leading spaces are removed for each line).
-
-   procedure Parse_Constructs
-     (Lang   : access Language_Root;
-      File   : GNATCOLL.VFS.Virtual_File;
-      Buffer : UTF8_String;
-      Result : out Construct_List);
-   --  Parse the constructs contained in Buffer and store all the language
-   --  constructs with their source location in Result.
-
-   type Replace_Text_Callback is access procedure
-     (Line    : Natural;
-      First   : Natural;
-      Last    : Natural;
-      Replace : String);
-   --  Replacement procedure used by Format_Buffer below.
-   --  Replace the slice First .. Last by contents of Replace.
-   --  First and Last are byte offsets from the start of the line, not
-   --  character counts.
-
-   procedure Format_Buffer
-     (Lang                : access Language_Root;
-      Buffer              : String;
-      Replace             : Replace_Text_Callback;
-      From, To            : Natural := 0;
-      Indent_Params       : Indent_Parameters := Default_Indent_Parameters;
-      Indent_Offset       : Natural := 0;
-      Case_Exceptions     : Case_Handling.Casing_Exceptions :=
-        Case_Handling.No_Casing_Exception;
-      Is_Optional_Keyword : access function (S : String)
-                                             return Boolean := null);
-   --  Given a Buffer, reformat it, based on Indent_Params.
-   --  Reformat only lines comprised between From and To.
-   --  If Indent_Offset is > 0, it represents an additional level of
-   --  indentation when e.g. formatting a substring within a bigger
-   --  construct. Format_Buffer will take this value into account when
-   --  calling the Replace callback.
-   --  Is_Keyword is an optional parameter, used to customize the behavior
-   --  of the parser, by providing a way to specify additional keywords.
-   --  This is useful in particular when defining custom languages that are
-   --  derived from existing languages, e.g. GPR which derives from Ada.
-
-   type Entity_Callback is access function
-     (Entity         : Language_Entity;
-      Sloc_Start     : Source_Location;
-      Sloc_End       : Source_Location;
-      Partial_Entity : Boolean) return Boolean;
-   --  Callback during parsing of entities.
-   --  Partial_Entity is True if parsing is at the end of the string with a
-   --  non terminated entity (e.g string or multi-line comment).
-   --  If Callback returns True, the parsing should be stopped.
-
-   procedure Parse_Entities
-     (Lang     : access Language_Root;
-      Buffer   : String;
-      Callback : Entity_Callback);
-   --  Parse entities (as defined by Language_Entity) contained in buffer.
-   --  For each match, call Callback. Stops at the end of Buffer or when
-   --  callback returns True.
-
-   --  These functions are provided as a support for the source code explorer.
-
-   procedure Get_Referenced_Entity
-     (Lang       : access Language_Root;
-      Buffer     : String;
-      Construct  : Simple_Construct_Information;
-      Sloc_Start : out Source_Location;
-      Sloc_End   : out Source_Location;
-      Success    : out Boolean;
-      From_Index : Natural := 0);
-   --  Some constructs are referencing one or more entities. The purpose of
-   --  this procedure is to extract them. It can be the type of a variable,
-   --  the parent type of a class, the generic package from wich a package is
-   --  instantiated, the returned type of a subprogram... If no reference
-   --  entity is found, then Success is set to False, True otherwise. The
-   --  From_Index parameter is used to initialize the search at a given offset
-   --  (in bytes). It helps to handle cases where the construct is referencing
-   --  more than one element (e.g. extension from interfaces in Java and Ada,
-   --  multiple inheritance in C++). If From_Index is 0 the search will start
-   --  at the begining of the construct.
-
-   type Make_Entry_Func is access function
-     (Str      : String;
-      Matched  : Regpat.Match_Array) return String;
-   --  Function that builds the string to be inserted in the tree.
-
-   type Explorer_Category is record
-      Category       : Language_Category;
-      Category_Name  : GNATCOLL.Symbols.Symbol;
-      Regexp         : GNAT.Expect.Pattern_Matcher_Access;
-      Position_Index : Natural;
-      End_Index      : Natural;
-      Make_Entry     : Make_Entry_Func;
-   end record;
-   --  Definition for a category (ie one of the subtrees of the explorer).
-   --  Icon is the icon to use for items in this category.
-   --  Regexp is the general regular expression to use for entries in this
-   --  category, while Make_Entry is the function that will return the
-   --  actual string to be displayed in the explorer.
-   --  Position_Index is the index of the parenthesis-pair that the entity
-   --  name starts at. When the user clicks on this item in the explorer,
-   --  the cursor will be moved to that location in the editor.
-   --  End_Index is the index of the parenthesis-pair after that the
-   --  next search will begin.
-   --
-   --  If Make_Entry is null, then Position_Index is used to compute the
-   --  string to display.
-
-   type Explorer_Categories is
-     array (Positive range <>) of Explorer_Category;
-   --  A list of categories. Each category is assigned an internal number which
-   --  is the index in this table, and is passed to each Make_Entry_Func
-   --  functions.
-
-   procedure Free (Category   : in out Explorer_Category);
-   procedure Free (Categories : in out Explorer_Categories);
-   --  Free the memory allocated for the parameter
-
-   function Explorer_Regexps
-     (Lang : access Language_Root) return Explorer_Categories;
-   --  Return the list of categories for a given language.
-   --  By default, no category is defined, and thus the explorer is empty.
-
-   function Is_System_File
-     (Lang      : access Language_Root;
-      File_Name : String) return Boolean;
-   --  Return True if File_Name is the name of a system file (standard include
-   --  files in C or run-time file in Ada). These files are displayed
-   --  separately in the explorer.
-
-   -------------------------
-   -- Parsing expressions --
-   -------------------------
-   --  The following types and subprograms are used to manipulate expressions
-   --  in a specific language (as opposed to a whole file as in the subprograms
-   --  above). They are used in particular by the completion module to find out
-   --  the current context, and for similar reasons by the debugger module.
-
-   type Token_Type is range 0 .. Integer'Last;
-   --  This is a type of token. Languages may define dedicated constant for
-   --  this type to represent what can be parsed.
-
-   overriding
-   function "+" (Left, Right : Token_Type) return Token_Type is abstract;
-   overriding
-   function "-" (Left, Right : Token_Type) return Token_Type is abstract;
-   overriding
-   function "*" (Left, Right : Token_Type) return Token_Type is abstract;
-   overriding
-   function "/" (Left, Right : Token_Type) return Token_Type is abstract;
-   overriding
-   function ">" (Left, Right : Token_Type) return Boolean is abstract;
-   overriding
-   function "<" (Left, Right : Token_Type) return Boolean is abstract;
-   overriding
-   function ">=" (Left, Right : Token_Type) return Boolean is abstract;
-   overriding
-   function "<=" (Left, Right : Token_Type) return Boolean is abstract;
-
-   No_Token : constant Token_Type := 0;
-
-   type Token_Record is record
-      Tok_Type    : Token_Type := No_Token;
-      Token_First : String_Index_Type := 0;
-      Token_Last  : String_Index_Type := 0;
-   end record;
-   Null_Token : constant Token_Record;
-   --  This record holds the informations concerning one specific token.
-   --  (Token_First .. Token_Last) is the range of text in the source code for
-   --  that token. The buffer is available through the Parsed_Expression record
-   --  below.
-
-   procedure Free (This : in out Token_Record) is null;
-   --  Used to instantiate the generic list, does not actually do anything
-
-   procedure Parse_Tokens_Backwards
-     (Lang              : access Language_Root;
-      Buffer            : UTF8_String;
-      Start_Offset      : String_Index_Type;
-      End_Offset        : String_Index_Type := 0;
-      Callback          : access procedure (Token : Token_Record;
-                                            Stop  : in out Boolean));
-   --  Parses the tokens from the Start_Offset backwards to end offset. Calls
-   --  Callback on each token. If Stop is True on the callback, then the
-   --  parsing is stoped.
-
-   function Parse_Reference_Backwards
-     (Lang              : access Language_Root;
-      Buffer            : UTF8_String;
-      Start_Offset      : String_Index_Type;
-      End_Offset        : String_Index_Type := 0) return String;
-   --  Return a string containing a reference to a value, looking backwards
-   --  from End_Offset. E.g., for Ada, if the code is something like:
-   --  A := B (C.D (X).E)
-   --  and End_Offset is place after E, this will return "C.D(X).E".
-
-private
-   type Language_Root is abstract tagged limited record
-      Symbols       : GNATCOLL.Symbols.Symbol_Table_Access;
-      Indent_Params : Indent_Parameters := Default_Indent_Parameters;
-      Indent_Style  : Indentation_Kind  := Extended;
-   end record;
-
-   function Comment_Line
-     (Lang    : access Language_Root;
-      Line    : String;
-      Comment : Boolean := True;
-      Clean   : Boolean := False) return String;
-   --  Comment or uncomment (if Comment is false) one line of code.
-   --  Comment_Line (Comment_Line (A), Comment => False) should return A.
-   --  If Clean is True, a clean up of of the line should be performed
-   --  (e.g. leading spaces are removed).
-
-   Null_Token : constant Token_Record :=
-     (Tok_Type             => No_Token,
-      Token_First          => 0,
-      Token_Last           => 0);
-
-   Null_Construct_Info : constant Construct_Information :=
-                           (Category        => Cat_Unknown,
-                            Category_Name   => GNATCOLL.Symbols.No_Symbol,
-                            Is_Declaration  => False,
-                            Is_Generic_Spec => False,
-                            Visibility      => Visibility_Public,
-                            Name            => GNATCOLL.Symbols.No_Symbol,
-                            Profile         => null,
-                            Sloc_Start      => (0, 0, 0),
-                            Sloc_Entity     => (0, 0, 0),
-                            Sloc_End        => (0, 0, 0),
-                            Prev            => null,
-                            Next            => null,
-                            Attributes      => (others => False));
-
-   Null_Simple_Construct_Info : constant Simple_Construct_Information :=
-                                  (Category        => Cat_Unknown,
-                                   Is_Declaration  => False,
-                                   Is_Generic_Spec => False,
-                                   Visibility      => Visibility_Public,
-                                   Name          => GNATCOLL.Symbols.No_Symbol,
-                                   Sloc_Start      => (0, 0, 0),
-                                   Sloc_Entity     => (0, 0, 0),
-                                   Sloc_End        => (0, 0, 0),
-                                   Attributes      => (others => False),
-                                  Profile_Cache => null);
-
-end Language;
diff --git a/packages/ada-mode/gps_source/string_utils.adb 
b/packages/ada-mode/gps_source/string_utils.adb
deleted file mode 100755
index 311f28a..0000000
--- a/packages/ada-mode/gps_source/string_utils.adb
+++ /dev/null
@@ -1,1364 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2000-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-with Ada.Characters.Handling;    use Ada.Characters.Handling;
-with Ada.Containers;             use Ada.Containers;
-with Ada.Strings.Hash;
-with Ada.Strings.Hash_Case_Insensitive;
-with Ada.Strings.Fixed;
-with Ada.Unchecked_Deallocation;
-with Ada.Wide_Wide_Characters.Handling; use Ada.Wide_Wide_Characters.Handling;
-with Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
-use Ada.Strings.UTF_Encoding.Wide_Wide_Strings;
-
-with GNAT.Strings;               use GNAT.Strings;
-with GNATCOLL.Scripts.Utils;
-with GNATCOLL.Utils;
-with GNATCOLL.Xref;
-
-with UTF8_Utils;                 use UTF8_Utils;
-
-package body String_Utils is
-   use type GNATCOLL.Xref.Visible_Column;
-
-   -----------------
-   -- Lines_Count --
-   -----------------
-
-   function Lines_Count (Text : String) return Natural is
-      Count : Natural := 1;
-   begin
-      for T in Text'Range loop
-         if Text (T) = ASCII.LF then
-            Count := Count + 1;
-         end if;
-      end loop;
-      return Count;
-   end Lines_Count;
-
-   -----------------
-   -- Blank_Slice --
-   -----------------
-
-   function Blank_Slice
-     (Count     : Integer;
-      Use_Tabs  : Boolean := False;
-      Tab_Width : Positive := 8) return String is
-   begin
-      if Count <= 0 then
-         return "";
-      elsif Use_Tabs then
-         return (1 .. Count / Tab_Width => ASCII.HT) &
-           (1 .. Count mod Tab_Width => ' ');
-      else
-         return (1 .. Count => ' ');
-      end if;
-   end Blank_Slice;
-
-   -------------
-   -- Replace --
-   -------------
-
-   procedure Replace
-     (S     : in out GNAT.Strings.String_Access;
-      Value : String) is
-   begin
-      if S /= null then
-         if S'Length = Value'Length then
-            --  Let's try to avoid memory fragmentation
-            S.all := Value;
-            return;
-         else
-            GNAT.Strings.Free (S);
-         end if;
-      end if;
-
-      S := new String'(Value);
-   end Replace;
-
-   procedure Replace
-     (S     : in out GNAT.Strings.String_Access;
-      Value : GNAT.Strings.String_Access) is
-   begin
-      if Value = null then
-         GNAT.Strings.Free (S);
-      else
-         Replace (S, Value.all);
-      end if;
-   end Replace;
-
-   -------------------
-   -- Skip_To_Blank --
-   -------------------
-
-   procedure Skip_To_Blank
-     (Type_Str : String;
-      Index    : in out Natural) is
-   begin
-      while Index <= Type_Str'Last
-        and then Type_Str (Index) /= ' '
-        and then Type_Str (Index) /= ASCII.HT
-        and then Type_Str (Index) /= ASCII.LF
-        and then Type_Str (Index) /= ASCII.CR
-      loop
-         Index := Index + 1;
-      end loop;
-   end Skip_To_Blank;
-
-   --------------
-   -- Is_Blank --
-   --------------
-
-   function Is_Blank (C : Character) return Boolean is
-   begin
-      return C = ' ' or else C = ASCII.LF
-        or else C = ASCII.CR or else C = ASCII.HT;
-   end Is_Blank;
-
-   -------------------
-   -- Skip_To_Index --
-   -------------------
-
-   procedure Skip_To_Index
-     (Buffer        : String;
-      Columns       : out Visible_Column_Type;
-      Index_In_Line : String_Index_Type;
-      Index         : in out String_Index_Type;
-      Tab_Width     : Positive := 8)
-   is
-      Start_Of_Line : constant String_Index_Type := Index;
-   begin
-      Columns := 1;
-
-      loop
-         exit when Index - Start_Of_Line + 1 >= Index_In_Line;
-
-         if Natural (Index) <= Buffer'Last
-           and then Buffer (Natural (Index)) = ASCII.HT
-         then
-            Columns := Columns +
-              Visible_Column_Type
-                (Tab_Width -
-                     ((Positive (Columns) - 1) mod Tab_Width));
-         else
-            Columns := Columns + 1;
-         end if;
-
-         Index := String_Index_Type (UTF8_Next_Char (Buffer, Natural (Index)));
-      end loop;
-   end Skip_To_Index;
-
-   -------------------
-   -- Skip_To_Index --
-   -------------------
-
-   procedure Skip_To_Index
-     (Buffer        : Unbounded_String;
-      Columns       : out Visible_Column_Type;
-      Index_In_Line : String_Index_Type;
-      Index         : in out String_Index_Type;
-      Tab_Width     : Positive := 8)
-   is
-      Start_Of_Line : constant String_Index_Type := Index;
-   begin
-      Columns := 1;
-
-      loop
-         exit when Index - Start_Of_Line + 1 >= Index_In_Line;
-
-         if Natural (Index) <= Length (Buffer)
-           and then Element (Buffer, Natural (Index)) = ASCII.HT
-         then
-            Columns := Columns +
-              Visible_Column_Type
-                (Tab_Width -
-                     ((Positive (Columns) - 1) mod Tab_Width));
-         else
-            Columns := Columns + 1;
-         end if;
-
-         Index := String_Index_Type (UTF8_Next_Char (Buffer, Natural (Index)));
-      end loop;
-   end Skip_To_Index;
-
-   ---------------
-   -- Tab_Width --
-   ---------------
-
-   function Tab_Width return Positive is
-   begin
-      return 8;
-   end Tab_Width;
-
-   ---------------
-   -- Next_Line --
-   ---------------
-
-   procedure Next_Line
-     (Buffer  : String;
-      P       : Natural;
-      Next    : out Natural;
-      Success : out Boolean) is
-   begin
-      for J in P .. Buffer'Last - 1 loop
-         if Buffer (J) = ASCII.LF then
-            Next := J + 1;
-            Success := True;
-            return;
-         end if;
-      end loop;
-
-      Success := False;
-      Next    := Buffer'Last;
-   end Next_Line;
-
-   ---------------------
-   -- Skip_Hexa_Digit --
-   ---------------------
-
-   procedure Skip_Hexa_Digit
-     (Type_Str : String;
-      Index    : in out Natural) is
-   begin
-      --  skips initial 0x if present
-
-      if Index + 1 <= Type_Str'Last
-        and then Type_Str (Index) = '0'
-        and then Type_Str (Index + 1) = 'x'
-      then
-         Index := Index + 2;
-      end if;
-
-      while Index <= Type_Str'Last
-        and then Is_Hexadecimal_Digit (Type_Str (Index))
-      loop
-         Index := Index + 1;
-      end loop;
-   end Skip_Hexa_Digit;
-
-   ------------------
-   -- Skip_To_Char --
-   ------------------
-
-   procedure Skip_To_Char
-     (Type_Str : String;
-      Index    : in out Natural;
-      Char     : Character;
-      Step     : Integer := 1) is
-   begin
-      while Index <= Type_Str'Last
-        and then Index >= Type_Str'First
-        and then Type_Str (Index) /= Char
-      loop
-         Index := Index + Step;
-      end loop;
-   end Skip_To_Char;
-
-   ------------------
-   -- Skip_To_Char --
-   ------------------
-
-   procedure Skip_To_Char
-     (Type_Str : Unbounded_String;
-      Index    : in out Natural;
-      Char     : Character;
-      Step     : Integer := 1) is
-   begin
-      while Index <= Length (Type_Str)
-        and then Index >= 1
-        and then Element (Type_Str, Index) /= Char
-      loop
-         Index := Index + Step;
-      end loop;
-   end Skip_To_Char;
-
-   ---------------
-   -- Parse_Num --
-   ---------------
-
-   procedure Parse_Num
-     (Type_Str : String;
-      Index    : in out Natural;
-      Result   : out Long_Integer)
-   is
-      Tmp_Index : constant Natural := Index;
-   begin
-      --  Recognize negative numbers as well
-
-      if Type_Str (Index) = '-' then
-         Index := Index + 1;
-      end if;
-
-      while Index <= Type_Str'Last
-        and then Type_Str (Index) in '0' .. '9'
-      loop
-         Index := Index + 1;
-      end loop;
-
-      --  If at least one valid character was found, we have a number
-
-      if Index > Tmp_Index then
-         Result := Long_Integer'Value (Type_Str (Tmp_Index .. Index - 1));
-      else
-         Result := 0;
-      end if;
-
-   exception
-      when Constraint_Error =>
-         Result := -1;
-   end Parse_Num;
-
-   ----------------
-   -- Looking_At --
-   ----------------
-
-   function Looking_At
-     (Type_Str  : String;
-      Index     : Natural;
-      Substring : String) return Boolean is
-   begin
-      return Index + Substring'Length - 1 <= Type_Str'Last
-        and then Type_Str (Index .. Index + Substring'Length - 1) = Substring;
-   end Looking_At;
-
-   ----------------------
-   -- Parse_Cst_String --
-   ----------------------
-
-   procedure Parse_Cst_String
-     (Type_Str          : String;
-      Index             : in out Natural;
-      Str               : out String;
-      Str_Last          : out Natural;
-      Backslash_Special : Boolean := True)
-   is
-      procedure Parse_Next_Char
-        (Index : in out Natural;
-         Char  : out Character);
-      --  Parse the character pointed to by Index, including special characters
-
-      In_String : Boolean;
-
-      ---------------------
-      -- Parse_Next_Char --
-      ---------------------
-
-      procedure Parse_Next_Char
-        (Index : in out Natural;
-         Char  : out Character)
-      is
-         Int : Natural;
-      begin
-         --  Special characters are represented as ["00"] or ["""]
-         --  Note that we can have '[" ' that represents the character
-         --  '[' followed by the end of the string
-
-         if Index + 4 <= Type_Str'Last
-           and then Type_Str (Index) = '['
-           and then Type_Str (Index + 1) = '"'
-           and then (Type_Str (Index + 2 .. Index + 4) = """""]"
-                     or else Type_Str (Index + 2) in '0' .. '9'
-                     or else Type_Str (Index + 2) in 'a' .. 'f')
-         then
-            if Type_Str (Index + 2) = '"' then
-               Index := Index + 5;
-               Char := '"';
-
-            else
-               if Type_Str (Index + 2) in 'a' .. 'f' then
-                  Int := 16 * (Character'Pos (Type_Str (Index + 2))
-                               - Character'Pos ('a') + 10);
-               else
-                  Int := 16 * (Character'Pos (Type_Str (Index + 2))
-                               - Character'Pos ('0'));
-               end if;
-
-               if Type_Str (Index + 3) in 'a' .. 'f' then
-                  Int := Int + Character'Pos (Type_Str (Index + 3))
-                    - Character'Pos ('a') + 10;
-               else
-                  Int := Int + Character'Pos (Type_Str (Index + 3))
-                    - Character'Pos ('0');
-               end if;
-
-               Char  := Character'Val (Int);
-               Index := Index + 6;
-            end if;
-
-         --  Else, a standard character
-
-         else
-            Char := Type_Str (Index);
-            Index := Index + 1;
-         end if;
-      end Parse_Next_Char;
-
-      S_Index   : Natural := Str'First;
-      Char      : Character;
-      Num       : Long_Integer;
-      Last      : Natural;
-
-   begin  --  Parse_Cst_String
-      if Str'Length = 0 then
-         Last := Natural'Last;
-      else
-         Last := Str'Last;
-      end if;
-
-      In_String := Type_Str (Index) = '"';
-      if In_String then
-         Index := Index + 1;
-      end if;
-
-      --  Note: this is a slightly complex loop, since a string might not
-      --  appear as a single string in gdb, but can be made of multiple
-      --  elements, including characters repeated a number of times, as in:
-      --  "["af"]["c7"]", '["00"]' <repeats 12 times>, "BA"
-
-      while S_Index <= Last
-        and then Index <= Type_Str'Last
-        and then Type_Str (Index) /= ASCII.LF
-      loop
-         case Type_Str (Index) is
-            when '"' =>
-               --  Handling of Ada-style strings:   A""double quote
-               if In_String
-                 and then Index < Type_Str'Last
-                 and then Type_Str (Index + 1) = '"'
-               then
-                  Index := Index + 2;
-                  Str (S_Index) := '"';
-                  S_Index := S_Index + 1;
-
-               else
-                  In_String := not In_String;
-                  Index := Index + 1;
-
-                  --  In cases like {field = 0x8048f88 "bar"}, we need to
-                  --  consider the string finished, but not for
-                  --     "bar", 'cd' <repeats 12 times>
-                  if not In_String
-                    and then Index <= Type_Str'Last
-                    and then Type_Str (Index) /= ' '
-                    and then Type_Str (Index) /= ','
-                  then
-                     Index := Index + 1;
-                     Str_Last  := S_Index - 1;
-                     return;
-                  end if;
-               end if;
-
-            when ''' =>
-               if In_String then
-                  if Str'Length /= 0 then
-                     Str (S_Index) := ''';
-                  end if;
-
-                  S_Index := S_Index + 1;
-                  Index := Index + 1;
-
-               else
-                  Index := Index + 1;  --  skips initial '''
-                  Parse_Next_Char (Index, Char);
-
-                  if Str'Length /= 0 then
-                     Str (S_Index) := Char;
-                  end if;
-
-                  Index := Index + 2;     --  skips "' " at the end
-
-                  if Looking_At (Type_Str, Index, "<repeats ") then
-                     Index := Index + 9;
-                     Parse_Num (Type_Str, Index, Num);
-
-                     if Str'Length /= 0 then
-                        Str (S_Index .. S_Index + Integer (Num) - 1) :=
-                          (others => Char);
-                     end if;
-
-                     S_Index := S_Index + Integer (Num);
-                     Index := Index + 7; --  skips " times>"
-
-                  else
-                     S_Index := S_Index + 1;
-                  end if;
-               end if;
-
-            when '\' =>
-               if Backslash_Special then
-                  if Str'Length /= 0 then
-                     Str (S_Index) := Type_Str (Index + 1);
-                     S_Index := S_Index + 1;
-                  end if;
-
-                  Index := Index + 2;
-
-               else
-                  Str (S_Index) := Type_Str (Index);
-                  S_Index := S_Index + 1;
-                  Index := Index + 1;
-               end if;
-
-            when ' ' | ',' =>
-               if In_String then
-                  if Str'Length /= 0 then
-                     Str (S_Index) := ' ';
-                  end if;
-
-                  S_Index := S_Index + 1;
-
-               --  ',' is still part of the string output only if it is
-               --  followed by a constant string or character (repeats).
-               --  Otherwise, ',' simply denotes the end of a struct field,
-               --  as in "field3 = "ab", field4 = 1"
-
-               elsif Type_Str (Index) = ','
-                 and then
-                 (Index >= Type_Str'Last - 1
-                  or else (Type_Str (Index + 2) /= '''
-                           and then Type_Str (Index + 2) /= '"'))
-               then
-                  Index := Index + 1;
-                  Str_Last  := S_Index - 1;
-                  return;
-               end if;
-
-               Index := Index + 1;
-
-            when others =>
-               Parse_Next_Char (Index, Char);
-
-               if Str'Length /= 0 then
-                  Str (S_Index) := Char;
-               end if;
-
-               S_Index := S_Index + 1;
-         end case;
-      end loop;
-
-      Index := Index + 1;
-      Str_Last  := S_Index - 1;
-   end Parse_Cst_String;
-
-   -----------------------
-   -- Skip_Simple_Value --
-   -----------------------
-
-   procedure Skip_Simple_Value
-     (Type_Str             : String;
-      Index                : in out Natural;
-      Array_Item_Separator : Character := ',';
-      End_Of_Array         : Character := ')';
-      Repeat_Item_Start    : Character := '<') is
-   begin
-      while Index <= Type_Str'Last
-        and then Type_Str (Index) /= Array_Item_Separator
-        and then Type_Str (Index) /= End_Of_Array
-        and then Type_Str (Index) /= ASCII.LF --  always the end of a field
-        and then Type_Str (Index) /= Repeat_Item_Start
-      loop
-         Index := Index + 1;
-      end loop;
-   end Skip_Simple_Value;
-
-   ---------------
-   -- Skip_Word --
-   ---------------
-
-   procedure Skip_Word
-     (Type_Str : String;
-      Index    : in out Natural;
-      Step     : Integer := 1)
-   is
-      Initial : constant Natural := Index;
-   begin
-      while Index <= Type_Str'Last
-        and then Index >= Type_Str'First
-        and then (Is_Alphanumeric (Type_Str (Index))
-                  or else
-                  Type_Str (Index) = '_')
-      loop
-         Index := Index + Step;
-      end loop;
-
-      --  Move at least one character
-
-      if Index = Initial then
-         Index := Index + Step;
-      end if;
-   end Skip_Word;
-
-   --------------------
-   -- Skip_CPP_Token --
-   --------------------
-
-   procedure Skip_CPP_Token
-     (Type_Str : String;
-      Index    : in out Natural;
-      Step     : Integer := 1)
-   is
-      Initial : constant Natural := Index;
-   begin
-      while Index <= Type_Str'Last
-        and then Index >= Type_Str'First
-        and then (Is_Alphanumeric (Type_Str (Index))
-                  or else
-                  Type_Str (Index) = '_'
-                  or else
-                  Type_Str (Index) = '.')
-      loop
-         Index := Index + Step;
-      end loop;
-
-      --  Move at least one character
-
-      if Index = Initial then
-         Index := Index + Step;
-      end if;
-   end Skip_CPP_Token;
-
-   ------------
-   -- Reduce --
-   ------------
-
-   function Reduce
-     (S            : String;
-      Max_Length   : Positive := Positive'Last;
-      Continuation : String := "...") return String
-   is
-      Result : String (S'Range);
-      Len    : Positive := Result'First;
-      Blank  : Boolean  := False;
-
-      Max    : Natural;
-      --  Max if the position of the last character to be returned
-      Cut    : Boolean := False;
-      --  Cut set to true if string was cut before the end at Max characters
-      Char   : Natural := S'First;
-      Next   : Natural := Char;
-   begin
-
-      if Max_Length = Positive'Last then
-         Max := Positive'Last;
-      else
-         Max := S'First + Max_Length - Continuation'Length - 1;
-      end if;
-
-      while Next <= S'Last loop
-         Char := Next;
-         Next := UTF8_Next_Char (S, Char);
-         if Next > S'Last then
-            Next := S'Last + 1;
-         end if;
-
-         if S (Char) = ASCII.LF or else S (Char) = ASCII.CR
-           or else S (Char) = ASCII.HT or else S (Char) = ' '
-         then
-            if not Blank then
-               Result (Len) := ' ';
-               Len := Len + 1;
-               Blank := True;
-            end if;
-
-         else
-            Blank := False;
-
-            Result (Len .. Len + Next - Char - 1) := S (Char .. Next - 1);
-            Len := Len + Next - Char;
-         end if;
-
-         if Len >= Max then
-            Cut := True;
-            exit;
-         end if;
-      end loop;
-
-      if Cut then
-         return Result (Result'First .. Len - 1) & Continuation;
-      else
-         return Result (Result'First .. Len - 1);
-      end if;
-   end Reduce;
-
-   ------------
-   -- Krunch --
-   ------------
-
-   function Krunch
-     (S                 : String;
-      Max_String_Length : Positive := 20) return String
-   is
-      Ellipsis : constant Wide_Wide_Character :=
-        Wide_Wide_Character'Val (8230);
-      --  UTF8 encoding for the ellipsis character (8230 in Decimal)
-
-      Image : constant Wide_Wide_String := Decode (S);
-
-   begin
-      if Image'Length <= Max_String_Length then
-         return S;
-      end if;
-
-      if Max_String_Length <= 3 then
-         return Encode
-           (Image (Image'First .. Image'First + Max_String_Length - 1));
-      else
-         declare
-            Half   : constant Positive := (Max_String_Length - 1) / 2;
-            Result : constant Wide_Wide_String :=
-              Image (Image'First .. Image'First + Half - 1) &
-              Ellipsis &
-              Image (Image'Last - Half + 1 .. Image'Last);
-         begin
-            return Encode (Result);
-         end;
-      end if;
-   end Krunch;
-
-   --------------
-   -- Strip_CR --
-   --------------
-
-   procedure Strip_CR
-     (Text     : in out String;
-      Last     : out Integer;
-      CR_Found : out Boolean)
-   is
-      pragma Suppress (All_Checks);
-
-      J : Natural := Text'First;
-   begin
-      CR_Found := False;
-
-      if Text'Length = 0 then
-         Last := 0;
-         return;
-      end if;
-
-      loop
-         --  Manual unrolling for efficiency
-
-         exit when Text (J) = ASCII.CR or J = Text'Last;
-         J := J + 1;
-
-         exit when Text (J) = ASCII.CR or J = Text'Last;
-         J := J + 1;
-
-         exit when Text (J) = ASCII.CR or J = Text'Last;
-         J := J + 1;
-      end loop;
-
-      if Text (J) /= ASCII.CR then
-         Last := J;
-         return;
-      end if;
-
-      CR_Found := True;
-      Last := J - 1;
-
-      for Index in J + 1 .. Text'Last loop
-         if Text (Index) /= ASCII.CR then
-            Last := Last + 1;
-            Text (Last) := Text (Index);
-         end if;
-      end loop;
-   end Strip_CR;
-
-   ----------------------
-   -- Strip_CR_And_NUL --
-   ----------------------
-
-   procedure Strip_CR_And_NUL
-     (Text      : in out String;
-      Last      : out Integer;
-      CR_Found  : out Boolean;
-      NUL_Found : out Boolean;
-      Trailing_Space_Found : out Boolean)
-   is
-      pragma Suppress (All_Checks);
-
-      Last_Is_Space : Boolean := False;
-
-      J : Natural := Text'First;
-   begin
-      CR_Found := False;
-      NUL_Found := False;
-      Trailing_Space_Found := False;
-
-      if Text'Length = 0 then
-         Last := 0;
-         return;
-      end if;
-
-      loop
-         if Text (J) = ASCII.CR
-           or else Text (J) = ASCII.NUL
-           or else J = Text'Last
-         then
-            exit;
-         elsif Text (J) = ASCII.LF then
-            if Last_Is_Space then
-               Trailing_Space_Found := True;
-               Last_Is_Space := False;
-            end if;
-         elsif Text (J) = ASCII.HT or else Text (J) = ' ' then
-            Last_Is_Space := True;
-         else
-            Last_Is_Space := False;
-         end if;
-
-         J := J + 1;
-
-      end loop;
-
-      case Text (J) is
-         when ASCII.NUL | ASCII.CR =>
-            Last := J - 1;
-         when others =>
-            Last := J;
-
-            if Last_Is_Space then
-               Trailing_Space_Found := True;
-            end if;
-
-            return;
-      end case;
-
-      for Index in J + 1 .. Text'Last loop
-         case Text (Index) is
-            when ASCII.NUL =>
-               NUL_Found := True;
-            when ASCII.CR  =>
-               CR_Found := True;
-            when ASCII.HT | ' ' =>
-               Last_Is_Space := True;
-               Last := Last + 1;
-               Text (Last) := Text (Index);
-            when ASCII.LF =>
-               if Last_Is_Space then
-                  Trailing_Space_Found := True;
-                  Last_Is_Space := False;
-               end if;
-
-               Last := Last + 1;
-               Text (Last) := Text (Index);
-            when others =>
-               Last_Is_Space := False;
-               Last := Last + 1;
-               Text (Last) := Text (Index);
-         end case;
-      end loop;
-
-      if Last_Is_Space then
-         Trailing_Space_Found := True;
-      end if;
-   end Strip_CR_And_NUL;
-
-   -----------------------------
-   -- Strip_Ending_Linebreaks --
-   -----------------------------
-
-   function Strip_Ending_Linebreaks (Text : String) return String is
-   begin
-      --  Loop to make sure we have removed all of the ending CRs and LFs
-
-      for J in reverse Text'Range loop
-         if Text (J) /= ASCII.CR and then Text (J) /= ASCII.LF then
-            return Text (Text'First .. J);
-         end if;
-      end loop;
-
-      return "";
-   end Strip_Ending_Linebreaks;
-
-   ----------------------
-   -- Do_Tab_Expansion --
-   ----------------------
-
-   function Do_Tab_Expansion
-     (Text     : String;
-      Tab_Size : Integer) return String
-   is
-      Num_Tabs : Natural := 0;
-      Col      : Integer := 1;
-
-   begin
-      --  Count the number of tabs in the string
-
-      for K in Text'Range loop
-         if Text (K) = ASCII.HT then
-            Num_Tabs := Num_Tabs + 1;
-         end if;
-      end loop;
-
-      if Num_Tabs = 0 then
-         return Text;
-      else
-         declare
-            S       : String (1 .. Num_Tabs * Tab_Size + Text'Length);
-            S_Index : Integer := 1;
-            Bound   : Integer;
-
-         begin
-            for K in Text'Range loop
-               case Text (K) is
-                  when ASCII.LF =>
-                     S (S_Index) := Text (K);
-                     S_Index := S_Index + 1;
-                     Col := 1;
-
-                  when ASCII.HT =>
-                     if Col mod Tab_Size /= 0 then
-                        Bound := (1 + Col / Tab_Size) * Tab_Size - Col + 1;
-                        S (S_Index .. S_Index + Bound - 1) := (others => ' ');
-                        S_Index := S_Index + Bound;
-                        Col := Col + Bound;
-
-                     else
-                        S (S_Index) := ' ';
-                        S_Index := S_Index + 1;
-                        Col := Col + 1;
-                     end if;
-
-                  when others =>
-                     S (S_Index) := Text (K);
-                     S_Index := S_Index + 1;
-                     Col := Col + 1;
-               end case;
-            end loop;
-
-            return S (S'First .. S_Index - 1);
-         end;
-      end if;
-   end Do_Tab_Expansion;
-
-   ------------------
-   -- Strip_Quotes --
-   ------------------
-
-   function Strip_Quotes (S : String) return String is
-      S_First : Integer := S'First;
-      S_Last  : Integer := S'Last;
-
-   begin
-      if S = "" then
-         return "";
-      end if;
-
-      while S_First <= S'Last
-        and then (S (S_First) = ' ' or else S (S_First) = '"')
-      loop
-         S_First := S_First + 1;
-      end loop;
-
-      while S_Last >= S'First
-        and then (S (S_Last) = ' ' or else S (S_Last) = '"')
-      loop
-         S_Last := S_Last - 1;
-      end loop;
-
-      return S (S_First .. S_Last);
-   end Strip_Quotes;
-
-   -----------
-   -- Image --
-   -----------
-
-   function Image (N : Integer) return String is
-   begin
-      return GNATCOLL.Utils.Image (N, Min_Width => 1);
-   end Image;
-
-   ----------------------
-   -- Number_Of_Digits --
-   ----------------------
-
-   function Number_Of_Digits (N : Integer) return Natural is
-   begin
-      case N is
-         when 0 .. 9 =>
-            return 1;
-         when 10 .. 99 =>
-            return 2;
-         when 100 .. 999 =>
-            return 3;
-         when 1_000 .. 9_999 =>
-            return 4;
-         when 10_000 .. 99_999 =>
-            return 5;
-         when others =>
-            return Image (N)'Length;
-      end case;
-   end Number_Of_Digits;
-
-   ----------------------
-   -- Is_Entity_Letter --
-   ----------------------
-
-   function Is_Entity_Letter (Char : Wide_Wide_Character) return Boolean is
-   begin
-      return Char = '_' or else Is_Alphanumeric (Char);
-   end Is_Entity_Letter;
-
-   ------------------------
-   -- Is_Operator_Letter --
-   ------------------------
-
-   function Is_Operator_Letter (Char : Wide_Wide_Character) return Boolean is
-   begin
-      case Char is
-         when '<' | '=' | '>' | '+' | '-' | '*' | '/' =>
-            return True;
-
-         when others =>
-            return False;
-      end case;
-   end Is_Operator_Letter;
-
-   function Is_File_Letter (Char : Wide_Wide_Character) return Boolean is
-   begin
-      if Is_Control (Char) then
-         return False;
-      end if;
-
-      case Char is
-         when '<'
-              | '/'
-              | '\'
-              | '>'
-              | '"'
-              | ' ' =>
-            return False;
-
-         when others =>
-            return True;
-      end case;
-   end Is_File_Letter;
-
-   -----------------
-   -- Copy_String --
-   -----------------
-
-   procedure Copy_String
-     (Item : Interfaces.C.Strings.chars_ptr;
-      Str  : out String;
-      Len  : Natural)
-   is
-      procedure Strncpy
-        (Dest : out String;
-         Src  : Interfaces.C.Strings.chars_ptr;
-         Len  : Interfaces.C.size_t);
-      pragma Import (C, Strncpy, "strncpy");
-
-   begin
-      Strncpy (Str, Item, Interfaces.C.size_t (Len));
-   end Copy_String;
-
-   -----------
-   -- Clone --
-   -----------
-
-   function Clone
-     (List : GNAT.Strings.String_List) return GNAT.Strings.String_List
-   is
-      L : String_List (List'Range);
-   begin
-      for J in List'Range loop
-         L (J) := new String'(List (J).all);
-      end loop;
-      return L;
-   end Clone;
-
-   ------------
-   -- Append --
-   ------------
-
-   procedure Append
-     (List  : in out GNAT.Strings.String_List_Access;
-      Item  : String)
-   is
-      procedure Unchecked_Free is new Ada.Unchecked_Deallocation
-        (String_List, String_List_Access);
-      L : String_List_Access := List;
-   begin
-      if List = null then
-         List := new String_List'(1 .. 1 => new String'(Item));
-      else
-         List := new String_List (L'First .. L'Last + 1);
-         List (L'Range) := L.all;
-         List (List'Last) := new String'(Item);
-         Unchecked_Free (L);
-      end if;
-   end Append;
-
-   ------------
-   -- Append --
-   ------------
-
-   procedure Append
-     (List  : in out GNAT.Strings.String_List_Access;
-      List2 : GNAT.Strings.String_List)
-   is
-      procedure Unchecked_Free is new Ada.Unchecked_Deallocation
-        (String_List, String_List_Access);
-      L : String_List_Access := List;
-   begin
-      if List = null then
-         List := new String_List (1 .. List2'Length);
-      else
-         List := new String_List (L'First .. L'Last + List2'Length);
-         List (L'Range) := L.all;
-         Unchecked_Free (L);
-      end if;
-
-      List (List'Last - List2'Length + 1 .. List'Last) := List2;
-   end Append;
-
-   ----------------
-   -- Safe_Value --
-   ----------------
-
-   function Safe_Value (S : String; Default : Integer := 1) return Integer is
-   begin
-      if S = "" then
-         return Default;
-      else
-         return Integer'Value (S);
-      end if;
-   exception
-      when Constraint_Error =>
-         return Default;
-   end Safe_Value;
-
-   -------------
-   -- Protect --
-   -------------
-
-   function Protect
-     (S                   : String;
-      Protect_Quotes      : Boolean := True;
-      Protect_Spaces      : Boolean := False;
-      Protect_Backslashes : Boolean := True) return String
-   is
-      S2    : String (1 .. S'Length * 2);
-      Index : Natural := 1;
-   begin
-      for J in S'Range loop
-         if (Protect_Quotes and then S (J) = '"')
-           or else (Protect_Backslashes and then S (J) = '\')
-           or else (Protect_Spaces and then S (J) = ' ')
-         then
-            S2 (Index .. Index + 1) := '\' & S (J);
-            Index := Index + 2;
-         else
-            S2 (Index) := S (J);
-            Index := Index + 1;
-         end if;
-      end loop;
-
-      return S2 (1 .. Index - 1);
-   end Protect;
-
-   ---------------
-   -- Unprotect --
-   ---------------
-
-   function Unprotect (S : String) return String is
-   begin
-      return GNATCOLL.Scripts.Utils.Unprotect (S);
-   end Unprotect;
-
-   -------------
-   -- Unquote --
-   -------------
-
-   function Unquote (S : String) return String is
-   begin
-      if S'Length > 1
-        and then S (S'First) = '"'
-        and then S (S'Last) = '"'
-      then
-         return S (S'First + 1 .. S'Last - 1);
-      else
-         return S;
-      end if;
-   end Unquote;
-
-   ---------------
-   -- Hex_Value --
-   ---------------
-
-   function Hex_Value (Hex : String) return Natural is
-   begin
-      return Integer'Value ("16#" & Hex & "#");
-   end Hex_Value;
-
-   ------------
-   -- Decode --
-   ------------
-
-   function URL_Decode (URL : String) return String is
-      Res : String (1 .. URL'Length);
-      K   : Natural := 0;
-      J   : Positive := URL'First;
-
-   begin
-      if URL = "" then
-         return "";
-      end if;
-
-      loop
-         K := K + 1;
-
-         if URL (J) = '%'
-           and then J + 2 <= URL'Last
-           and then Is_Hexadecimal_Digit (URL (J + 1))
-           and then Is_Hexadecimal_Digit (URL (J + 2))
-         then
-            Res (K) := Character'Val (Hex_Value (URL (J + 1 .. J + 2)));
-            J := J + 2;
-         else
-            Res (K) := URL (J);
-         end if;
-
-         J := J + 1;
-         exit when J > URL'Last;
-      end loop;
-
-      return Res (1 .. K);
-   end URL_Decode;
-
-   ------------
-   -- Revert --
-   ------------
-
-   function Revert (S : String; Separator : String := ".") return String is
-      Result : String (S'Range);
-      Index  : Natural := S'First;
-      Last   : Natural := S'Last;
-      Len, J : Integer;
-      First  : constant Natural := S'First + Separator'Length - 1;
-
-   begin
-      J := S'Last;
-
-      loop
-         exit when J < First;
-
-         if S (J - Separator'Length + 1 .. J) = Separator then
-            Len := Last - J;
-            Result (Index .. Index + Len - 1) := S (J + 1 .. Last);
-            J := J - Separator'Length + 1;
-            Last := J - 1;
-            Index := Index + Len;
-            Result (Index .. Index + Separator'Length - 1) := Separator;
-            Index := Index + Separator'Length;
-         end if;
-
-         J := J - 1;
-      end loop;
-
-      if Last >= S'First then
-         Result (Index .. Result'Last) := S (S'First .. Last);
-      end if;
-
-      return Result;
-   end Revert;
-
-   ------------------------------
-   -- Strip_Single_Underscores --
-   ------------------------------
-
-   function Strip_Single_Underscores (S : String) return String is
-      S2 : String := S;
-      J2 : Natural := S'First;
-   begin
-      for J in S'Range loop
-         S2 (J2) := S (J);
-
-         if S (J) /= '_'
-           or else (J > S'First and then S (J - 1) = '_')
-         then
-            J2 := J2 + 1;
-         end if;
-      end loop;
-
-      return S2 (S2'First .. J2 - 1);
-   end Strip_Single_Underscores;
-
-   -------------
-   -- Compare --
-   -------------
-
-   function Compare (A, B : String) return Integer is
-   begin
-      if A < B then
-         return -1;
-      elsif A > B then
-         return 1;
-      else
-         return 0;
-      end if;
-   end Compare;
-
-   function Compare (A, B : Integer) return Integer is
-   begin
-      if A < B then
-         return -1;
-      elsif A > B then
-         return 1;
-      else
-         return 0;
-      end if;
-   end Compare;
-
-   ----------
-   -- Hash --
-   ----------
-
-   function Hash (Key : String) return Header_Num is
-      Tmp : constant Ada.Containers.Hash_Type := Ada.Strings.Hash (Key);
-   begin
-      return Header_Num'First +
-               Header_Num'Base (Tmp mod Header_Num'Range_Length);
-   end Hash;
-
-   ---------------------------
-   -- Case_Insensitive_Hash --
-   ---------------------------
-
-   function Case_Insensitive_Hash (Key : String) return Header_Num is
-      Tmp : constant Ada.Containers.Hash_Type :=
-        Ada.Strings.Hash_Case_Insensitive (Key);
-   begin
-      return Header_Num'First +
-               Header_Num'Base (Tmp mod Header_Num'Range_Length);
-   end Case_Insensitive_Hash;
-
-   ---------------------------
-   -- Has_Include_Directive --
-   ---------------------------
-
-   function Has_Include_Directive (Str : String) return Boolean is
-   begin
-      return Str'Length > 11
-        and then Str (Str'First) = '#'
-        and then Ada.Strings.Fixed.Index
-          (Str (Str'First + 1 .. Str'Last), "include") /= 0;
-   end Has_Include_Directive;
-
-end String_Utils;
diff --git a/packages/ada-mode/gps_source/string_utils.ads 
b/packages/ada-mode/gps_source/string_utils.ads
deleted file mode 100755
index aab1d03..0000000
--- a/packages/ada-mode/gps_source/string_utils.ads
+++ /dev/null
@@ -1,353 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2001-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
---  This package provides a set of subprograms for manipulating and parsing
---  strings.
-
-with GNAT.Strings;
-with Interfaces.C.Strings;
-with Basic_Types; use Basic_Types;
-with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
-
-package String_Utils is
-
-   function "+"
-     (S : String) return Unbounded_String renames To_Unbounded_String;
-
-   function "+"
-     (S : Unbounded_String) return String renames To_String;
-   --  Utility conversion operators from String to Unbounded_String
-
-   function Hex_Value (Hex : String) return Natural;
-   --  Return the value for the hexadecimal number Hex. Raises
-   --  Constraint_Error is Hex is not an hexadecimal number.
-
-   procedure Skip_To_Blank
-     (Type_Str : String;
-      Index    : in out Natural);
-   --  Skip to the next blank character
-
-   procedure Skip_To_Index
-     (Buffer        : String;
-      Columns       : out Visible_Column_Type;
-      Index_In_Line : String_Index_Type;
-      Index         : in out String_Index_Type;
-      Tab_Width     : Positive := 8);
-   procedure Skip_To_Index
-     (Buffer        : Unbounded_String;
-      Columns       : out Visible_Column_Type;
-      Index_In_Line : String_Index_Type;
-      Index         : in out String_Index_Type;
-      Tab_Width     : Positive := 8);
-   --  Assuming Index points to the begining of a line, move the index by
-   --  "Index_In_Line" characters, and give the new column value.
-
-   procedure Skip_Hexa_Digit
-     (Type_Str : String;
-      Index    : in out Natural);
-   --  Move Index to the first character that can not be part of an hexadecimal
-   --  digit. Note that an hexadecimal digit can optionally start with '0x',
-   --  which is the only case where x is recognized as part of the digit.
-
-   procedure Skip_To_Char
-     (Type_Str : String;
-      Index    : in out Natural;
-      Char     : Character;
-      Step     : Integer := 1);
-   procedure Skip_To_Char
-     (Type_Str : Unbounded_String;
-      Index    : in out Natural;
-      Char     : Character;
-      Step     : Integer := 1);
-   --  Skip every character up to the first occurence of Char in the string.
-   --  If no occurrence found, then Index is set over Type_Str'Last.
-
-   procedure Skip_Word
-     (Type_Str : String;
-      Index    : in out Natural;
-      Step     : Integer := 1);
-   --  Skip the word starting at Index (at least one character, even if there
-   --  is no word).
-   --  Currently, a word is defined as any string made of alphanumeric
-   --  character or underscore.
-
-   procedure Skip_CPP_Token
-     (Type_Str : String;
-      Index    : in out Natural;
-      Step     : Integer := 1);
-   --  Skip the cpp token starting at Index (at least one character, even if
-   --  there is no cpp token).
-   --  Currently, a cpp token is defined as any string made of alphanumeric
-   --  character, underscore or period.
-
-   function Tab_Width return Positive;
-   pragma Inline (Tab_Width);
-   --  Default value of tab width in the text editor (current value is 8)
-
-   function Lines_Count (Text : String) return Natural;
-   --  Return the number of lines in Text
-
-   function Blank_Slice
-     (Count     : Integer;
-      Use_Tabs  : Boolean := False;
-      Tab_Width : Positive := 8) return String;
-   --  Return a string representing count blanks.
-   --  If Use_Tabs is True, use ASCII.HT characters as much as possible,
-   --  otherwise use only spaces.
-   --  Return a null string if Count is negative.
-
-   function Is_Blank (C : Character) return Boolean;
-   --  Return True if C is a blank character: CR, LF, HT or ' '
-
-   procedure Next_Line
-     (Buffer  : String;
-      P       : Natural;
-      Next    : out Natural;
-      Success : out Boolean);
-   --  Return the start of the next line in Next or Buffer'Last if the end of
-   --  the buffer is reached.
-   --  Success is set to True if a new line was found, false otherwise (end of
-   --  buffer reached).
-
-   procedure Parse_Num
-     (Type_Str : String;
-      Index    : in out Natural;
-      Result   : out Long_Integer);
-   --  Parse the integer found at position Index in Type_Str.
-   --  Index is set to the position of the first character that does not
-   --  belong to the integer.
-
-   function Looking_At
-     (Type_Str  : String;
-      Index     : Natural;
-      Substring : String) return Boolean;
-   --  Return True if the characters starting at Index in Type_Str are
-   --  equivalent to Substring.
-
-   procedure Parse_Cst_String
-     (Type_Str          : String;
-      Index             : in out Natural;
-      Str               : out String;
-      Str_Last          : out Natural;
-      Backslash_Special : Boolean := True);
-   --  Parse the string pointed to by Index, and copy the result in Str.
-   --  Index must point to the opening " character, and will be set to
-   --  point after the closing " character.
-   --  Special characters, as output by gdb (["0a"]) are also interpreted
-   --  and converted to the equivalent Character value.
-   --  Str must be long enough to contain the string, not check is done. As a
-   --  special case, if Str'Length = 0 then no attempt is done to fill up
-   --  the string, and only Length is computed. Str_Last is set to the last
-   --  meaningful character in Str.
-   --
-   --  Index is set to the number of characters parsed in the string.
-
-   procedure Skip_Simple_Value
-     (Type_Str             : String;
-      Index                : in out Natural;
-      Array_Item_Separator : Character := ',';
-      End_Of_Array         : Character := ')';
-      Repeat_Item_Start    : Character := '<');
-   --  Skip the value of a simple value ("65 'A'" for instance).
-   --  This stops at the first special character.
-   --
-   --  Array_Item_Separator is the separator in an array value (ie "5, 2, 3").
-   --  End_Of_Array is the array that indicates the end of an array value, as
-   --  in "((1, 2), (3, 4))".
-   --  Repeat_Item_Start if the character that starts a repeat statements, as
-   --  in "<repeats .. times>"
-
-   function Reduce
-     (S            : String;
-      Max_Length   : Positive := Positive'Last;
-      Continuation : String := "...") return String;
-   --  Replace in string S all ASCII.LF and ASCII.HT characters with a space,
-   --  and replace multiple spaces with a single one. Return the resulting
-   --  string with at most Max_Length character including the continuation
-   --  characters. S should be encoded in UTF-8.
-
-   function Krunch
-     (S                 : String;
-      Max_String_Length : Positive := 20) return String;
-   --  If String is less than Max_String_Length characters long, return it,
-   --  otherwise return a krunched string no longer than Max_String_Length.
-
-   procedure Strip_CR
-     (Text     : in out String;
-      Last     : out Integer;
-      CR_Found : out Boolean);
-   --  Same as above, but works on Text, and more efficient
-   --  Text (Text'First .. Last) contains the new result.
-   --  CR_Found is set to True if a CR was found in Text.
-
-   procedure Strip_CR_And_NUL
-     (Text      : in out String;
-      Last      : out Integer;
-      CR_Found  : out Boolean;
-      NUL_Found : out Boolean;
-      Trailing_Space_Found : out Boolean);
-   --  Same as Strip_CR, and strip also ASCII.NUL characters
-   --  Note that CR chars alone are not replaced by LF chars.
-   --  Also check if Text has trailing spaces in a line.
-
-   function Strip_Ending_Linebreaks (Text : String) return String;
-   --  Return a version of Text after stripping all ending CR and LF
-   --  characters.
-
-   function Do_Tab_Expansion
-     (Text : String; Tab_Size : Integer) return String;
-   --  Return a version of Text after all tabs have been correctly expanded
-   --  depending on the value of Tab_Size.
-   --  This function works correctly with multiple-line strings.
-
-   function Strip_Quotes (S : String) return String;
-   --  Remove the quotes and the spaces at the beginning and end of S
-
-   function Strip_Single_Underscores (S : String) return String;
-   --  Return S stripped of single underscores, and with multiple underscores
-   --  concatenated into one.
-   --  This is used to process menu shortcuts, for example
-   --    Strip_Single_Underscores ("/_Project/C_lean") returns "/Project/Clean"
-
-   function Image (N : Integer) return String;
-   --  Create a string image of the given Integer
-
-   function Safe_Value (S : String; Default : Integer := 1) return Integer;
-   --  Convert S to a Natural, making sure there is no exception raised.
-   --  If S doesn't contain a valid number, Default is returned.
-
-   function Number_Of_Digits (N : Integer) return Natural;
-   --  Return the number of digits for the given Integer number;
-
-   function Is_Entity_Letter (Char : Wide_Wide_Character) return Boolean;
-   pragma Inline (Is_Entity_Letter);
-   --  Return True if the given letter is a valid letter for an entity name
-   --  (ie if the letter is either alphanumeric or an '_').
-
-   function Is_Operator_Letter (Char : Wide_Wide_Character) return Boolean;
-   --  Return True if the given letter is a valid operator
-
-   function Is_File_Letter (Char : Wide_Wide_Character) return Boolean;
-   pragma Inline (Is_File_Letter);
-   --  Return True if the given letter is a valid letter for a file name.
-
-   procedure Replace
-     (S     : in out GNAT.Strings.String_Access;
-      Value : String);
-   --  Set S to Value, free previous content if any
-
-   procedure Replace
-     (S     : in out GNAT.Strings.String_Access;
-      Value : GNAT.Strings.String_Access);
-   --  Idem, but does nothing if Value is null
-
-   function Has_Include_Directive (Str : String) return Boolean;
-   --  Return True is Str contains an #include directive
-
-   -------------------
-   -- Argument_List --
-   -------------------
-
-   function Clone
-     (List : GNAT.Strings.String_List) return GNAT.Strings.String_List;
-   --  Return a deep-copy of List. The returned value must be freed by the
-   --  caller.
-
-   procedure Append
-     (List  : in out GNAT.Strings.String_List_Access;
-      List2 : GNAT.Strings.String_List);
-   procedure Append
-     (List  : in out GNAT.Strings.String_List_Access;
-      Item  : String);
-   --  Append all the strings in List2 to the end of List.
-   --  The strings in List2 are not duplicated.
-   --  List might be null initially.
-
-   ---------------------------
-   -- C String manipulation --
-   ---------------------------
-
-   procedure Copy_String
-     (Item : Interfaces.C.Strings.chars_ptr;
-      Str  : out String;
-      Len  : Natural);
-   --  Copy Len characters from Item to Str
-
-   ----------------------------
-   -- Arguments manipulation --
-   ----------------------------
-
-   function Protect
-     (S                   : String;
-      Protect_Quotes      : Boolean := True;
-      Protect_Spaces      : Boolean := False;
-      Protect_Backslashes : Boolean := True) return String;
-   --  Escape special characters in S.
-   --  Quotes are only escaped when Protect_Quotes is true.
-   --  Spaces are only escaped when Protect_Spaces is true.
-
-   function Unprotect (S : String) return String;
-   --  Unprotect an argument: remove the leading and ending '"',
-   --  and un-escape the "\" when necessary.
-
-   function Unquote (S : String) return String;
-   --  Remove the leading and ending '"' if present
-
-   function Revert (S : String; Separator : String := ".") return String;
-   --  Given a string S composed of names separated with Separator
-   --  (e.g. Put_Line.Text_IO.Ada), return the names reversed
-   --  (e.g. Ada.Text_IO.Put_Line).
-
-   ----------------------
-   -- URL manipulation --
-   ----------------------
-
-   function URL_Decode (URL : String) return String;
-   --  Decode URL into a regular string. Many characters are forbiden into an
-   --  URL and needs to be encoded. A character is encoded by %XY where XY is
-   --  the character's ASCII hexadecimal code. For example a space is encoded
-   --  as %20.
-
-   function Compare (A, B : String) return Integer;
-   function Compare (A, B : Integer) return Integer;
-   --  Return -1 if A<B, 1 if A>B and 0 otherwise. This routine is useful for
-   --  model specific sorting. The second version does the same comparing
-   --  integers. Even if not using string, it is better to keep this routine
-   --  next to the compare based on strings.
-
-   ----------
-   -- Hash --
-   ----------
-
-   generic
-      type Header_Num is range <>;
-   function Hash (Key : String) return Header_Num;
-   --  A generic hashing function working on String keys
-
-   generic
-      type Header_Num is range <>;
-   function Case_Insensitive_Hash (Key : String) return Header_Num;
-   --  A generic hashing function working on case insensitive String keys
-
-private
-   pragma Inline (Is_Blank);
-   pragma Inline (Looking_At);
-   pragma Inline (Skip_To_Char);
-   pragma Inline (Copy_String);
-   pragma Inline (Replace);
-   pragma Inline (Compare);
-end String_Utils;
diff --git a/packages/ada-mode/gps_source/utf8_utils.adb 
b/packages/ada-mode/gps_source/utf8_utils.adb
deleted file mode 100755
index b835165..0000000
--- a/packages/ada-mode/gps_source/utf8_utils.adb
+++ /dev/null
@@ -1,313 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2007-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
-with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
-with GNAT.Decode_UTF8_String;
-with Config;
-
-package body UTF8_Utils is
-
-   Locale_To_UTF_8 : Iconv_T;
-   UTF_8_To_Locale : Iconv_T;
-   Latin1_To_UTF_8 : Iconv_T;
-   UTF_8_To_UTF_32 : Iconv_T;
-   Is_Opened       : Boolean := False;
-
-   procedure Open;
-   --  Initialize internal data if not yet initialized
-
-   ----------
-   -- Open --
-   ----------
-
-   procedure Open is
-   begin
-      if not Is_Opened then
-         Locale_To_UTF_8 := Iconv_Open
-           (To_Code => UTF8, From_Code => Config.Default_Charset);
-         UTF_8_To_Locale := Iconv_Open
-           (From_Code => UTF8, To_Code => Config.Default_Charset);
-         Latin1_To_UTF_8 := Iconv_Open
-           (From_Code => ISO_8859_1, To_Code => UTF8);
-         UTF_8_To_UTF_32 := Iconv_Open
-           (From_Code => UTF8, To_Code => UTF32);
-         Is_Opened := True;
-      end if;
-   end Open;
-
-   ---------------------
-   -- Unknown_To_UTF8 --
-   ---------------------
-
-   procedure Unknown_To_UTF8
-     (Input   : String;
-      Output  : out GNAT.Strings.String_Access;
-      Success : out Boolean) is
-   begin
-      Open;
-      Output := null;
-      Success := True;
-
-      --  First check if the string is already UTF-8
-      if Validate (UTF_8_To_UTF_32, Input) then
-         --  The string is UTF-8, nothing to do
-         return;
-      end if;
-
-      --  The string is not valid UTF-8, assume it is encoded using the locale.
-
-      if Validate (Locale_To_UTF_8, Input) then
-         Output := new String'(Iconv (Locale_To_UTF_8, Input));
-      else
-         Success := False;
-      end if;
-   end Unknown_To_UTF8;
-
-   function Unknown_To_UTF8
-     (Input   : String;
-      Success : access Boolean) return UTF8_String
-   is
-      Output : GNAT.Strings.String_Access;
-   begin
-
-      Unknown_To_UTF8 (Input, Output, Success.all);
-
-      if Success.all then
-         if Output = null then
-            return Input;
-         else
-            declare
-               S : constant String := Output.all;
-            begin
-               Free (Output);
-               return S;
-            end;
-         end if;
-
-      else
-         return "";
-      end if;
-   end Unknown_To_UTF8;
-
-   function Unknown_To_UTF8
-     (Input : String) return UTF8_String
-   is
-      Success : aliased Boolean;
-      S       : constant String := Unknown_To_UTF8 (Input, Success'Access);
-   begin
-      if Success then
-         return S;
-      else
-         return "<could not convert to UTF8>";
-      end if;
-   end Unknown_To_UTF8;
-
-   --------------------
-   -- UTF8_To_Locale --
-   --------------------
-
-   function UTF8_To_Locale (Input : UTF8_String) return String is
-   begin
-      Open;
-      return Iconv (UTF_8_To_Locale, Input);
-   end UTF8_To_Locale;
-
-   --------------------
-   -- Locale_To_UTF8 --
-   --------------------
-
-   function Locale_To_UTF8 (Input : String) return UTF8_String is
-   begin
-      Open;
-      return Iconv (Locale_To_UTF_8, Input);
-   end Locale_To_UTF8;
-
-   -------------------
-   -- UTF8_Get_Char --
-   -------------------
-
-   function UTF8_Get_Char (Input : UTF8_String) return Wide_Wide_Character is
-      Next   : Positive := Input'First;
-      Result : Wide_Wide_Character;
-   begin
-      GNAT.Decode_UTF8_String.Decode_Wide_Wide_Character
-        (Input, Next, Result);
-      return Result;
-   end UTF8_Get_Char;
-
-   --------------------
-   -- UTF8_Next_Char --
-   --------------------
-
-   function UTF8_Next_Char
-     (Str : UTF8_String; Index : Positive) return Positive
-   is
-      Byte : constant Character := Str (Index);
-   begin
-      case Byte is
-         when Character'Val (16#C0#) .. Character'Val (16#DF#) =>
-            return Index + 2;
-         when Character'Val (16#E0#) .. Character'Val (16#EF#) =>
-            return Index + 3;
-         when Character'Val (16#F0#) .. Character'Val (16#F7#) =>
-            return Index + 4;
-         when Character'Val (16#F8#) .. Character'Val (16#FB#) =>
-            return Index + 5;
-         when Character'Val (16#FC#) .. Character'Val (16#FD#) =>
-            return Index + 6;
-         when others =>
-            return Index + 1;
-      end case;
-   end UTF8_Next_Char;
-
-   --------------------
-   -- UTF8_Next_Char --
-   --------------------
-
-   function UTF8_Next_Char
-     (Str : UTF8_Unbounded_String; Index : Positive) return Positive
-   is
-      Byte : constant Character := Element (Str, Index);
-   begin
-      case Byte is
-         when Character'Val (16#C0#) .. Character'Val (16#DF#) =>
-            return Index + 2;
-         when Character'Val (16#E0#) .. Character'Val (16#EF#) =>
-            return Index + 3;
-         when Character'Val (16#F0#) .. Character'Val (16#F7#) =>
-            return Index + 4;
-         when Character'Val (16#F8#) .. Character'Val (16#FB#) =>
-            return Index + 5;
-         when Character'Val (16#FC#) .. Character'Val (16#FD#) =>
-            return Index + 6;
-         when others =>
-            return Index + 1;
-      end case;
-   end UTF8_Next_Char;
-
-   --------------------
-   -- UTF8_Prev_Char --
-   --------------------
-
-   function UTF8_Prev_Char
-     (Str : UTF8_String; Index : Natural) return Natural
-   is
-      Result : Integer := Index - 1;
-   begin
-      if Index not in Str'Range then
-         return Index;
-      end if;
-
-      while Result in Str'Range and then
-        Str (Result) in Character'Val (16#80#) .. Character'Val (16#BF#)
-      loop
-         Result := Result - 1;
-      end loop;
-
-      return Result;
-   end UTF8_Prev_Char;
-
-   ---------------------
-   -- Latin_1_To_UTF8 --
-   ---------------------
-
-   function Latin_1_To_UTF8 (Input : String) return UTF8_String is
-   begin
-      Open;
-      return Iconv (Latin1_To_UTF_8, Input);
-   end Latin_1_To_UTF8;
-
-   --------------
-   -- Validate --
-   --------------
-
-   function Validate
-     (Object : Iconv_T; Input : Byte_Sequence) return Boolean
-   is
-      Output       : Byte_Sequence (1 .. 4096);
-      Input_Index  : Positive := Input'First;
-      Output_Index : Positive := Output'First;
-      Result       : Iconv_Result;
-   begin
-      if Input = "" then
-         return True;
-      end if;
-
-      loop
-         Iconv (Object, Input, Input_Index, Output, Output_Index, Result);
-
-         case Result is
-            when Invalid_Multibyte_Sequence | Incomplete_Multibyte_Sequence =>
-               return False;
-            when Success =>
-               return True;
-            when Full_Buffer =>
-               --  Continue convertion by rewriting output buffer
-               Output_Index := Output'First;
-         end case;
-      end loop;
-   end Validate;
-
-   --------------------
-   -- Validate_UTF_8 --
-   --------------------
-
-   function Validate_UTF_8 (Input : Byte_Sequence) return Boolean is
-   begin
-      Open;
-
-      return Validate (UTF_8_To_UTF_32, Input);
-   end Validate_UTF_8;
-
-   ---------------------
-   -- Column_To_Index --
-   ---------------------
-
-   function Column_To_Index
-     (Buffer : UTF8_String; Column : Character_Offset_Type) return Natural
-   is
-      Result : Positive := Buffer'First;
-   begin
-      if Column <= 0 then
-         return 0;
-      end if;
-
-      for J in 2 .. Column  loop
-         Result := UTF8_Next_Char (Buffer, Result);
-      end loop;
-
-      return Result;
-   end Column_To_Index;
-
-   -----------------
-   -- UTF8_Length --
-   -----------------
-
-   function UTF8_Length (Item : UTF8_String) return Natural is
-      Result : Natural := 0;
-      Index  : Positive := Item'First;
-
-   begin
-      while Index <= Item'Last loop
-         Result := Result + 1;
-         Index := UTF8_Next_Char (Item, Index);
-      end loop;
-
-      return Result;
-   end UTF8_Length;
-
-end UTF8_Utils;
diff --git a/packages/ada-mode/gps_source/utf8_utils.ads 
b/packages/ada-mode/gps_source/utf8_utils.ads
deleted file mode 100755
index e827d98..0000000
--- a/packages/ada-mode/gps_source/utf8_utils.ads
+++ /dev/null
@@ -1,101 +0,0 @@
-------------------------------------------------------------------------------
---                                  G P S                                   --
---                                                                          --
---                     Copyright (C) 2007-2016, AdaCore                     --
---                                                                          --
--- This is free software;  you can redistribute it  and/or modify it  under --
--- terms of the  GNU General Public License as published  by the Free Soft- --
--- ware  Foundation;  either version 3,  or (at your option) any later ver- --
--- sion.  This software is distributed in the hope  that it will be useful, --
--- but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN- --
--- TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public --
--- License for  more details.  You should have  received  a copy of the GNU --
--- General  Public  License  distributed  with  this  software;   see  file --
--- COPYING3.  If not, go to http://www.gnu.org/licenses for a complete copy --
--- of the license.                                                          --
-------------------------------------------------------------------------------
-
---  This package provides a set of high-level subprograms for handling UTF8
---  encoding
-
-with Basic_Types;    use Basic_Types;
-with GNAT.Strings;   use GNAT.Strings;
-with GNATCOLL.Iconv; use GNATCOLL.Iconv;
-
-package UTF8_Utils is
-
-   function Unknown_To_UTF8
-     (Input   : String;
-      Success : access Boolean) return UTF8_String;
-   --  Transform a string of unknown encoding to UTF-8.
-   --  The heuristics used is the following:
-   --    - if S already contains valid UTF-8, assume it is already encoded
-   --      in UTF8 (the statistical chances for this are very high)
-   --    - if S does not contain valid UTF-8, assume it is encoded using the
-   --      locale, and attempt to convert it from the locale to UTF-8.
-   --  Success is set to False if the conversion failed.
-
-   function Unknown_To_UTF8
-     (Input   : String) return UTF8_String;
-   --  Same as above, but return "<could not convert to UTF8>" if the
-   --  conversion could not be done.
-
-   procedure Unknown_To_UTF8
-     (Input   : String;
-      Output  : out String_Access;
-      Success : out Boolean);
-   --  Same as above, but return Output as Unchecked_String_Access for
-   --  efficiency. Output is still in UTF8 format, and the caller is
-   --  responsible for freeing it.
-   --  In addition, if Input is already a valid UTF8 string, then Output
-   --  will be set to null: you should use Input in this case.
-   --  If Success is set to False, Output will also be set to null.
-   --  Warning: Never reference Output (Output'Range) or Output'Last,
-   --  use Output (1 .. Len) and Len instead.
-
-   function UTF8_To_Locale (Input : UTF8_String) return String;
-   --  Convert Input to the GPS locale (ie, the contents of the environment
-   --  variable CHARSET, defaulting to ISO-8859-1).
-   --  If Input could not be converted, Input is returned as-is.
-
-   function Locale_To_UTF8 (Input : String) return UTF8_String;
-   --  Convert Input from the GPS locale (ie, the contents of the environment
-   --  variable CHARSET, defaulting to ISO-8859-1).
-   --  If Input could not be converted, Input is returned as-is.
-
-   function UTF8_Next_Char
-     (Str : UTF8_String; Index : Positive) return Positive;
-   function UTF8_Next_Char
-     (Str : UTF8_Unbounded_String; Index : Positive) return Positive;
-   --  Find the start of the next UTF8 character after the Index-th byte.
-   --  Index has to be on the start of a character.
-   --  Index is set to a value greater than Str'Last if there is no more
-   --  character.
-
-   function UTF8_Prev_Char
-     (Str : UTF8_String; Index : Natural) return Natural;
-   --  Find the start of the previous UTF8 character before the Index-th byte.
-   --  Index has to be on the start of a character.
-   --  Index is set to 0 if there is no more character.
-
-   function UTF8_Get_Char (Input : UTF8_String) return Wide_Wide_Character;
-   --  Return first character of UTF8_String
-
-   function Latin_1_To_UTF8 (Input : String) return UTF8_String;
-   --  Convert Latin_1 string to UTF-8.
-
-   function Column_To_Index
-     (Buffer : UTF8_String; Column : Character_Offset_Type) return Natural;
-   --  Return index of first byte of UTF8 character in given Column
-   --  Return 0 in Column <= 0. Return Buffer'First when Column = 1
-
-   function UTF8_Length (Item : UTF8_String) return Natural;
-   --  Returns number of user visible characters in UTF8 encoded string.
-
-   function Validate (Object : Iconv_T; Input : Byte_Sequence) return Boolean;
-   --  Check if convertion of Text is possible using given Object
-
-   function Validate_UTF_8 (Input : Byte_Sequence) return Boolean;
-   --  Check whether Input is valid UTF-8
-
-end UTF8_Utils;
diff --git a/packages/ada-mode/run_wisi_common_parse.adb 
b/packages/ada-mode/run_wisi_common_parse.adb
index d2d303e..5d99578 100644
--- a/packages/ada-mode/run_wisi_common_parse.adb
+++ b/packages/ada-mode/run_wisi_common_parse.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -20,7 +20,10 @@ pragma License (GPL);
 
 with Ada.Command_Line;
 with Ada.Exceptions;
+with Ada.IO_Exceptions;
+with Ada.Real_Time;
 with Ada.Text_IO;
+with GNAT.Traceback.Symbolic;
 with SAL;
 with System.Multiprocessors;
 package body Run_Wisi_Common_Parse is
@@ -30,8 +33,12 @@ package body Run_Wisi_Common_Parse is
       use all type WisiToken.Parse.LR.Parse_Table_Ptr;
       use Ada.Text_IO;
    begin
-      Put_Line ("usage: <file_name> <parse_action> [options]");
+      Put_Line
+        ("usage: <file_name> <parse_action> [partial parse params]" &
+           "[options]");
       Put_Line ("parse_action: {Navigate | Face | Indent}");
+      Put_Line ("partial parse params: begin_byte_pos end_byte_pos 
goal_byte_pos begin_char_pos begin_line" &
+                  " end_line begin_indent");
       Put_Line ("options:");
       Put_Line ("--verbosity n m l:");
       Put_Line ("   n: parser; m: mckenzie; l: action");
@@ -53,6 +60,7 @@ package body Run_Wisi_Common_Parse is
                   Integer'Image 
(WisiToken.Parse.LR.Parser.Default_Max_Parallel) & ")");
       Put_Line ("--task_count n : worker tasks in error recovery");
       Put_Line ("--disable_recover : disable error recovery; default enabled");
+      Put_Line ("--debug_mode : tracebacks from unhandled exceptions; default 
disabled");
       Put_Line ("--lang_params <language-specific params>");
       Put_Line ("--repeat_count n : repeat parse count times, for profiling; 
default 1");
       New_Line;
@@ -82,7 +90,23 @@ package body Run_Wisi_Common_Parse is
 
          Result.Source_File_Name  := +Ada.Command_Line.Argument (1);
          Result.Post_Parse_Action := Wisi.Post_Parse_Action_Type'Value 
(Ada.Command_Line.Argument (2));
-         Arg               := 3;
+
+         if Argument_Count >= 3 and then Argument (3)(1) /= '-' then
+            Result.Begin_Byte_Pos := WisiToken.Buffer_Pos'Value (Argument (3));
+            Result.End_Byte_Pos   := WisiToken.Buffer_Pos'Value (Argument (4)) 
- 1; -- match emacs region
+            Result.Goal_Byte_Pos  := WisiToken.Buffer_Pos'Value (Argument (5));
+            Result.Begin_Char_Pos := WisiToken.Buffer_Pos'Value (Argument (6));
+            Result.Begin_Line     := WisiToken.Line_Number_Type'Value 
(Argument (7));
+            Result.End_Line       := WisiToken.Line_Number_Type'Value 
(Argument (8));
+            Result.Begin_Indent   := Integer'Value (Argument (9));
+            Arg                   := 10;
+         else
+            Result.Begin_Byte_Pos := WisiToken.Invalid_Buffer_Pos;
+            Result.End_Byte_Pos   := WisiToken.Invalid_Buffer_Pos;
+            Result.Begin_Char_Pos := WisiToken.Buffer_Pos'First;
+            Result.Begin_Line     := WisiToken.Line_Number_Type'First;
+            Arg                   := 3;
+         end if;
 
          loop
             exit when Arg > Argument_Count;
@@ -148,4 +172,129 @@ package body Run_Wisi_Common_Parse is
       raise SAL.Parameter_Error;
    end Get_CL_Params;
 
+   procedure Parse_File
+     (Parser     : in out WisiToken.Parse.LR.Parser.Parser;
+      Parse_Data : in out Wisi.Parse_Data_Type'Class;
+      Descriptor : in     WisiToken.Descriptor)
+   is
+      use Ada.Text_IO;
+      use WisiToken;
+
+      Cl_Params : Command_Line_Params; -- not initialized for exception handler
+      Start     : Ada.Real_Time.Time;
+   begin
+      Cl_Params := Get_CL_Params (Parser);
+
+      --  Do this after setting Trace_Parse so lexer verbosity is set
+      begin
+         Parser.Lexer.Reset_With_File
+           (-Cl_Params.Source_File_Name, Cl_Params.Begin_Byte_Pos, 
Cl_Params.End_Byte_Pos, Cl_Params.Begin_Char_Pos,
+            Cl_Params.Begin_Line);
+      exception
+      when Ada.IO_Exceptions.Name_Error =>
+         Put_Line (Standard_Error, "'" & (-Cl_Params.Source_File_Name) & "' 
cannot be opened");
+         return;
+      end;
+
+      if Cl_Params.End_Line = Invalid_Line_Number then
+         --  User did not provide; run lexer to get end line.
+         declare
+            Token : Base_Token;
+            Lexer_Error : Boolean;
+            pragma Unreferenced (Lexer_Error);
+         begin
+            loop
+               Lexer_Error := Parser.Lexer.Find_Next (Token);
+               exit when Token.ID = Descriptor.EOI_ID;
+            end loop;
+            Cl_Params.End_Line := Token.Line;
+         end;
+      end if;
+
+      Parse_Data.Initialize
+        (Post_Parse_Action => Cl_Params.Post_Parse_Action,
+         Descriptor        => Descriptor'Unrestricted_Access,
+         Source_File_Name  => -Cl_Params.Source_File_Name,
+         Begin_Line        => Cl_Params.Begin_Line,
+         End_Line          => Cl_Params.End_Line,
+         Begin_Indent      => Cl_Params.Begin_Indent,
+         Params            => -Cl_Params.Lang_Params);
+
+      if Cl_Params.Repeat_Count > 1 then
+         Start := Ada.Real_Time.Clock;
+      end if;
+
+      for I in 1 .. Cl_Params.Repeat_Count loop
+         declare
+            procedure Clean_Up
+            is
+               use all type SAL.Base_Peek_Type;
+            begin
+               Parser.Lexer.Discard_Rest_Of_Input;
+               if Cl_Params.Repeat_Count = 1 and Parser.Parsers.Count > 0 then
+                  Parse_Data.Put
+                    (Parser.Lexer.Errors,
+                     Parser.Parsers.First.State_Ref.Errors,
+                     Parser.Parsers.First.State_Ref.Tree);
+               end if;
+            end Clean_Up;
+
+         begin
+            Parse_Data.Reset;
+            Parser.Lexer.Reset;
+
+            begin
+               Parser.Parse;
+            exception
+            when WisiToken.Partial_Parse =>
+               null;
+            end;
+            Parser.Execute_Actions;
+
+            if Cl_Params.Repeat_Count = 1 then
+               Parse_Data.Put (Parser);
+               Parse_Data.Put
+                 (Parser.Lexer.Errors,
+                  Parser.Parsers.First.State_Ref.Errors,
+                  Parser.Parsers.First.State_Ref.Tree);
+            end if;
+         exception
+         when WisiToken.Syntax_Error =>
+            Clean_Up;
+            Put_Line ("(parse_error)");
+
+         when E : WisiToken.Parse_Error =>
+            Clean_Up;
+            Put_Line ("(parse_error """ & Ada.Exceptions.Exception_Message (E) 
& """)");
+
+         when E : WisiToken.Fatal_Error =>
+            Clean_Up;
+            Put_Line ("(error """ & Ada.Exceptions.Exception_Message (E) & 
""")");
+         end;
+      end loop;
+
+      if Cl_Params.Repeat_Count > 1 then
+         declare
+            use Ada.Real_Time;
+            Finish : constant Time := Clock;
+         begin
+            Put_Line ("Total time:" & Duration'Image (To_Duration (Finish - 
Start)));
+            Put_Line ("per iteration:" & Duration'Image (To_Duration ((Finish 
- Start) / Cl_Params.Repeat_Count)));
+         end;
+      end if;
+
+   exception
+   when SAL.Parameter_Error | Finish =>
+      --  From Get_CL_Params; already handled.
+      null;
+
+   when E : others =>
+      Ada.Command_Line.Set_Exit_Status (Ada.Command_Line.Failure);
+      New_Line (2);
+      Put_Line
+        ("(error ""unhandled exception: " & Ada.Exceptions.Exception_Name (E) 
& ": " &
+           Ada.Exceptions.Exception_Message (E) & """)");
+      Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback (E));
+   end Parse_File;
+
 end Run_Wisi_Common_Parse;
diff --git a/packages/ada-mode/run_wisi_common_parse.ads 
b/packages/ada-mode/run_wisi_common_parse.ads
index 47b4663..0a8a607 100644
--- a/packages/ada-mode/run_wisi_common_parse.ads
+++ b/packages/ada-mode/run_wisi_common_parse.ads
@@ -2,7 +2,7 @@
 --
 --  Common utilities for Gen_Run_Wisi_*_Parse
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -31,7 +31,14 @@ package Run_Wisi_Common_Parse is
    type Command_Line_Params is record
       Post_Parse_Action : Wisi.Post_Parse_Action_Type;
       Source_File_Name  : Ada.Strings.Unbounded.Unbounded_String;
-      Repeat_Count      : Integer := 1;
+      Begin_Byte_Pos    : WisiToken.Buffer_Pos       := 
WisiToken.Invalid_Buffer_Pos;
+      End_Byte_Pos      : WisiToken.Buffer_Pos       := 
WisiToken.Invalid_Buffer_Pos;
+      Goal_Byte_Pos     : WisiToken.Buffer_Pos       := 
WisiToken.Invalid_Buffer_Pos;
+      Begin_Char_Pos    : WisiToken.Buffer_Pos       := 
WisiToken.Buffer_Pos'First;
+      Begin_Line        : WisiToken.Line_Number_Type := 
WisiToken.Line_Number_Type'First;
+      End_Line          : WisiToken.Line_Number_Type := 
WisiToken.Invalid_Line_Number;
+      Begin_Indent      : Integer                    := 0;
+      Repeat_Count      : Integer                    := 1;
       Lang_Params       : Ada.Strings.Unbounded.Unbounded_String;
    end record;
 
@@ -40,4 +47,9 @@ package Run_Wisi_Common_Parse is
    --
    --  Handles --help by outputing help, raising Finish.
 
+   procedure Parse_File
+     (Parser     : in out WisiToken.Parse.LR.Parser.Parser;
+      Parse_Data : in out Wisi.Parse_Data_Type'Class;
+      Descriptor : in     WisiToken.Descriptor);
+
 end Run_Wisi_Common_Parse;
diff --git a/packages/ada-mode/wisi-ada.adb b/packages/ada-mode/wisi-ada.adb
index 4529e58..a476541 100644
--- a/packages/ada-mode/wisi-ada.adb
+++ b/packages/ada-mode/wisi-ada.adb
@@ -2,7 +2,7 @@
 --
 --  see spec.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -93,7 +93,9 @@ package body Wisi.Ada is
       Descriptor        : access constant WisiToken.Descriptor;
       Source_File_Name  : in     String;
       Post_Parse_Action : in     Post_Parse_Action_Type;
-      Line_Count        : in     Line_Number_Type;
+      Begin_Line        : in     WisiToken.Line_Number_Type;
+      End_Line          : in     WisiToken.Line_Number_Type;
+      Begin_Indent      : in     Integer;
       Params            : in     String)
    is
       use Standard.Ada.Strings.Fixed;
@@ -101,7 +103,8 @@ package body Wisi.Ada is
       Last  : Integer := Index (Params, " ");
    begin
       Wisi.Initialize
-        (Wisi.Parse_Data_Type (Data), Descriptor, Source_File_Name, 
Post_Parse_Action, Line_Count, "");
+        (Wisi.Parse_Data_Type (Data), Descriptor, Source_File_Name, 
Post_Parse_Action, Begin_Line, End_Line,
+         Begin_Indent, "");
 
       if Params /= "" then
          Ada_Indent := Integer'Value (Params (First .. Last - 1));
@@ -244,13 +247,10 @@ package body Wisi.Ada is
          declare
             First_Terminal : Augmented_Token renames
               Data.Terminals (Indenting_Token.First_Terminals_Index);
-
-            First_Terminal_First_On_Line : constant Boolean := 
First_Terminal.First and
-              First_Terminal.First_Indent_Line /= Invalid_Line_Number;
          begin
             if Option then
                --  Test cases with "Item => ..."
-               if First_Terminal_First_On_Line then
+               if First_Terminal.First then
                   if Indenting_Token.First_Indent_Line = 
Indenting_Token.Last_Indent_Line then
                      return Comment_Result (Delta_1);
                   else
@@ -265,7 +265,7 @@ package body Wisi.Ada is
                end if;
 
             else
-               if First_Terminal_First_On_Line then
+               if First_Terminal.First then
                   if Indenting_Token.First_Indent_Line = 
Indenting_Token.Last_Indent_Line then
                      return Comment_Result (Delta_1);
                   else
diff --git a/packages/ada-mode/wisi-ada.ads b/packages/ada-mode/wisi-ada.ads
index 190b810..419db92 100644
--- a/packages/ada-mode/wisi-ada.ads
+++ b/packages/ada-mode/wisi-ada.ads
@@ -5,7 +5,7 @@
 --  [1] ada-wisi-elisp-parse.el
 --  [2] ada-indent-user-options.el
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -47,7 +47,9 @@ package Wisi.Ada is
       Descriptor        : access constant WisiToken.Descriptor;
       Source_File_Name  : in     String;
       Post_Parse_Action : in     Post_Parse_Action_Type;
-      Line_Count        : in     WisiToken.Line_Number_Type;
+      Begin_Line        : in     WisiToken.Line_Number_Type;
+      End_Line          : in     WisiToken.Line_Number_Type;
+      Begin_Indent      : in     Integer;
       Params            : in     String);
    --  Call Wisi_Runtime.Initialize, then:
    --
diff --git a/packages/ada-mode/wisi-gpr.adb b/packages/ada-mode/wisi-gpr.adb
index db2388a..caf3577 100644
--- a/packages/ada-mode/wisi-gpr.adb
+++ b/packages/ada-mode/wisi-gpr.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -26,7 +26,9 @@ package body Wisi.Gpr is
       Descriptor        : access constant WisiToken.Descriptor;
       Source_File_Name  : in     String;
       Post_Parse_Action : in     Post_Parse_Action_Type;
-      Line_Count        : in     WisiToken.Line_Number_Type;
+      Begin_Line        : in     WisiToken.Line_Number_Type;
+      End_Line          : in     WisiToken.Line_Number_Type;
+      Begin_Indent      : in     Integer;
       Params            : in     String)
    is
       use Ada.Strings.Fixed;
@@ -34,7 +36,8 @@ package body Wisi.Gpr is
       Last  : Integer := Index (Params, " ");
    begin
       Wisi.Initialize
-        (Wisi.Parse_Data_Type (Data), Descriptor, Source_File_Name, 
Post_Parse_Action, Line_Count, "");
+        (Wisi.Parse_Data_Type (Data), Descriptor, Source_File_Name, 
Post_Parse_Action, Begin_Line, End_Line,
+         Begin_Indent, "");
 
       if Params /= "" then
          --  must match [1] wisi-parse-format-language-options
diff --git a/packages/ada-mode/wisi-gpr.ads b/packages/ada-mode/wisi-gpr.ads
index 5bdc31b..c2fe78e 100644
--- a/packages/ada-mode/wisi-gpr.ads
+++ b/packages/ada-mode/wisi-gpr.ads
@@ -5,7 +5,7 @@
 --  [1] gpr-wisi.el
 --  [2] gpr-indent-user-options.el
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -38,7 +38,9 @@ package Wisi.Gpr is
       Descriptor        : access constant WisiToken.Descriptor;
       Source_File_Name  : in     String;
       Post_Parse_Action : in     Post_Parse_Action_Type;
-      Line_Count        : in     WisiToken.Line_Number_Type;
+      Begin_Line        : in     WisiToken.Line_Number_Type;
+      End_Line          : in     WisiToken.Line_Number_Type;
+      Begin_Indent      : in     Integer;
       Params            : in     String);
    --  Call Wisi_Runtime.Initialize, then:
    --
diff --git a/packages/ada-mode/wisitoken-parse-lr-mckenzie_recover-ada.adb 
b/packages/ada-mode/wisitoken-parse-lr-mckenzie_recover-ada.adb
index 36bff00..9a1f156 100644
--- a/packages/ada-mode/wisitoken-parse-lr-mckenzie_recover-ada.adb
+++ b/packages/ada-mode/wisitoken-parse-lr-mckenzie_recover-ada.adb
@@ -2,7 +2,7 @@
 --
 --  see spec.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -75,15 +75,18 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
       +package_specification_ID  & (+protected_type_declaration_ID) & 
(+single_protected_declaration_ID) &
         (+single_task_declaration_ID) & (+task_type_declaration_ID));
 
-   Statement_Declaration_Start_IDs : constant Terminal_Token_ID_Set :=
+   Minimal_Complete_Action_IDs : constant Terminal_Token_ID_Set :=
      To_Token_ID_Set
        (Descriptor.First_Terminal, Descriptor.Last_Terminal,
         +ABORT_ID & (+ACCEPT_ID) & (+BEGIN_ID) & (+CASE_ID) & (+DECLARE_ID) & 
(+DELAY_ID) & (+ELSE_ID) & (+ELSIF_ID) &
           (+END_ID) & (+ENTRY_ID) & (+EXCEPTION_ID) & (+EXIT_ID) & (+FOR_ID) & 
(+FUNCTION_ID) & (+GENERIC_ID) &
-          (+GOTO_ID) & (+IF_ID) & (+LOOP_ID) & (+OVERRIDING_ID) & 
(+PACKAGE_ID) & (+PRAGMA_ID) & (+PROCEDURE_ID) &
-          (+PROTECTED_ID) & (+RAISE_ID) & (+REQUEUE_ID) & (+RETURN_ID) & 
(+SELECT_ID) & (+SUBTYPE_ID) & (+TASK_ID) &
-          (+TYPE_ID) & (+USE_ID) & (+WHEN_ID) & (+WITH_ID));
-   --  Terminal tokens that must be preceded by an end of 
statement/declaration.
+          (+GOTO_ID) & (+IF_ID) & (+IS_ID) & (+LOOP_ID) & (+OVERRIDING_ID) & 
(+PACKAGE_ID) & (+PRAGMA_ID) &
+          (+PROCEDURE_ID) & (+PROTECTED_ID) & (+RAISE_ID) & (+REQUEUE_ID) & 
(+RETURN_ID) & (+RIGHT_PAREN_ID) &
+          (+SELECT_ID) & (+SUBTYPE_ID) & (+TASK_ID) & (+THEN_ID) & (+TYPE_ID) 
& (+USE_ID) & (+WHEN_ID) & (+WITH_ID) &
+          Descriptor.EOI_ID);
+   --  Terminal tokens where Minimal_Complete_Actions is useful. That
+   --  includes tokens that must be preceded by the end of a statement,
+   --  declaration, or expression (for trailing right paren).
 
    procedure Handle_Check_Fail
      (Trace             : in out WisiToken.Trace'Class;
@@ -198,6 +201,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
                begin
                   New_Config.Cost := New_Config.Cost + 1;
 
+                  New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
                   New_Config.Error_Token.ID := Invalid_Token_ID;
                   New_Config.Check_Status   := (Label => Ok);
 
@@ -272,10 +277,12 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
                   New_Config.Error_Token.ID := Invalid_Token_ID;
                   New_Config.Check_Status   := (Label => Ok);
 
+                  New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
                   Push_Back_Check
                     (New_Config,
                      (+SEMICOLON_ID,
-                     (case 
Ada_Process_Actions.Token_Enum_ID'(-Config.Error_Token.ID) is
+                      (case 
Ada_Process_Actions.Token_Enum_ID'(-Config.Error_Token.ID) is
                        when package_body_ID | package_specification_ID | 
subprogram_body_ID => +name_opt_ID,
                        when protected_type_declaration_ID | 
single_protected_declaration_ID => +protected_definition_ID,
                        when others =>  +identifier_opt_ID)));
@@ -344,7 +351,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
          --
          --  1a. The 'end <end_name_token> ;' is left over from editing, and
          --  should be deleted. Note that there could be an End_Keyword_IDs
-         --  with that end.
+         --  with that end instead of a name.
          --
          --  1b. There is a missing 'begin'.
          --
@@ -382,12 +389,15 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
                Keyword_Item   : Recover_Stack_Item; -- keyword after 'end'; 
may not be present
                Semicolon_Item : Recover_Stack_Item; -- semicolon after 'end'
             begin
-               --  This is a guess, but it is equally as likely as 'ignore 
error', so
-               --  it has the same cost.
-
                New_Config.Error_Token.ID := Invalid_Token_ID;
                New_Config.Check_Status   := (Label => Ok);
 
+               --  This is a guess, and sometimes deleting the error keyword 
is better, so
+               --  give it a cost.
+               New_Config.Cost := New_Config.Cost + 1;
+
+               New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
                case Ada_Process_Actions.Token_Enum_ID'(-Config.Error_Token.ID) 
is
                when block_statement_ID | package_body_ID | subprogram_body_ID 
| task_body_ID =>
                   Semicolon_Item := Stack.Peek (1);
@@ -446,7 +456,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
                Local_Config_Heap.Add (New_Config);
 
                if Trace_McKenzie > Detail then
-                  Put ("Missing_Name_Error 1b " & Image 
(Config.Error_Token.ID, Descriptor), New_Config);
+                  Put ("Missing_Name_Error 1a " & Image 
(Config.Error_Token.ID, Descriptor), New_Config);
                   if Trace_McKenzie > Extra then
                      Trace.Put_Line ("config stack: " & Image 
(New_Config.Stack, Descriptor));
                   end if;
@@ -457,16 +467,18 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
             end;
 
          else
-            --  'exception' found; case 1a - assume missing 'begin'; insert it
+            --  'exception' found; case 1b - assume missing 'begin'; insert it
             --  before 'handled_sequence_of_statements'
             declare
                New_Config : Configuration := Config;
             begin
-               --  This is a guess, but it is equally as likely as 'ignore 
error', so
-               --  it has the same cost.
                New_Config.Error_Token.ID := Invalid_Token_ID;
                New_Config.Check_Status   := (Label => Ok);
 
+               New_Config.Cost := New_Config.Cost + 1;
+
+               New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
                Push_Back_Check
                  (New_Config,
                   (+SEMICOLON_ID,
@@ -480,7 +492,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
                Local_Config_Heap.Add (New_Config);
 
                if Trace_McKenzie > Detail then
-                  Put ("Missing_Name_Error 1a " & Image 
(Config.Error_Token.ID, Descriptor), New_Config);
+                  Put ("Missing_Name_Error 1b " & Image 
(Config.Error_Token.ID, Descriptor), New_Config);
                   if Trace_McKenzie > Extra then
                      Trace.Put_Line ("config stack: " & Image 
(New_Config.Stack, Descriptor));
                   end if;
@@ -537,6 +549,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
                New_Config.Error_Token.ID := Invalid_Token_ID;
                New_Config.Check_Status   := (Label => Ok);
 
+               New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
                --  Push_Back the failed reduce tokens.
                for I in 1 .. New_Config.Check_Token_Count loop
                   declare
@@ -573,6 +587,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
                New_Config.Error_Token.ID := Invalid_Token_ID;
                New_Config.Check_Status   := (Label => Ok);
 
+               New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
                case Ada_Process_Actions.Token_Enum_ID'(-Config.Error_Token.ID) 
is
                when block_statement_ID =>
                   --  There is almost always an open block of some sort; not 
worth
@@ -614,6 +630,14 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
             end;
          end;
       end case;
+   exception
+   when Bad_Config =>
+      null;
+
+   when System.Assertions.Assert_Failure =>
+      if Trace_McKenzie > Outline then
+         Trace.Put_Line ("Ada Language_Fixes Handle_Check_Fail Assert fail");
+      end if;
    end Handle_Check_Fail;
 
    procedure Handle_Parse_Error
@@ -766,6 +790,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
             New_Config.Error_Token.ID := Invalid_Token_ID;
             New_Config.Cost := New_Config.Cost + 2;
 
+            New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
             Push_Back_Check (New_Config, +END_ID);
 
             Insert (New_Config, (+END_ID, Config.Stack 
(Keyword_Index).Token.ID, +SEMICOLON_ID));
@@ -823,6 +849,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
             New_Config.Error_Token.ID := Invalid_Token_ID;
             New_Config.Cost := New_Config.Cost + 1;
 
+            New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
             Push_Back (New_Config); -- end_id
 
             if Matching_Index = Config.Stack.Depth then
@@ -891,6 +919,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
             --  Inserting the replacement is likely to cost 2, so make this 
cost 0.
             New_Config.Cost := New_Config.Cost + 0;
 
+            New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
             if Trace_McKenzie > Detail then
                Put ("Language_Fixes " & Label & Image (Config.Error_Token.ID, 
Descriptor), New_Config);
             end if;
@@ -902,7 +932,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
 
       elsif Config.Error_Token.ID = +WHEN_ID then
          declare
-            Label         : constant String := "missing 'case' ";
+            Label         : constant String := "missing  'case' ";
             New_Config    : Configuration;
             Matching_Index : SAL.Peek_Type := 1;
          begin
@@ -911,7 +941,9 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
                --  missing 'case'
                New_Config := Config;
                New_Config.Error_Token.ID := Invalid_Token_ID;
-               Push_Back_Check (New_Config, +sequence_of_statements_opt_ID);
+
+               New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
                Insert (New_Config, (+CASE_ID, +IS_ID));
                Local_Config_Heap.Add (New_Config);
                if Trace_McKenzie > Detail then
@@ -938,6 +970,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
                New_Config := Config;
                New_Config.Error_Token.ID := Invalid_Token_ID;
 
+               New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
                if New_Config.Stack (1).Token.ID /= Invalid_Token_ID then
                   case Ada_Process_Actions.Token_Enum_ID'(-New_Config.Stack 
(1).Token.ID) is
                   when sequence_of_statements_opt_ID =>
@@ -977,6 +1011,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
          declare
             New_Config : Configuration := Config;
          begin
+            New_Config.Strategy_Counts (Language_Fix) := 
New_Config.Strategy_Counts (Language_Fix) + 1;
+
             Push_Back_Check (New_Config, (+COLON_ID, +IDENTIFIER_ID));
             Insert (New_Config, (+END_ID, +SEMICOLON_ID));
             Local_Config_Heap.Add (New_Config);
@@ -985,6 +1021,14 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
             end if;
          end;
       end if;
+   exception
+   when Bad_Config =>
+      null;
+
+   when System.Assertions.Assert_Failure =>
+      if Trace_McKenzie > Outline then
+         Trace.Put_Line ("Ada Language_Fixes Handle_Parse_Error Assert fail");
+      end if;
    end Handle_Parse_Error;
 
    ----------
@@ -1023,34 +1067,54 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Ada is
       end case;
    end Language_Fixes;
 
-   function Use_Minimal_Complete_Actions
-     (Next_Token : in Token_ID;
-      Config     : in Configuration)
-     return Boolean
+   procedure Use_Minimal_Complete_Actions
+     (Current_Token        : in     Token_ID;
+      Next_Token           : in     Token_ID;
+      Config               : in     Configuration;
+      Use_Complete         :    out Boolean;
+      Matching_Begin_Token :    out Token_ID)
    is
       use all type SAL.Base_Peek_Type;
-      Matching_Index : SAL.Peek_Type := 1;
    begin
-      if Next_Token = Invalid_Token_ID then
-         return False;
-      end if;
-
-      if Statement_Declaration_Start_IDs (Next_Token) then
-         case Ada_Process_Actions.Token_Enum_ID'(-Next_Token) is
-         when ELSE_ID | ELSIF_ID =>
-            --  Check for missing 'if ... then'
-            Find_ID (Config, +IF_ID, Matching_Index);
-            return Matching_Index /= Config.Stack.Depth;
-
-         when WHEN_ID =>
-            Find_ID (Config, +CASE_ID, Matching_Index);
-            return Matching_Index /= Config.Stack.Depth;
+      if Config.Stack.Depth = 1 and Current_Token = Descriptor.EOI_ID then
+         --  Empty input buffer
+         Use_Complete         := True;
+         Matching_Begin_Token := +IDENTIFIER_ID;
+
+      elsif Minimal_Complete_Action_IDs (Current_Token) then
+         Use_Complete := True;
+         case Ada_Process_Actions.Token_Enum_ID'(-Current_Token) is
+         when END_ID =>
+            case Ada_Process_Actions.Token_Enum_ID'(-Next_Token) is
+            when CASE_ID | IF_ID | LOOP_ID | RETURN_ID | SELECT_ID =>
+               Matching_Begin_Token := Next_Token;
+            when IDENTIFIER_ID | SEMICOLON_ID =>
+               Matching_Begin_Token := +BEGIN_ID;
+            when others =>
+               --  'end' is misplaced (see test_mckenzie_recover.adb 
Conflict_1);
+               --  best to delete it.
+               Use_Complete         := False;
+               Matching_Begin_Token := Invalid_Token_ID;
+            end case;
+
+         when ELSE_ID | ELSIF_ID | THEN_ID =>
+            Matching_Begin_Token := +IF_ID;
+
+         when EXCEPTION_ID =>
+            Matching_Begin_Token := +BEGIN_ID;
+
+         --  We don't return LEFT_PAREN for RIGHT_PAREN; better to delete it.
+
+         when IS_ID | WHEN_ID =>
+            --  'IS' could also be FUNCTION, PACKAGE, PROCEDURE; 'WHEN' could 
also be EXCEPTION.
+            Matching_Begin_Token := +CASE_ID;
 
          when others =>
-            return True;
+            Matching_Begin_Token := Invalid_Token_ID;
          end case;
       else
-         return False;
+         Use_Complete := False;
+         Matching_Begin_Token := Invalid_Token_ID;
       end if;
    end Use_Minimal_Complete_Actions;
 
diff --git a/packages/ada-mode/wisitoken-parse-lr-mckenzie_recover-ada.ads 
b/packages/ada-mode/wisitoken-parse-lr-mckenzie_recover-ada.ads
index 32f13c0..2ceceab 100644
--- a/packages/ada-mode/wisitoken-parse-lr-mckenzie_recover-ada.ads
+++ b/packages/ada-mode/wisitoken-parse-lr-mckenzie_recover-ada.ads
@@ -2,7 +2,7 @@
 --
 --  Ada language specific algorithms for McKenzie_Recover
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018, 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -28,20 +28,22 @@ package WisiToken.Parse.LR.McKenzie_Recover.Ada is
       Tree              : in     Syntax_Trees.Tree;
       Local_Config_Heap : in out Config_Heaps.Heap_Type;
       Config            : in     Configuration);
-   --  See wisitoken-lr-parser.ads Language_Fixes_Access for description.
+   --  See wisitoken-parse-lr-parser.ads Language_Fixes_Access for description.
 
-   function Use_Minimal_Complete_Actions
-     (Next_Token : in Token_ID;
-      Config     : in Configuration)
-     return Boolean;
-   --  See wisitoken-lr-parser.ads Language_Use_Minimal_Complete_Actions_Access
+   procedure Use_Minimal_Complete_Actions
+     (Current_Token        : in     Token_ID;
+      Next_Token           : in     Token_ID;
+      Config               : in     Configuration;
+      Use_Complete         :    out Boolean;
+      Matching_Begin_Token :    out Token_ID);
+   --  See wisitoken-parse-lr-parser.ads 
Language_Use_Minimal_Complete_Actions_Access
    --  for description.
 
    function String_ID_Set
      (Descriptor        : in WisiToken.Descriptor;
       String_Literal_ID : in Token_ID)
      return Token_ID_Set;
-   --  See wisitoken-lr-parser.ads Language_String_ID_Set_Access for
+   --  See wisitoken-parse-lr-parser.ads Language_String_ID_Set_Access for
    --  description.
 
 end WisiToken.Parse.LR.McKenzie_Recover.Ada;
diff --git a/packages/ada-mode/xref-ada.el b/packages/ada-mode/xref-ada.el
index 4f4a0ac..ee93697 100644
--- a/packages/ada-mode/xref-ada.el
+++ b/packages/ada-mode/xref-ada.el
@@ -1,6 +1,6 @@
 ;; xref-ada.el --- ada-mode backend for xref.el -*-lexical-binding:t-*-
 ;;
-;; Copyright (C) 2018  Free Software Foundation, Inc.
+;; Copyright (C) 2018 - 2019  Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 ;;
@@ -31,7 +31,7 @@
         ;; (spec/body).
         ;;
         ;; If t-prop is nil: identifier is from prompt/completion,
-        ;; the line number is incuded in the identifier
+        ;; the line number may be included in the identifier
         ;; wrapped in <>, and the desired file is the current file.
         (ident
          (if t-prop
@@ -46,7 +46,8 @@
         (line
          (if t-prop
              (plist-get t-prop ':line)
-           (string-to-number (match-string 2 identifier))))
+           (when (match-string 2 identifier)
+             (string-to-number (match-string 2 identifier)))))
         (column
          (if t-prop
              (plist-get t-prop ':column)
@@ -95,7 +96,7 @@
         nil))))
 
 (cl-defmethod xref-backend-identifier-completion-table ((_backend (eql 
xref-ada)))
-  (wisi-validate-cache (point-max) t 'navigate)
+  (wisi-validate-cache (point-min) (point-max) t 'navigate)
   (save-excursion
     (let ((table nil)
          cache)
diff --git a/packages/wisi/NEWS b/packages/wisi/NEWS
index a594bea..22fe4e4 100644
--- a/packages/wisi/NEWS
+++ b/packages/wisi/NEWS
@@ -7,6 +7,19 @@ Please send wisi bug reports to address@hidden, with
 'wisi' in the subject. If possible, use M-x report-emacs-bug.
 
 
+* wisi 2.1.0
+21 Mar 2019
+
+** Add support for partial parsing; useful in very large files. Files
+   larger than wisi-partial-parse-threshold (default 100_001) will be
+   parsed partially.
+
+** Miscellaneous speed-ups in the Ada code; 'pragma Inline', better use of Ada 
tasks.
+
+** Better error correction in the Ada process parser; insert minimimal
+  tokens to complete a statement/declaration before or after the error
+  point.
+
 * wisi 2.0.1
 8 Dec 2018
 
diff --git a/packages/wisi/README b/packages/wisi/README
index 0435747..db1af26 100644
--- a/packages/wisi/README
+++ b/packages/wisi/README
@@ -1,7 +1,9 @@
-Emacs wisi package 2.0.0
+Emacs wisi package 2.1.0
 
 The wisi package provides utilities for using generalized LALR parsers
 (in elisp or external processes) to do indentation, fontification, and
 navigation. See ada-mode for an example of its use.
 
+It also provides wisitoken-parse_table-mode, for navigating the
+diagnostic parse tables output by wisitoken-bnf-generate.
 
diff --git a/packages/wisi/build-wisitoken-bnf-generate.sh 
b/packages/wisi/build-wisitoken-bnf-generate.sh
old mode 100644
new mode 100755
diff --git a/packages/wisi/sal-gen_array_image.adb 
b/packages/wisi/sal-gen_array_image.adb
new file mode 100644
index 0000000..7f9097d
--- /dev/null
+++ b/packages/wisi/sal-gen_array_image.adb
@@ -0,0 +1,34 @@
+--  Abstract :
+--
+--  See spec.
+--
+--  Copyright (C) 2019 Free Software Foundation, Inc.
+--
+--  This library is free software;  you can redistribute it and/or modify it
+--  under terms of the  GNU General Public License  as published by the Free
+--  Software  Foundation;  either version 3,  or (at your  option) any later
+--  version. This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN-
+--  TABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+--  As a special exception under Section 7 of GPL version 3, you are granted
+--  additional permissions described in the GCC Runtime Library Exception,
+--  version 3.1, as published by the Free Software Foundation.
+
+pragma License (Modified_GPL);
+
+with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
+function SAL.Gen_Array_Image (Item : in Array_Type) return String
+is
+   Result : Unbounded_String := To_Unbounded_String ("(");
+begin
+   for I in Item'Range loop
+      Result := Result & Element_Image (Item (I));
+      if I = Item'Last then
+         Result := Result & ")";
+      else
+         Result := Result & ", ";
+      end if;
+   end loop;
+   return To_String (Result);
+end SAL.Gen_Array_Image;
diff --git a/packages/wisi/sal-gen_array_image.ads 
b/packages/wisi/sal-gen_array_image.ads
new file mode 100644
index 0000000..53bd25f
--- /dev/null
+++ b/packages/wisi/sal-gen_array_image.ads
@@ -0,0 +1,24 @@
+--  Abstract :
+--
+--  Image for normal Ada array types
+--
+--  Copyright (C) 2019 Free Software Foundation, Inc.
+--
+--  This library is free software;  you can redistribute it and/or modify it
+--  under terms of the  GNU General Public License  as published by the Free
+--  Software  Foundation;  either version 3,  or (at your  option) any later
+--  version. This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN-
+--  TABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+--  As a special exception under Section 7 of GPL version 3, you are granted
+--  additional permissions described in the GCC Runtime Library Exception,
+--  version 3.1, as published by the Free Software Foundation.
+
+pragma License (Modified_GPL);
+generic
+   type Index_Type is (<>);
+   type Element_Type is private;
+   type Array_Type is array (Index_Type) of Element_Type;
+   with function Element_Image (Item : in Element_Type) return String;
+function SAL.Gen_Array_Image (Item : in Array_Type) return String;
diff --git a/packages/wisi/sal-gen_bounded_definite_vectors.ads 
b/packages/wisi/sal-gen_bounded_definite_vectors.ads
index 04a9ff1..9747704 100644
--- a/packages/wisi/sal-gen_bounded_definite_vectors.ads
+++ b/packages/wisi/sal-gen_bounded_definite_vectors.ads
@@ -3,7 +3,7 @@
 --  A simple bounded vector of definite items, intended to be faster
 --  than Ada.Containers.Bounded_Definite_Vectors.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -80,6 +80,7 @@ package SAL.Gen_Bounded_Definite_Vectors is
    with Implicit_Dereference => Element;
 
    function Constant_Reference (Container : aliased Vector; Index : in 
Index_Type) return Constant_Reference_Type;
+   pragma Inline (Constant_Reference);
 
    type Variable_Reference_Type (Element : not null access Element_Type) is 
null record
    with Implicit_Dereference => Element;
@@ -88,6 +89,7 @@ package SAL.Gen_Bounded_Definite_Vectors is
      (Container : aliased in out Vector;
       Index     :         in     Index_Type)
      return Variable_Reference_Type;
+   pragma Inline (Variable_Reference);
 
    type Cursor is private;
 
@@ -98,11 +100,13 @@ package SAL.Gen_Bounded_Definite_Vectors is
    function Iterate (Container : Vector) return 
Vector_Iterator_Interfaces.Reversible_Iterator'Class;
 
    function Constant_Reference (Container : aliased Vector; Position : in 
Cursor) return Constant_Reference_Type;
+   pragma Inline (Constant_Reference);
 
    function Variable_Reference
      (Container : aliased in out Vector;
       Position  :         in     Cursor)
      return Variable_Reference_Type;
+   pragma Inline (Variable_Reference);
 
 private
 
diff --git a/packages/wisi/sal-gen_definite_doubly_linked_lists.ads 
b/packages/wisi/sal-gen_definite_doubly_linked_lists.ads
index 04a10f1..fda94c4 100644
--- a/packages/wisi/sal-gen_definite_doubly_linked_lists.ads
+++ b/packages/wisi/sal-gen_definite_doubly_linked_lists.ads
@@ -3,7 +3,7 @@
 --  A generic doubly linked list with definite elements, allowing
 --  permanent references to elements.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -97,16 +97,20 @@ package SAL.Gen_Definite_Doubly_Linked_Lists is
 
    function Constant_Reference (Container : in List; Position : in Cursor) 
return Constant_Reference_Type
    with Pre => Position /= No_Element;
+   pragma Inline (Constant_Reference);
    function Constant_Ref (Position : in Cursor) return Constant_Reference_Type
    with Pre => Position /= No_Element;
+   pragma Inline (Constant_Ref);
 
    type Reference_Type (Element : not null access Element_Type) is null record
    with Implicit_Dereference => Element;
 
    function Reference (Container : in List; Position : in Cursor) return 
Reference_Type
    with Pre => Position /= No_Element;
+   pragma Inline (Reference);
    function Ref (Position : in Cursor) return Reference_Type
    with Pre => Position /= No_Element;
+   pragma Inline (Ref);
 
    package Iterator_Interfaces is new Ada.Iterator_Interfaces (Cursor, 
Has_Element);
 
diff --git a/packages/wisi/sal-gen_definite_doubly_linked_lists_sorted.ads 
b/packages/wisi/sal-gen_definite_doubly_linked_lists_sorted.ads
index b3d5431..d57748b 100644
--- a/packages/wisi/sal-gen_definite_doubly_linked_lists_sorted.ads
+++ b/packages/wisi/sal-gen_definite_doubly_linked_lists_sorted.ads
@@ -2,7 +2,7 @@
 --
 --  A generic sorted doubly linked list with definite elements.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -47,6 +47,8 @@ package SAL.Gen_Definite_Doubly_Linked_Lists_Sorted is
    overriding procedure Finalize (Container : in out List);
    --  Free all items in List.
 
+   procedure Clear (Container : in out List) renames Finalize;
+
    overriding function "=" (Left, Right : in List) return Boolean;
    --  True if contents are the same.
 
@@ -113,15 +115,19 @@ package SAL.Gen_Definite_Doubly_Linked_Lists_Sorted is
    with Implicit_Dereference => Element;
 
    function Constant_Reference (Container : in List; Position : in Cursor) 
return Constant_Reference_Type;
+   pragma Inline (Constant_Reference);
    function Constant_Ref (Position : in Cursor) return Constant_Reference_Type;
+   pragma Inline (Constant_Ref);
 
    type Reference_Type (Element : not null access Element_Type) is null record
    with Implicit_Dereference => Element;
 
    function Reference (Container : in List; Position : in Cursor) return 
Reference_Type
    with Pre => Position /= No_Element;
+   pragma Inline (Reference);
    function Ref (Position : in Cursor) return Reference_Type
    with Pre => Position /= No_Element;
+   pragma Inline (Ref);
    --  User must not change the element in a way that affects the sort order.
 
    package Iterator_Interfaces is new Ada.Iterator_Interfaces (Cursor, 
Has_Element);
diff --git a/packages/wisi/sal-gen_indefinite_doubly_linked_lists.ads 
b/packages/wisi/sal-gen_indefinite_doubly_linked_lists.ads
index 5898bc7..0ebfc54 100644
--- a/packages/wisi/sal-gen_indefinite_doubly_linked_lists.ads
+++ b/packages/wisi/sal-gen_indefinite_doubly_linked_lists.ads
@@ -3,7 +3,7 @@
 --  A generic doubly linked list with indefinite elements, allowing
 --  permanent references to elements.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -71,15 +71,18 @@ package SAL.Gen_Indefinite_Doubly_Linked_Lists is
 
    function Constant_Reference (Position : in Cursor) return 
Constant_Reference_Type
    with Pre => Has_Element (Position);
+   pragma Inline (Constant_Reference);
 
    function Constant_Ref (Container : in List'Class; Position : in Peek_Type) 
return Constant_Reference_Type
    with Pre => Position <= Container.Length;
+   pragma Inline (Constant_Ref);
 
    type Reference_Type (Element : not null access Element_Type) is null record
    with Implicit_Dereference => Element;
 
    function Reference (Position : in Cursor) return Reference_Type
    with Pre => Has_Element (Position);
+   pragma Inline (Reference);
 
 private
    type Node_Type;
diff --git a/packages/wisi/sal-gen_unbounded_definite_min_heaps_fibonacci.adb 
b/packages/wisi/sal-gen_unbounded_definite_min_heaps_fibonacci.adb
index e35219e..c58a9d4 100644
--- a/packages/wisi/sal-gen_unbounded_definite_min_heaps_fibonacci.adb
+++ b/packages/wisi/sal-gen_unbounded_definite_min_heaps_fibonacci.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -337,4 +337,35 @@ package body 
SAL.Gen_Unbounded_Definite_Min_Heaps_Fibonacci is
       return (Element => Heap.Min.all.Element'Access);
    end Peek;
 
+   procedure Process (Heap : in Heap_Type; Process_Element : access procedure 
(Element : in Element_Type))
+   is
+      type Cursor is record
+         --  Every node is in a circular list. List_Origin is the node where we
+         --  entered the list, so we know when we are done.
+         Node        : Node_Access;
+         List_Origin : Node_Access;
+      end record;
+
+      Cur : Cursor := (Heap.Min, Heap.Min);
+
+      procedure Process_Node (Cur : in out Cursor)
+      is
+         Next_Cur : Cursor;
+      begin
+         loop
+            if Cur.Node.Child /= null then
+               Next_Cur := (Cur.Node.Child, Cur.Node.Child);
+               Process_Node (Next_Cur);
+            end if;
+            Process_Element (Cur.Node.Element);
+            Cur.Node := Cur.Node.Right;
+            exit when Cur.Node = Cur.List_Origin;
+         end loop;
+      end Process_Node;
+   begin
+      if Cur.Node /= null then
+         Process_Node (Cur);
+      end if;
+   end Process;
+
 end SAL.Gen_Unbounded_Definite_Min_Heaps_Fibonacci;
diff --git a/packages/wisi/sal-gen_unbounded_definite_min_heaps_fibonacci.ads 
b/packages/wisi/sal-gen_unbounded_definite_min_heaps_fibonacci.ads
index 09b4e39..6f978e7 100644
--- a/packages/wisi/sal-gen_unbounded_definite_min_heaps_fibonacci.ads
+++ b/packages/wisi/sal-gen_unbounded_definite_min_heaps_fibonacci.ads
@@ -7,7 +7,7 @@
 --  [1] Introduction to Algorithms, Third Edition. Thomas H. Cormen,
 --  Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Chapter 19.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -88,6 +88,15 @@ package SAL.Gen_Unbounded_Definite_Min_Heaps_Fibonacci is
 
    function Peek (Heap : in Heap_Type) return Constant_Reference_Type;
    --  Return a constant reference to the min element.
+   pragma Inline (Peek);
+
+   --  We don't provide a Cursor/Iterator interface; to complex to
+   --  implement. So far, we only need a read-only forward iterator,
+   --  which Process provides.
+
+   procedure Process (Heap : in Heap_Type; Process_Element : access procedure 
(Element : in Element_Type));
+   --  Call Process_Element with each Element in Heap. Min is first; rest are 
in
+   --  arbitrary order.
 
 private
 
@@ -108,6 +117,8 @@ private
       Min   : Node_Access;
       Count : Base_Peek_Type;
    end record;
+   type Heap_Access_Constant is access constant Heap_Type;
+   for Heap_Access_Constant'Storage_Size use 0;
 
    Empty_Heap : constant Heap_Type := (Ada.Finalization.Controlled with Min => 
null, Count => 0);
 
diff --git a/packages/wisi/sal-gen_unbounded_definite_queues.ads 
b/packages/wisi/sal-gen_unbounded_definite_queues.ads
index 0e21be7..8e7163b 100644
--- a/packages/wisi/sal-gen_unbounded_definite_queues.ads
+++ b/packages/wisi/sal-gen_unbounded_definite_queues.ads
@@ -2,7 +2,7 @@
 --
 --  An unbounded queue of definite non-limited elements.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -59,6 +59,7 @@ package SAL.Gen_Unbounded_Definite_Queues is
       Implicit_Dereference => Element;
 
    function Peek (Queue : in Pkg.Queue; N : Peek_Type := 1) return 
Constant_Reference_Type;
+   pragma Inline (Peek);
    --  Return a constant reference to a queue item. N = 1 is the queue
    --  head.
    --
@@ -68,6 +69,7 @@ package SAL.Gen_Unbounded_Definite_Queues is
    with Implicit_Dereference => Element;
 
    function Variable_Peek (Queue : in out Pkg.Queue; N : Peek_Type := 1) 
return Variable_Reference_Type;
+   pragma Inline (Variable_Peek);
    --  Return a variable reference to a queue item. N = 1 is the queue
    --  head.
    --
diff --git a/packages/wisi/sal-gen_unbounded_definite_red_black_trees.ads 
b/packages/wisi/sal-gen_unbounded_definite_red_black_trees.ads
index e9513c9..83c9c88 100644
--- a/packages/wisi/sal-gen_unbounded_definite_red_black_trees.ads
+++ b/packages/wisi/sal-gen_unbounded_definite_red_black_trees.ads
@@ -8,7 +8,7 @@
 --  [1] Introduction to Algorithms, Thomas H. Cormen, Charles E.
 --  Leiserson, Ronald L. Rivest, Clifford Stein.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -70,6 +70,7 @@ package SAL.Gen_Unbounded_Definite_Red_Black_Trees is
      (Container : aliased in Tree;
       Key       :         in Key_Type)
      return Constant_Ref_Type;
+   pragma Inline (Constant_Ref);
 
    type Variable_Ref_Type (Element : not null access Element_Type) is null 
record
    with Implicit_Dereference => Element;
@@ -78,11 +79,13 @@ package SAL.Gen_Unbounded_Definite_Red_Black_Trees is
      (Container : aliased in Tree;
       Position  :         in Cursor)
      return Variable_Ref_Type;
+   pragma Inline (Variable_Ref);
 
    function Variable_Ref
      (Container : aliased in Tree;
       Key       :         in Key_Type)
      return Variable_Ref_Type;
+   pragma Inline (Variable_Ref);
    --  Raises Not_Found if Key not found in Container.
 
    package Iterators is new Ada.Iterator_Interfaces (Cursor, Has_Element);
diff --git a/packages/wisi/sal-gen_unbounded_definite_stacks.ads 
b/packages/wisi/sal-gen_unbounded_definite_stacks.ads
index b0cb65c..954be19 100644
--- a/packages/wisi/sal-gen_unbounded_definite_stacks.ads
+++ b/packages/wisi/sal-gen_unbounded_definite_stacks.ads
@@ -2,7 +2,7 @@
 --
 --  Stack implementation.
 --
---  Copyright (C) 1998-2000, 2002-2003, 2009, 2015, 2017, 2018 Free Software 
Foundation, Inc.
+--  Copyright (C) 1998-2000, 2002-2003, 2009, 2015, 2017 - 2019 Free Software 
Foundation, Inc.
 --
 --  SAL is free software; you can redistribute it and/or modify it
 --  under terms of the GNU General Public License as published by the
@@ -113,6 +113,7 @@ package SAL.Gen_Unbounded_Definite_Stacks is
      (Container : aliased in Stack'Class;
       Position  :         in Peek_Type)
      return Constant_Ref_Type;
+   pragma Inline (Constant_Ref);
 
 private
 
diff --git a/packages/wisi/sal-gen_unbounded_definite_vectors.adb 
b/packages/wisi/sal-gen_unbounded_definite_vectors.adb
index 74f3497..49d59a6 100644
--- a/packages/wisi/sal-gen_unbounded_definite_vectors.adb
+++ b/packages/wisi/sal-gen_unbounded_definite_vectors.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -352,7 +352,7 @@ package body SAL.Gen_Unbounded_Definite_Vectors is
 
       if Container.Last >= First then
          if Container.Elements = null then
-            Container.Elements := new Array_Type'(J .. To_Peek_Type 
(Container.Last) => <>);
+            Container.Elements := new Array_Type'(J .. To_Peek_Type 
(Container.Last) => Default_Element);
 
          elsif Container.Elements'First > J then
             Grow (Container.Elements, J);
@@ -371,7 +371,7 @@ package body SAL.Gen_Unbounded_Definite_Vectors is
 
       if Last >= Container.First then
          if Container.Elements = null then
-            Container.Elements := new Array_Type'(To_Peek_Type 
(Container.First) .. J => <>);
+            Container.Elements := new Array_Type'(To_Peek_Type 
(Container.First) .. J => Default_Element);
 
          elsif Container.Elements'Last < J then
             Grow (Container.Elements, J);
@@ -379,7 +379,10 @@ package body SAL.Gen_Unbounded_Definite_Vectors is
       end if;
    end Set_Last;
 
-   procedure Set_First_Last (Container : in out Vector; First : in Index_Type; 
Last : in Extended_Index)
+   procedure Set_First_Last
+     (Container : in out Vector;
+      First     : in     Index_Type;
+      Last      : in     Extended_Index)
    is begin
       Set_First (Container, First);
       Set_Last (Container, Last);
@@ -398,22 +401,6 @@ package body SAL.Gen_Unbounded_Definite_Vectors is
       end if;
    end Set_Length;
 
-   procedure Set_Length
-     (Container : in out Vector;
-      Length    : in     Ada.Containers.Count_Type;
-      Default   : in     Element_Type)
-   is
-      Old_First : constant Extended_Index := Container.First;
-      Old_Last  : constant Extended_Index := Container.Last;
-   begin
-      Set_Length (Container, Length);
-      if Old_First = No_Index then
-         Container.Elements.all := (others => Default);
-      else
-         Container.Elements (To_Peek_Type (Old_Last + 1) .. To_Peek_Type 
(Container.Last)) := (others => Default);
-      end if;
-   end Set_Length;
-
    procedure Delete (Container : in out Vector; Index : in Index_Type)
    is
       J : constant Peek_Type := To_Peek_Type (Index);
diff --git a/packages/wisi/sal-gen_unbounded_definite_vectors.ads 
b/packages/wisi/sal-gen_unbounded_definite_vectors.ads
index 6ad1684..ae472d8 100644
--- a/packages/wisi/sal-gen_unbounded_definite_vectors.ads
+++ b/packages/wisi/sal-gen_unbounded_definite_vectors.ads
@@ -8,7 +8,7 @@
 --  It provides no checking of cursor tampering; higher level code
 --  must ensure that.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -29,6 +29,7 @@ with Ada.Unchecked_Deallocation;
 generic
    type Index_Type is range <>;
    type Element_Type is private;
+   Default_Element : in Element_Type;
 package SAL.Gen_Unbounded_Definite_Vectors is
 
    subtype Extended_Index is Index_Type'Base
@@ -114,21 +115,17 @@ package SAL.Gen_Unbounded_Definite_Vectors is
 
    procedure Set_First (Container : in out Vector; First : in Index_Type);
    procedure Set_Last (Container : in out Vector; Last : in Extended_Index);
-   procedure Set_First_Last (Container : in out Vector; First : in Index_Type; 
Last : in Extended_Index);
+   procedure Set_First_Last
+     (Container : in out Vector;
+      First     : in     Index_Type;
+      Last      : in     Extended_Index);
    --  Default First is Index_Type'First.
    --  Elements with First <= index <= Last that have not been set have
-   --  Element_Type default value.
+   --  Default_Element value.
 
    procedure Set_Length (Container : in out Vector; Length : in 
Ada.Containers.Count_Type);
    --  Set Last so Container.Length returns Length. New elements have
-   --  Element_Type default value.
-
-   procedure Set_Length
-     (Container : in out Vector;
-      Length    : in     Ada.Containers.Count_Type;
-      Default   : in     Element_Type);
-   --  Set Last so Container.Length returns Length. New elements have
-   --  Default value.
+   --  Default_Element value.
 
    procedure Delete (Container : in out Vector; Index : in Index_Type);
    --  Replace Index element contents with default. If Index =
@@ -142,12 +139,14 @@ package SAL.Gen_Unbounded_Definite_Vectors is
 
    function Constant_Ref (Container : aliased in Vector; Index : in 
Index_Type) return Constant_Reference_Type
    with Pre => Index >= Container.First_Index and Index <= 
Container.Last_Index;
+   pragma Inline (Constant_Ref);
 
    type Variable_Reference_Type (Element : not null access Element_Type) is 
null record
    with Implicit_Dereference => Element;
 
    function Variable_Ref (Container : aliased in Vector; Index : in 
Index_Type) return Variable_Reference_Type
    with Pre => Index >= Container.First_Index and Index <= 
Container.Last_Index;
+   pragma Inline (Variable_Ref);
 
    type Cursor is private;
 
@@ -173,9 +172,11 @@ package SAL.Gen_Unbounded_Definite_Vectors is
 
    function Constant_Ref (Container : aliased in Vector; Position : in Cursor) 
return Constant_Reference_Type
    with Pre => Has_Element (Position);
+   pragma Inline (Constant_Ref);
 
    function Variable_Ref (Container : aliased in Vector; Position  : in 
Cursor) return Variable_Reference_Type
    with Pre => Has_Element (Position);
+   pragma Inline (Variable_Ref);
 
 private
 
diff --git a/packages/wisi/sal.adb b/packages/wisi/sal.adb
index 13a5276..6a2dc71 100644
--- a/packages/wisi/sal.adb
+++ b/packages/wisi/sal.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 1997 - 2004, 2006, 2009 Free Software Foundation, Inc.
+--  Copyright (C) 1997 - 2004, 2006, 2009, 2019 Free Software Foundation, Inc.
 --
 --  SAL is free software; you can redistribute it and/or modify it
 --  under terms of the GNU General Public License as published by the
@@ -26,7 +26,7 @@ package body SAL is
 
    function Version return String is
    begin
-      return "SAL 3.0";
+      return "SAL 3.1";
    end Version;
 
 end SAL;
diff --git a/packages/wisi/standard_common.gpr 
b/packages/wisi/standard_common.gpr
index b51f8ed..2ba758a 100644
--- a/packages/wisi/standard_common.gpr
+++ b/packages/wisi/standard_common.gpr
@@ -2,7 +2,7 @@
 --
 --  Standard settings for all of Stephe's Ada projects.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018, 2019 Free Software Foundation, Inc.
 --
 --  This program is free software; you can redistribute it and/or
 --  modify it under terms of the GNU General Public License as
@@ -27,6 +27,15 @@ project Standard_Common is
 
    type Mem_Check_Type is ("On", "Off");
    Mem_Check : Profile_Type := External ("Standard_Common_Mem_Check", "Off");
+   --  Note that Mem_Check requires Build_Type = Debug to be useful
+
+   -- In main project file, add:
+   -- case Standard_Common.Mem_Check is
+   -- when "On" =>
+   --    for Runtime ("Ada") use "adalib_debug";
+   -- when "Off" =>
+   --    null;
+   -- end case;
 
    package Compiler is
       -- Switches for gcc
@@ -41,10 +50,11 @@ project Standard_Common is
          "-fstack-check",
          "-g",
          "-gnat2012",
-         "-gnatfoqQ",
-         "-gnatw.d",
-         "-gnatwaBCeJL",
-         "-gnatyO"
+         "-gnatfqQ", -- f = all error messages, qQ = process semantics, 
generate .ali if syntax errors
+         "-gnatw.d", -- warnings about tags
+         "-gnatwaBCeJL", -- wa = most warnings, wB = no warn on bad fixed 
values, wC = no warn on conditionals
+                         -- we = error on warning, wJ = no warn on 
obsolescent, wL = no warn on elaboration
+         "-gnatyO" -- warn on overriding
         );
 
       --  -gnatVa causes some inline procedures to be non-inlineable;
@@ -55,7 +65,7 @@ project Standard_Common is
          "-gnata",  -- assertions, pre/post-conditions
          "-gnatVa", -- validity checks
          "-gnateE", -- extra info in exceptions
-         "-gnatwaP"
+         "-gnatwaP" -- no warn on Inline
         );
 
       --  -O3 is measurably faster than -O2 for wisitoken generate
@@ -92,6 +102,13 @@ project Standard_Common is
    package Builder is
       --  Switches for gnatmake
       for Default_Switches ("Ada") use ("-C");
+
+      case Profile is
+      when "On" =>
+         for Global_Compilation_Switches ("Ada") use ("-pg");
+      when "Off" =>
+         null;
+      end case;
    end Builder;
 
    --  In project files, normally use this:
diff --git a/packages/wisi/wisi-elisp-parse.el 
b/packages/wisi/wisi-elisp-parse.el
index 83ddba2..e757ac8 100644
--- a/packages/wisi/wisi-elisp-parse.el
+++ b/packages/wisi/wisi-elisp-parse.el
@@ -1,6 +1,6 @@
 ;; wisi-elisp-parse.el --- Wisi parser  -*- lexical-binding:t -*-
 
-;; Copyright (C) 2013-2015, 2017 - 2018  Free Software Foundation, Inc.
+;; Copyright (C) 2013-2015, 2017 - 2019  Free Software Foundation, Inc.
 
 ;; This file is part of GNU Emacs.
 
@@ -85,7 +85,7 @@ point at which that max was spawned.")
 (cl-defmethod wisi-parse-kill ((_parser wisi-elisp-parser))
   nil)
 
-(defvar wisi-elisp-parse--indent
+(defvar wisi-elisp-parse--indent nil
   ;; not buffer-local; only let-bound in wisi-parse-current (elisp)
   "A vector of indentation for all lines in buffer.
 Each element can be one of:
@@ -103,25 +103,26 @@ Each element can be one of:
 - list ('anchor (start-id ...) ('anchored id delta))
   for nested anchors.")
 
-(cl-defmethod wisi-parse-current ((parser wisi-elisp-parser))
-  "Parse current buffer from beginning."
-
-  (let* ((actions (wisi-elisp-parser-actions parser))
-        (gotos   (wisi-elisp-parser-gotos parser))
-        (parser-states ;; vector of parallel parser states
-         (vector
-          (make-wisi-elisp-parser-state
-           :label 0
-           :active  'shift
-           :stack   (make-vector wisi-parse-max-stack-size nil)
-           :sp      0
-           :pending nil)))
-        (active-parser-count 1)
-        active-parser-count-prev
-        (active 'shift)
-        (token nil)
-        some-pending
-        wisi-elisp-parse--indent)
+(cl-defmethod wisi-parse-current ((parser wisi-elisp-parser) _begin _send-end 
_parse-end)
+  "Parse entire current buffer.
+BEGIN, END are ignored"
+
+  (let ((actions (wisi-elisp-parser-actions parser))
+       (gotos   (wisi-elisp-parser-gotos parser))
+       (parser-states ;; vector of parallel parser states
+        (vector
+         (make-wisi-elisp-parser-state
+          :label 0
+          :active  'shift
+          :stack   (make-vector wisi-parse-max-stack-size nil)
+          :sp      0
+          :pending nil)))
+       (active-parser-count 1)
+       active-parser-count-prev
+       (active 'shift)
+       (token nil)
+       some-pending
+       wisi-elisp-parse--indent)
 
     (cl-case wisi--parse-action
       (indent
@@ -270,6 +271,9 @@ Each element can be one of:
        (wisi-elisp-parse--resolve-anchors))
 
       (t nil))
+
+    ;; Return region parsed.
+    (cons (point-min) (point))
     ))
 
 (defun wisi-elisp-parsers-active-index (parser-states)
diff --git a/packages/wisi/wisi-fringe.el b/packages/wisi/wisi-fringe.el
index 7f1c10b..82f4c6a 100644
--- a/packages/wisi/wisi-fringe.el
+++ b/packages/wisi/wisi-fringe.el
@@ -1,6 +1,6 @@
 ;;; wisi-fringe.el --- show approximate error locations in the fringe
 ;;
-;; Copyright (C) 2018  Free Software Foundation, Inc.
+;; Copyright (C) 2018 - 2019  Free Software Foundation, Inc.
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -115,12 +115,16 @@ in the window."
         (rem (- error-line (floor (/ line scale)))))
     (cons (+ window-line-first line) (lsh 1 (min 5 (floor (* rem (* 6 
scale))))))))
 
+(defun wisi-fringe-clean ()
+  "Remove all wisi-fringe marks."
+  (remove-overlays (point-min) (point-max) 'wisi-fringe t))
+
 (defun wisi-fringe-display-errors (positions)
-  "Display a bar in the right fringe for each buffer position in POSITIONS.
+  "Display markers in the left and right fringe for each buffer position in 
POSITIONS.
 The buffer containing POSITIONS must be current, and the window
 displaying that buffer must be current."
   ;; FIXME: recompute fringe display on scroll!
-  (remove-overlays (point-min) (point-max) 'wisi-fringe t)
+  (wisi-fringe-clean)
   (let (scaled-posns
        (buffer-lines (line-number-at-pos (point-max)))
        (window-lines (window-height))
diff --git a/packages/wisi/wisi-parse-common.el 
b/packages/wisi/wisi-parse-common.el
index 3aa2c92..bb559a6 100644
--- a/packages/wisi/wisi-parse-common.el
+++ b/packages/wisi/wisi-parse-common.el
@@ -1,341 +1,353 @@
-;;; wisi-parse-common.el --- declarations used by wisi-parse.el, 
wisi-ada-parse.el, and wisi.el
-;;
-;; Copyright (C) 2014, 2015, 2017, 2018  Free Software Foundation, Inc.
-;;
-;; Author: Stephen Leake <address@hidden>
-;;
-;; This file is part of GNU Emacs.
-;;
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-;;
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Code:
-
-(cl-defstruct (wisi--lexer-error)
-  pos ;; position (integer) in buffer where error was detected.
-  message  ;; string error message
-  inserted ;; char inserted after pos.
-  )
-
-(cl-defstruct (wisi--parse-error-repair)
-  pos ;; position (integer) in buffer where insert/delete is done.
-  inserted ;; list of token IDs that were inserted before pos
-  deleted  ;; list of token IDs that were deleted after pos
-  )
-
-(cl-defstruct (wisi--parse-error)
-  ;; Includes information derived from compiler error recovery to edit
-  ;; text to fix one error. Used by ’wisi-repair-error’ to edit buffer.
-  pos      ;; position (integer or marker) in buffer where error was detected.
-  message  ;; string error message
-  repair   ;; list of wisi--parse-error-repair.
-  )
-
-(cl-defstruct wisi-parser
-  ;; Separate lists for lexer and parse errors, because lexer errors
-  ;; must be repaired first, before parse errors can be repaired. And
-  ;; they have different structures.
-  lexer-errors
-  ;; list of wisi--lexer-errors from last parse.  Can be more than one if
-  ;; lexer supports error recovery.
-  parse-errors
-  ;; List of wisi--parse-errors from last parse. Can be more than one if
-  ;; parser supports error recovery.
-)
-
-(cl-defgeneric wisi-parse-format-language-options ((parser wisi-parser))
-  "Return a string to be sent to the parser, containing settings
-for the language-specific parser options."
-  ;; not needed for the elisp parser, which can see the options directly.
-  )
-
-(cl-defgeneric wisi-parse-current ((parser wisi-parser))
-  "Parse current buffer.")
-
-(cl-defgeneric wisi-parse-kill ((parser wisi-parser))
-  "Kill any external process associated with parser.")
-
-(cl-defgeneric wisi-parse-find-token ((parser wisi-parser) token-symbol)
-  "Find token with TOKEN-SYMBOL on current parser stack, return token struct.
-For use in grammar actions.")
-
-(cl-defgeneric wisi-parse-stack-peek ((parser wisi-parser) n)
-  "Return the Nth token on the parse stack.
-For use in grammar actions.")
-
-(cl-defstruct
-  (wisi-cache
-   (:constructor wisi-cache-create)
-   (:copier nil))
-  nonterm;; nonterminal from parse
-
-  token
-  ;; terminal symbol from wisi-keyword-table or
-  ;; wisi-punctuation-table, or lower-level nonterminal from parse
-
-  last ;; pos of last char in token, relative to first (0 indexed)
-
-  class ;; one of wisi-class-list
-
-  containing
-  ;; Marker at the start of the containing statement for this token.
-  ;; nil only for first token in buffer
-
-  prev ;; marker at previous motion token in statement; nil if none
-  next ;; marker at next motion token in statement; nil if none
-  end  ;; marker at token at end of current statement
-  )
-
-(defun wisi-get-cache (pos)
-  "Return `wisi-cache' struct from the `wisi-cache' text property at POS."
-  (get-text-property pos 'wisi-cache))
-
-(defun wisi-backward-cache ()
-  "Move point backward to the beginning of the first token preceding point 
that has a cache.
-Returns cache, or nil if at beginning of buffer."
-  ;; If point is not near cache, p-s-p-c will return pos just after
-  ;; cache, so 1- is the beginning of cache.
-  ;;
-  ;; If point is just after end of cache, p-s-p-c will return pos at
-  ;; start of cache.
-  ;;
-  ;; So we test for the property before subtracting 1.
-  (let ((pos (previous-single-property-change (point) 'wisi-cache))
-       cache)
-    (cond
-     ((null pos)
-      (goto-char (point-min))
-      nil)
-
-     ((setq cache (get-text-property pos 'wisi-cache))
-      (goto-char pos)
-      cache)
-
-     (t
-      (setq pos (1- pos))
-      (setq cache (get-text-property pos 'wisi-cache))
-      (goto-char pos)
-      cache)
-     )))
-
-(defun wisi-forward-cache ()
-  "Move point forward to the beginning of the first token after point that has 
a cache.
-Returns cache, or nil if at end of buffer."
-  (let (cache pos)
-    (when (get-text-property (point) 'wisi-cache)
-      ;; on a cache; get past it
-      (goto-char (1+ (point))))
-
-    (setq cache (get-text-property (point) 'wisi-cache))
-    (if cache
-       nil
-
-      (setq pos (next-single-property-change (point) 'wisi-cache))
-      (if pos
-         (progn
-           (goto-char pos)
-           (setq cache (get-text-property pos 'wisi-cache)))
-       ;; at eob
-       (goto-char (point-max))
-       (setq cache nil))
-      )
-    cache
-    ))
-
-(defun wisi-cache-region (cache &optional start)
-  "Return region designated by START (default point) to cache last."
-  (unless start (setq start (point)))
-  (cons start (+ start (wisi-cache-last cache))))
-
-(defvar wisi-debug 0
-  "wisi debug mode:
-0 : normal - ignore parse errors, for indenting new code
-1 : report parse errors (for running tests)
-2 : show parse states, position point at parse errors
-3 : also show top 10 items of parser stack.")
-
-;; The following parameters are easily changeable for debugging.
-(defvar wisi-action-disable nil
-  "If non-nil, disable all elisp actions during parsing.
-Allows timing parse separate from actions.")
-
-(defvar-local wisi-trace-mckenzie 0
-  "McKenzie trace level; 0 for none")
-
-(defvar-local wisi-trace-action 0
-  "Parse action trace level; 0 for none")
-
-(defvar-local wisi-mckenzie-disable nil
-  "If non-nil, disable McKenzie error recovery. Otherwise, use parser 
default.")
-
-(defcustom wisi-mckenzie-task-count nil
-  "If integer, sets McKenzie error recovery task count.
-Higher value (up to system processor limit) runs error recovery
-faster, but may encounter race conditions.  Using only one task
-makes error recovery repeatable; useful for tests.  If nil, uses
-value from grammar file."
-  :type 'integer
-  :group 'wisi
-  :safe 'integerp)
-(make-variable-buffer-local 'wisi-mckenzie-task-count)
-
-(defcustom wisi-mckenzie-cost-limit nil
-  "If integer, sets McKenzie error recovery algorithm cost limit.
-Higher value has more recover power, but takes longer.  If nil,
-uses value from grammar file."
-  :type 'integer
-  :group 'wisi
-  :safe 'integerp)
-(make-variable-buffer-local 'wisi-mckenzie-cost-limit)
-
-(defcustom wisi-mckenzie-check-limit nil
-  "If integer, sets McKenzie error recovery algorithm token check limit.
-This sets the number of tokens past the error point that must be
-parsed successfully for a solution to be deemed successful.
-Higher value gives better solutions, but may fail if there are
-two errors close together.  If nil, uses value from grammar
-file."
-  :type 'integer
-  :group 'wisi
-  :safe 'integerp)
-(make-variable-buffer-local 'wisi-mckenzie-check-limit)
-
-(defcustom wisi-mckenzie-enqueue-limit nil
-  "If integer, sets McKenzie error recovery algorithm enqueue limit.
-This sets the maximum number of solutions that will be considered.
-Higher value has more recover power, but will be slower to fail.
-If nil, uses value from grammar file."
-  :type 'integer
-  :group 'wisi
-  :safe 'integerp)
-(make-variable-buffer-local 'wisi-mckenzie-enqueue-limit)
-
-(defvar wisi-parse-max-parallel 15
-  "Maximum number of parallel parsers during regular parsing.
-Parallel parsers are used to resolve redundancy in the grammar.
-If a file needs more than this, it's probably an indication that
-the grammar is excessively redundant.")
-
-(defvar wisi-parse-max-stack-size 500
-  "Maximum parse stack size.
-Larger stack size allows more deeply nested constructs.")
-;; end of easily changeable parameters
-
-(defvar wisi--parse-action nil
-  ;; not buffer-local; only let-bound in wisi-indent-region, 
wisi-validate-cache
-  "Reason current parse is begin run; one of
-{indent, face, navigate}.")
-
-(defvar-local wisi-indent-comment-col-0 nil
-  "If non-nil, comments currently starting in column 0 are left in column 0.
-Otherwise, they are indented with previous comments or code.
-Normally set from a language-specific option.")
-
-(defvar-local wisi-end-caches nil
-  "List of buffer positions of caches in current statement that need 
wisi-cache-end set.")
-
-(defconst wisi-eoi-term 'Wisi_EOI
-  ;; must match FastToken wisi-output_elisp.adb EOI_Name, which must
-  ;; be part of a valid Ada identifer.
-  "End Of Input token.")
-
-(defconst wisi-class-list
-  [motion ;; motion-action
-   name ;; for which-function
-   statement-end
-   statement-override
-   statement-start
-   misc ;; other stuff
-   ]
-  "array of valid token classes; checked in wisi-statement-action, used in 
wisi-process-parse.")
-
-(defun wisi-error-msg (message &rest args)
-  (let ((line (line-number-at-pos))
-       (col (- (point) (line-beginning-position))))
-    (format
-     "%s:%d:%d: %s"
-       (buffer-name) ;; buffer-file-name is sometimes nil here!?
-       line col
-       (apply 'format message args))))
-
-(defvar wisi-parse-error nil)
-(put 'wisi-parse-error
-     'error-conditions
-     '(error wisi-parse-error))
-(put 'wisi-parse-error
-     'error-message
-     "wisi parse error")
-
-(cl-defstruct wisi-tok
-  token  ;; symbol from a token table ;; IMPROVEME: rename to ’id’?
-  region ;; cons giving buffer region containing token text
-
-  nonterminal ;; t if a nonterminal
-
-  line ;; Line number at start of token. Nil for empty nonterminals
-
-  first
-  ;; For terminals, t if token is the first token on a line.
-  ;;
-  ;; For nonterminals, line number of first contained line (not
-  ;; including trailing comments) that needs indenting; it is a
-  ;; comment, or begins with a contained token.
-  ;;
-  ;; Otherwise nil.
-
-  ;; The following are non-nil if token (terminal or non-terminal) is
-  ;; followed by blank or comment lines
-  comment-line ;; first blank or comment line following token
-  comment-end ;; position at end of blank or comment lines
-  )
-
-(defun wisi-token-text (token)
-  "Return buffer text from token range."
-  (let ((region (wisi-tok-region token)))
-    (and region
-       (buffer-substring-no-properties (car region) (cdr region)))))
-
-(defun wisi-and-regions (left right)
-  "Return region enclosing both LEFT and RIGHT."
-  (if left
-      (if right
-         (cons (min (car left) (car right))
-               (max (cdr left) (cdr right)))
-       left)
-    right))
-
-(defun wisi--set-line-begin (line-count)
-  "Return a vector of line-beginning positions, with length LINE-COUNT."
-  (let ((result (make-vector line-count 0)))
-    (save-excursion
-      (goto-char (point-min))
-
-      (dotimes (i line-count)
-       (aset result i (point))
-       (forward-line 1)))
-    result))
-
-;;;; debugging
-(defun wisi-tok-debug-image (tok)
-  "Return id and region from TOK, as string."
-  (cond
-   ((wisi-tok-region tok)
-    (format "(%s %d . %d)"
-           (wisi-tok-token tok)
-           (car (wisi-tok-region tok))
-           (cdr (wisi-tok-region tok))))
-   (t
-    (format "(%s)" (wisi-tok-token tok)))
-   ))
-
-(provide 'wisi-parse-common)
+;;; wisi-parse-common.el --- declarations used by wisi-parse.el, 
wisi-ada-parse.el, and wisi.el
+;;
+;; Copyright (C) 2014, 2015, 2017 - 2019  Free Software Foundation, Inc.
+;;
+;; Author: Stephen Leake <address@hidden>
+;;
+;; This file is part of GNU Emacs.
+;;
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(cl-defstruct (wisi--lexer-error)
+  pos ;; position (integer) in buffer where error was detected.
+  message  ;; string error message
+  inserted ;; char inserted after pos.
+  )
+
+(cl-defstruct (wisi--parse-error-repair)
+  pos ;; position (integer) in buffer where insert/delete is done.
+  inserted ;; list of token IDs that were inserted before pos
+  deleted  ;; list of token IDs that were deleted after pos
+  )
+
+(cl-defstruct (wisi--parse-error)
+  ;; Includes information derived from compiler error recovery to edit
+  ;; text to fix one error. Used by ’wisi-repair-error’ to edit buffer.
+  pos      ;; position (integer or marker) in buffer where error was detected.
+  message  ;; string error message
+  repair   ;; list of wisi--parse-error-repair.
+  )
+
+(cl-defstruct wisi-parser
+  ;; Separate lists for lexer and parse errors, because lexer errors
+  ;; must be repaired first, before parse errors can be repaired. And
+  ;; they have different structures.
+  lexer-errors
+  ;; list of wisi--lexer-errors from last parse.  Can be more than one if
+  ;; lexer supports error recovery.
+  parse-errors
+  ;; List of wisi--parse-errors from last parse. Can be more than one if
+  ;; parser supports error recovery.
+)
+
+(cl-defgeneric wisi-parse-format-language-options ((parser wisi-parser))
+  "Return a string to be sent to the parser, containing settings
+for the language-specific parser options."
+  ;; not needed for the elisp parser, which can see the options directly.
+  )
+
+(cl-defgeneric wisi-parse-expand-region ((parser wisi-parser) begin end)
+  "Return a cons SEND-BEGIN . SEND-END that is an expansion of
+region BEGIN END that starts at a valid parse start point,
+contains END, and ends at a point the parser can handle
+gracefully."
+  (cons begin end))
+
+(cl-defgeneric wisi-parse-adjust-indent ((parser wisi-parser) indent _repair)
+  "Adjust INDENT for REPAIR (a wisi--parse-error-repair struct). Return new 
indent."
+  indent)
+
+(cl-defgeneric wisi-parse-current ((parser wisi-parser) begin send-end 
parse-end)
+  "Parse current buffer starting at BEGIN, continuing at least thru PARSE-END.
+If using an external parser, send it BEGIN thru SEND-END.")
+
+(cl-defgeneric wisi-parse-kill ((parser wisi-parser))
+  "Kill any external process associated with parser.")
+
+(cl-defgeneric wisi-parse-find-token ((parser wisi-parser) token-symbol)
+  "Find token with TOKEN-SYMBOL on current parser stack, return token struct.
+For use in grammar actions.")
+
+(cl-defgeneric wisi-parse-stack-peek ((parser wisi-parser) n)
+  "Return the Nth token on the parse stack.
+For use in grammar actions.")
+
+(cl-defstruct
+  (wisi-cache
+   (:constructor wisi-cache-create)
+   (:copier nil))
+  nonterm;; nonterminal from parse
+
+  token
+  ;; terminal symbol from wisi-keyword-table or
+  ;; wisi-punctuation-table, or lower-level nonterminal from parse
+
+  last ;; pos of last char in token, relative to first (0 indexed)
+
+  class ;; one of wisi-class-list
+
+  containing
+  ;; Marker at the start of the containing statement for this token.
+  ;; nil only for first token in buffer
+
+  prev ;; marker at previous motion token in statement; nil if none
+  next ;; marker at next motion token in statement; nil if none
+  end  ;; marker at token at end of current statement
+  )
+
+(defun wisi-get-cache (pos)
+  "Return `wisi-cache' struct from the `wisi-cache' text property at POS."
+  (get-text-property pos 'wisi-cache))
+
+(defun wisi-backward-cache ()
+  "Move point backward to the beginning of the first token preceding point 
that has a cache.
+Returns cache, or nil if at beginning of buffer."
+  ;; If point is not near cache, p-s-p-c will return pos just after
+  ;; cache, so 1- is the beginning of cache.
+  ;;
+  ;; If point is just after end of cache, p-s-p-c will return pos at
+  ;; start of cache.
+  ;;
+  ;; So we test for the property before subtracting 1.
+  (let ((pos (previous-single-property-change (point) 'wisi-cache))
+       cache)
+    (cond
+     ((null pos)
+      (goto-char (point-min))
+      nil)
+
+     ((setq cache (get-text-property pos 'wisi-cache))
+      (goto-char pos)
+      cache)
+
+     (t
+      (setq pos (1- pos))
+      (setq cache (get-text-property pos 'wisi-cache))
+      (goto-char pos)
+      cache)
+     )))
+
+(defun wisi-forward-cache ()
+  "Move point forward to the beginning of the first token after point that has 
a cache.
+Returns cache, or nil if at end of buffer."
+  (let (cache pos)
+    (when (get-text-property (point) 'wisi-cache)
+      ;; on a cache; get past it
+      (goto-char (1+ (point))))
+
+    (setq cache (get-text-property (point) 'wisi-cache))
+    (if cache
+       nil
+
+      (setq pos (next-single-property-change (point) 'wisi-cache))
+      (if pos
+         (progn
+           (goto-char pos)
+           (setq cache (get-text-property pos 'wisi-cache)))
+       ;; at eob
+       (goto-char (point-max))
+       (setq cache nil))
+      )
+    cache
+    ))
+
+(defun wisi-cache-region (cache &optional start)
+  "Return region designated by START (default point) to cache last."
+  (unless start (setq start (point)))
+  (cons start (+ start (wisi-cache-last cache))))
+
+(defvar wisi-debug 0
+  "wisi debug mode:
+0 : normal - ignore parse errors, for indenting new code
+1 : report parse errors (for running tests)
+2 : show parse states, position point at parse errors
+3 : also show top 10 items of parser stack.")
+
+;; The following parameters are easily changeable for debugging.
+(defvar wisi-action-disable nil
+  "If non-nil, disable all elisp actions during parsing.
+Allows timing parse separate from actions.")
+
+(defvar-local wisi-trace-mckenzie 0
+  "McKenzie trace level; 0 for none")
+
+(defvar-local wisi-trace-action 0
+  "Parse action trace level; 0 for none")
+
+(defvar-local wisi-mckenzie-disable nil
+  "If non-nil, disable McKenzie error recovery. Otherwise, use parser 
default.")
+
+(defcustom wisi-mckenzie-task-count nil
+  "If integer, sets McKenzie error recovery task count.
+Higher value (up to system processor limit) runs error recovery
+faster, but may encounter race conditions.  Using only one task
+makes error recovery repeatable; useful for tests.  If nil, uses
+value from grammar file."
+  :type 'integer
+  :group 'wisi
+  :safe 'integerp)
+(make-variable-buffer-local 'wisi-mckenzie-task-count)
+
+(defcustom wisi-mckenzie-cost-limit nil
+  "If integer, sets McKenzie error recovery algorithm cost limit.
+Higher value has more recover power, but takes longer.  If nil,
+uses value from grammar file."
+  :type 'integer
+  :group 'wisi
+  :safe 'integerp)
+(make-variable-buffer-local 'wisi-mckenzie-cost-limit)
+
+(defcustom wisi-mckenzie-check-limit nil
+  "If integer, sets McKenzie error recovery algorithm token check limit.
+This sets the number of tokens past the error point that must be
+parsed successfully for a solution to be deemed successful.
+Higher value gives better solutions, but may fail if there are
+two errors close together.  If nil, uses value from grammar
+file."
+  :type 'integer
+  :group 'wisi
+  :safe 'integerp)
+(make-variable-buffer-local 'wisi-mckenzie-check-limit)
+
+(defcustom wisi-mckenzie-enqueue-limit nil
+  "If integer, sets McKenzie error recovery algorithm enqueue limit.
+This sets the maximum number of solutions that will be considered.
+Higher value has more recover power, but will be slower to fail.
+If nil, uses value from grammar file."
+  :type 'integer
+  :group 'wisi
+  :safe 'integerp)
+(make-variable-buffer-local 'wisi-mckenzie-enqueue-limit)
+
+(defvar wisi-parse-max-parallel 15
+  "Maximum number of parallel parsers during regular parsing.
+Parallel parsers are used to resolve redundancy in the grammar.
+If a file needs more than this, it's probably an indication that
+the grammar is excessively redundant.")
+
+(defvar wisi-parse-max-stack-size 500
+  "Maximum parse stack size.
+Larger stack size allows more deeply nested constructs.")
+;; end of easily changeable parameters
+
+(defvar wisi--parse-action nil
+  ;; not buffer-local; only let-bound in wisi-indent-region, 
wisi-validate-cache
+  "Reason current parse is begin run; one of
+{indent, face, navigate}.")
+
+(defvar-local wisi-indent-comment-col-0 nil
+  "If non-nil, comments currently starting in column 0 are left in column 0.
+Otherwise, they are indented with previous comments or code.
+Normally set from a language-specific option.")
+
+(defvar-local wisi-end-caches nil
+  "List of buffer positions of caches in current statement that need 
wisi-cache-end set.")
+
+(defconst wisi-eoi-term 'Wisi_EOI
+  ;; must match FastToken wisi-output_elisp.adb EOI_Name, which must
+  ;; be part of a valid Ada identifer.
+  "End Of Input token.")
+
+(defconst wisi-class-list
+  [motion ;; motion-action
+   name ;; for which-function
+   statement-end
+   statement-override
+   statement-start
+   misc ;; other stuff
+   ]
+  "array of valid token classes; checked in wisi-statement-action, used in 
wisi-process-parse.")
+
+(defun wisi-error-msg (message &rest args)
+  (let ((line (line-number-at-pos))
+       (col (- (point) (line-beginning-position))))
+    (format
+     "%s:%d:%d: %s"
+       (buffer-name) ;; buffer-file-name is sometimes nil here!?
+       line col
+       (apply 'format message args))))
+
+(defvar wisi-parse-error nil)
+(put 'wisi-parse-error
+     'error-conditions
+     '(error wisi-parse-error))
+(put 'wisi-parse-error
+     'error-message
+     "wisi parse error")
+
+(cl-defstruct wisi-tok
+  token  ;; symbol from a token table ;; IMPROVEME: rename to ’id’?
+  region ;; cons giving buffer region containing token text
+
+  nonterminal ;; t if a nonterminal
+
+  line ;; Line number at start of token. Nil for empty nonterminals
+
+  first
+  ;; For terminals, t if token is the first token on a line.
+  ;;
+  ;; For nonterminals, line number of first contained line (not
+  ;; including trailing comments) that needs indenting; it is a
+  ;; comment, or begins with a contained token.
+  ;;
+  ;; Otherwise nil.
+
+  ;; The following are non-nil if token (terminal or non-terminal) is
+  ;; followed by blank or comment lines
+  comment-line ;; first blank or comment line following token
+  comment-end ;; position at end of blank or comment lines
+  )
+
+(defun wisi-token-text (token)
+  "Return buffer text from token range."
+  (let ((region (wisi-tok-region token)))
+    (and region
+       (buffer-substring-no-properties (car region) (cdr region)))))
+
+(defun wisi-and-regions (left right)
+  "Return region enclosing both LEFT and RIGHT."
+  (if left
+      (if right
+         (cons (min (car left) (car right))
+               (max (cdr left) (cdr right)))
+       left)
+    right))
+
+(defun wisi--set-line-begin (line-count)
+  "Return a vector of line-beginning positions, with length LINE-COUNT."
+  (let ((result (make-vector line-count 0)))
+    (save-excursion
+      (goto-char (point-min))
+
+      (dotimes (i line-count)
+       (aset result i (point))
+       (forward-line 1)))
+    result))
+
+;;;; debugging
+(defun wisi-tok-debug-image (tok)
+  "Return id and region from TOK, as string."
+  (cond
+   ((wisi-tok-region tok)
+    (format "(%s %d . %d)"
+           (wisi-tok-token tok)
+           (car (wisi-tok-region tok))
+           (cdr (wisi-tok-region tok))))
+   (t
+    (format "(%s)" (wisi-tok-token tok)))
+   ))
+
+(provide 'wisi-parse-common)
diff --git a/packages/wisi/wisi-process-parse.el 
b/packages/wisi/wisi-process-parse.el
index cfc98eb..154b75f 100644
--- a/packages/wisi/wisi-process-parse.el
+++ b/packages/wisi/wisi-process-parse.el
@@ -1,6 +1,6 @@
 ;;; wisi-process-parse.el --- interface to external parse program
 ;;
-;; Copyright (C) 2014, 2017, 2018 Free Software Foundation, Inc.
+;; Copyright (C) 2014, 2017 - 2019 Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;;
@@ -22,6 +22,18 @@
 (require 'cl-lib)
 (require 'wisi-parse-common)
 
+(defgroup wisi nil
+  "Options for Wisi package."
+  :group 'programming)
+
+(defcustom wisi-process-time-out 1.0
+  "Time out waiting for parser response. An error occurs if there
+  is no response from the parser after waiting this amount 5
+  times."
+  :type 'float
+  :safe 'floatp)
+(make-variable-buffer-local 'wisi-process-time-out)
+
 (defconst wisi-process-parse-prompt "^;;> "
   "Regexp matching executable prompt; indicates previous command is complete.")
 
@@ -52,23 +64,12 @@
   line-begin              ;; vector of beginning-of-line positions in buffer
   (total-wait-time 0.0)   ;; total time during last parse spent waiting for 
subprocess output.
   (response-count 0)      ;; responses received from subprocess during last 
parse; for profiling.
+  end-pos                 ;; last character position parsed
   )
 
 (defvar wisi-process--alist nil
   "Alist mapping string label to ‘wisi-process--session’ struct")
 
-(defgroup wisi nil
-  "Options for Wisi package."
-  :group 'programming)
-
-(defcustom wisi-process-time-out 1.0
-  "Time out waiting for parser response. An error occurs if there
-  is no response from the parser after waiting this amount 5
-  times."
-  :type 'float
-  :safe 'floatp)
-(make-variable-buffer-local 'wisi-process-time-out)
-
 ;;;###autoload
 (defun wisi-process-parse-get (parser)
   "Return a ‘wisi-process--parser’ object matching PARSER label.
@@ -164,18 +165,29 @@ Otherwise add PARSER to ‘wisi-process--alist’, return it."
       (pop-to-buffer (wisi-process--parser-buffer parser))
     (error "wisi-process-parse process not active")))
 
-(defun wisi-process-parse--send-parse (parser line-count)
+(defun wisi-process-parse--send-parse (parser begin send-end parse-end)
   "Send a parse command to PARSER external process, followed by
-the content of the current buffer.  Does not wait for command to
-complete."
-  ;; Must match "parse" command arguments in gen_emacs_wisi_parse.adb
-  (let* ((cmd (format "parse %d \"%s\" %d %d %d %d %d %d %d %d %d %d %d %s"
+the content of the current buffer from BEGIN thru SEND-END.  Does
+not wait for command to complete. PARSE-END is end of desired
+parse region."
+  ;; Must match "parse" command arguments read by
+  ;; emacs_wisi_common_parse,adb Get_Parse_Params.
+  (let* ((cmd (format "parse %d \"%s\" %d %d %d %d %d %d %d %d %d %d %d %d %d 
%d %d %d %d %d %s"
                      (cl-ecase wisi--parse-action
                        (navigate 0)
                        (face 1)
                        (indent 2))
                      (if (buffer-file-name) (file-name-nondirectory 
(buffer-file-name)) "")
-                     line-count
+                     (position-bytes begin)
+                     (position-bytes send-end)
+                     (position-bytes parse-end)
+                     begin ;; char_pos
+                     (line-number-at-pos begin)
+                     (line-number-at-pos send-end)
+                     (save-excursion (goto-char begin) (back-to-indentation) 
(current-column));; indent-begin
+                     (if (or (and (= begin (point-min)) (= parse-end 
(point-max)))
+                             (< (point-max) wisi-partial-parse-threshold))
+                         0 1) ;; partial parse active
                      (if (> wisi-debug 0) 1 0) ;; debug-mode
                      (1- wisi-debug) ;; trace_parse
                      wisi-trace-mckenzie
@@ -185,7 +197,7 @@ complete."
                      (if wisi-mckenzie-cost-limit wisi-mckenzie-cost-limit -1)
                      (if wisi-mckenzie-check-limit wisi-mckenzie-check-limit 
-1)
                      (if wisi-mckenzie-enqueue-limit 
wisi-mckenzie-enqueue-limit -1)
-                     (1- (position-bytes (point-max)))
+                     (- (position-bytes send-end) (position-bytes begin)) ;; 
send-end is after last byte
                      (wisi-parse-format-language-options parser)
                      ))
         (msg (format "%03d%s" (length cmd) cmd))
@@ -196,7 +208,7 @@ complete."
       (erase-buffer))
 
     (process-send-string process msg)
-    (process-send-string process (buffer-substring-no-properties (point-min) 
(point-max)))
+    (process-send-string process (buffer-substring-no-properties begin 
send-end))
 
     ;; We don’t wait for the send to complete; the external process
     ;; may start parsing and send an error message.
@@ -259,12 +271,13 @@ complete."
   ;; see ‘wisi-process-parse--execute’
   (let ((pos (aref (wisi-process--parser-line-begin parser) (1- (aref sexp 
1)))))
     (with-silent-modifications
-      (put-text-property
-       (1- pos)
-       pos
-       'wisi-indent
-       (aref sexp 2)))
-    ))
+      (when (< (point-min) pos)
+       (put-text-property
+        (1- pos)
+        pos
+        'wisi-indent
+        (aref sexp 2)))
+      )))
 
 (defun wisi-process-parse--Lexer_Error (parser sexp)
   ;; sexp is [Lexer_Error char-position <message> <repair-char>]
@@ -348,6 +361,11 @@ complete."
         (wisi--parse-error-repair last-error)))
       )))
 
+(defun wisi-process-parse--End (parser sexp)
+  ;; sexp is [End pos]
+  ;; see ‘wisi-process-parse--execute’
+  (setf (wisi-process--parser-end-pos parser) (aref sexp 1)))
+
 (defun wisi-process-parse--execute (parser sexp)
   "Execute encoded SEXP sent from external process."
   ;; sexp is [action arg ...]; an encoded instruction that we need to execute
@@ -411,14 +429,16 @@ complete."
     (5  (wisi-process-parse--Parser_Error parser sexp))
     (6  (wisi-process-parse--Check_Error parser sexp))
     (7  (wisi-process-parse--Recover parser sexp))
+    (8  (wisi-process-parse--End parser sexp))
     ))
 
 ;;;;; main
 
 (cl-defmethod wisi-parse-kill ((parser wisi-process--parser))
   (when (process-live-p (wisi-process--parser-process parser))
-    (process-send-string (wisi-process--parser-process parser) 
wisi-process-parse-quit-cmd)
-    (sit-for 1.0)
+    ;; We used to send a quit command first, to be nice. But there's
+    ;; no timeout on that, so it would hang when the process
+    ;; executable is not reading command input.
     (when (process-live-p (wisi-process--parser-process parser))
       (kill-process (wisi-process--parser-process parser)))
     )
@@ -427,8 +447,9 @@ complete."
 (defvar wisi--lexer nil) ;; wisi-elisp-lexer.el
 (declare-function wisi-elisp-lexer-reset "wisi-elisp-lexer")
 
-(cl-defmethod wisi-parse-current ((parser wisi-process--parser))
-  "Run the external parser on the current buffer."
+(cl-defmethod wisi-parse-current ((parser wisi-process--parser) begin send-end 
parse-end)
+  "Run the external parser on the current buffer, from BEGIN to at least 
PARSE-END.
+Send BEGIN thru SEND-END to external parser."
   (wisi-process-parse--require-process parser)
 
   ;; font-lock can trigger a face parse while navigate or indent parse
@@ -476,13 +497,13 @@ complete."
          (setf (wisi-parser-lexer-errors parser) nil)
          (setf (wisi-parser-parse-errors parser) nil)
 
-         (let ((line-count (1+ (count-lines (point-min) (point-max)))))
-           (setf (wisi-process--parser-line-begin parser) 
(wisi--set-line-begin line-count))
-           (wisi-process-parse--send-parse parser line-count)
+         (let ((total-line-count (1+ (count-lines (point-max) (point-min)))))
+           (setf (wisi-process--parser-line-begin parser) 
(wisi--set-line-begin total-line-count))
+           (wisi-process-parse--send-parse parser begin send-end parse-end)
 
            ;; We reset the elisp lexer, because post-parse actions may use it.
            (when wisi--lexer
-             (wisi-elisp-lexer-reset line-count wisi--lexer))
+             (wisi-elisp-lexer-reset total-line-count wisi--lexer))
            )
 
          (set-buffer response-buffer)
@@ -520,49 +541,70 @@ complete."
                  (setq sexp-start (point))
 
                  (set-buffer source-buffer) ;; for put-text-property in actions
-                 (if (listp response)
-                     ;; error of some sort
-                     (cond
-                      ((equal '(parse_error) response)
-                       ;; Parser detected a syntax error, and recovery failed, 
so signal it.
-                       (if (wisi-parser-parse-errors parser)
-                           (signal 'wisi-parse-error
-                                   (wisi--parse-error-message (car 
(wisi-parser-parse-errors parser))))
-
-                         ;; can have no errors when testing a new parser
-                         (push
-                          (make-wisi--parse-error :pos 0 :message "parser 
failed with no message")
-                          (wisi-parser-parse-errors parser))
-                         (signal 'wisi-parse-error "parser failed with no 
message")))
-
-                      ((equal 'parse_error (car response))
-                       ;; Parser detected some other error non-fatal error, so 
signal it.
-                       (signal 'wisi-parse-error (cdr response)))
-
-                      ((and (eq 'error (car response))
-                            (string-prefix-p "bad command:" (cadr response)))
-                       ;; Parser dropped bytes, is treating buffer
-                       ;; content bytes as commands. Kill the process
-                       ;; to kill the pipes; there is no other way to
-                       ;; flush them.
-                       (kill-process (wisi-process--parser-process parser))
-                       (signal 'wisi-parse-error "parser lost sync; killed"))
-
-                      (t
-                       ;; Some other error
-                       (condition-case-unless-debug err
-                           (eval response)
-                         (error
-                          (push (make-wisi--parse-error :pos (point) :message 
(cadr err)) (wisi-parser-parse-errors parser))
-                          (signal (car err) (cdr err)))))
-                      )
-
-                   ;; else encoded action
+                 (cond
+                  ((listp response)
+                   ;; error of some sort
+                   (cond
+                    ((equal '(parse_error) response)
+                     ;; Parser detected a syntax error, and recovery failed, 
so signal it.
+
+                     (when (> wisi-debug 0)
+                       ;; Save a copy of parser output; may be overwritten by 
subsequent parse face attempts.
+                       (set-buffer response-buffer)
+                       (let ((content (buffer-substring-no-properties 
(point-min) (point-max)))
+                             (buf-name (concat (buffer-name) "-save-error")))
+                         (set-buffer (get-buffer-create buf-name))
+                         (insert content)))
+
+                     (if (wisi-parser-parse-errors parser)
+                         (signal 'wisi-parse-error
+                                 (wisi--parse-error-message (car 
(wisi-parser-parse-errors parser))))
+
+                       ;; can have no errors when testing a new parser
+                       (push
+                        (make-wisi--parse-error :pos 0 :message "parser failed 
with no message")
+                        (wisi-parser-parse-errors parser))
+                       (signal 'wisi-parse-error "parser failed with no 
message")))
+
+                    ((equal 'parse_error (car response))
+                     ;; Parser detected some other error non-fatal error, so 
signal it.
+                     (signal 'wisi-parse-error (cdr response)))
+
+                    ((and (eq 'error (car response))
+                          (string-prefix-p "bad command:" (cadr response)))
+                     ;; Parser dropped bytes, is treating buffer
+                     ;; content bytes as commands. Kill the process
+                     ;; to kill the pipes; there is no other way to
+                     ;; flush them.
+                     (kill-process (wisi-process--parser-process parser))
+                     (signal 'wisi-parse-error "parser lost sync; killed"))
+
+                    (t
+                     ;; Some other error
+                     (condition-case-unless-debug err
+                         (eval response)
+                       (error
+                        (push (make-wisi--parse-error :pos (point) :message 
(cadr err)) (wisi-parser-parse-errors parser))
+                        (signal (car err) (cdr err)))))
+                    ))
+
+                  ((arrayp response)
+                   ;; encoded action
                    (condition-case-unless-debug err
                        (wisi-process-parse--execute parser response)
                      (wisi-parse-error
                       (push (make-wisi--parse-error :pos (point) :message 
(cadr err)) (wisi-parser-parse-errors parser))
-                      (signal (car err) (cdr err)))))
+                      (signal (car err) (cdr err)))
+
+                     (error ;; ie from [C:\Windows\system32\KERNEL32.DLL]
+                      (set-buffer response-buffer)
+                      (let ((content (buffer-substring-no-properties 
(point-min) (point-max)))
+                            (buf-name (concat (buffer-name) "-save-error")))
+                        (set-buffer (get-buffer-create buf-name))
+                        (insert content)
+                        (error "parser failed; error messages in %s" 
buf-name)))
+                     ))
+                  )
 
                  (set-buffer response-buffer)
                  ))
@@ -577,8 +619,12 @@ complete."
            (unless done
              ;; end of response buffer
              (unless (process-live-p process)
-               (wisi-process-parse-show-buffer parser)
-               (error "wisi-process-parse process died"))
+               (set-buffer response-buffer)
+               (let ((content (buffer-substring-no-properties (point-min) 
(point-max)))
+                     (buf-name (concat (buffer-name) "-save-error")))
+                 (set-buffer (get-buffer-create buf-name))
+                 (insert content)
+                 (error "parser failed; error messages in %s" buf-name)))
 
              (setq wait-count (1+ wait-count))
              (setq start-wait-time (float-time))
@@ -600,7 +646,7 @@ complete."
                       (- (float-time) start-wait-time)))
 
              (when (and (= (point-max) need-more)
-                      (> wait-count 5))
+                        (> wait-count 5))
                (error "wisi-process-parse not getting more text (or bad syntax 
in process output)"))
 
              (setq need-more nil))
@@ -616,9 +662,9 @@ complete."
          (setf (wisi-process--parser-busy parser) nil)
          (set-buffer source-buffer)
          ;; If we get here, the parse succeeded (possibly with error
-         ;; recovery); move point to end of buffer as the elisp
-         ;; parser does.
-         (goto-char (point-max))
+         ;; recovery); move point to end of parsed region.
+         (goto-char (wisi-process--parser-end-pos parser))
+         (cons begin (point))
          )
 
       (wisi-parse-error
@@ -688,4 +734,26 @@ Returns reversed sequence."
       (push (aref token-table i) enum-ids))
     enum-ids))
 
+(defun wisi-process-parse-show-args ()
+  "Show the partial parse command-line args for run_ada_[lalr | lr1]_parse for 
current region.
+Also add it to the kill ring."
+  (interactive)
+  (let* ((begin (region-beginning))
+        (end   (region-end))
+        (parse-action (wisi-read-parse-action))
+        (msg
+         (format "%s %s %d %d %d %d %d %d %d"
+                 (file-name-nondirectory (buffer-file-name))
+                 parse-action
+                 (position-bytes begin)
+                 (position-bytes end)
+                 (position-bytes end)
+                 begin ;; char_pos
+                 (line-number-at-pos begin)
+                 (line-number-at-pos end)
+                 (save-excursion (goto-char begin) (back-to-indentation) 
(current-column));; indent-begin
+                 )))
+    (kill-new msg)
+    (message msg)))
+
 (provide 'wisi-process-parse)
diff --git a/packages/wisi/wisi.adb b/packages/wisi/wisi.adb
index 0c00735..4031df0 100644
--- a/packages/wisi/wisi.adb
+++ b/packages/wisi/wisi.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -18,6 +18,7 @@
 pragma License (Modified_GPL);
 
 with Ada.Strings.Bounded;
+with Ada.Text_IO;
 with WisiToken.Semantic_Checks;
 package body Wisi is
    use WisiToken;
@@ -29,6 +30,7 @@ package body Wisi is
    Parser_Error_Code   : constant String := "5";
    Check_Error_Code    : constant String := "6";
    Recover_Code        : constant String := "7 ";
+   End_Code            : constant String := "8";
 
    Chars_Per_Int : constant Integer := Integer'Width;
 
@@ -236,8 +238,8 @@ package body Wisi is
       Offset       : in     Integer)
      return Integer
    is
-      Left_Paren_ID  : WisiToken.Token_ID renames 
Data.Descriptor.Left_Paren_ID;
-      Right_Paren_ID : WisiToken.Token_ID renames 
Data.Descriptor.Right_Paren_ID;
+      Left_Paren_ID  : Token_ID renames Data.Descriptor.Left_Paren_ID;
+      Right_Paren_ID : Token_ID renames Data.Descriptor.Right_Paren_ID;
 
       I              : Base_Token_Index := Anchor_Token.First_Terminals_Index;
       Paren_Count    : Integer          := 0;
@@ -294,8 +296,8 @@ package body Wisi is
    begin
       Append (Line, Navigate_Cache_Code);
       Append (Line, Buffer_Pos'Image (Cache.Pos));
-      Append (Line, WisiToken.Token_ID'Image (Cache.Statement_ID));
-      Append (Line, WisiToken.Token_ID'Image (Cache.ID));
+      Append (Line, Token_ID'Image (Cache.Statement_ID));
+      Append (Line, Token_ID'Image (Cache.ID));
       Append (Line, Integer'Image (Cache.Length));
       Append (Line, Integer'Image (Navigate_Class_Type'Pos (Cache.Class)));
       Append (Cache.Containing_Pos);
@@ -330,8 +332,8 @@ package body Wisi is
       --  grammar indent rules or the algorithms in this package.
       case Item.Label is
       when Not_Set =>
-         Ada.Text_IO.Put_Line
-           ('[' & Indent_Code & Trimmed_Image (Integer (Line_Number)) & " 0]");
+         --  Especially with partial parse, we have no idea what this indent 
should be.
+         null;
 
       when Int =>
          declare
@@ -354,14 +356,14 @@ package body Wisi is
    is
       use Ada.Containers;
       use Ada.Strings.Unbounded;
-      use WisiToken.Parse.LR;
+      use Parse.LR;
 
       Line    : Unbounded_String := To_Unbounded_String ("[");
       Last_Op : Config_Op        := (Fast_Forward, Token_Index'Last);
 
    begin
       if Trace_Action > Detail then
-         Ada.Text_IO.Put_Line (Parse.LR.Image (Item.Ops, Descriptor));
+         Ada.Text_IO.Put_Line (";; " & Parse.LR.Image (Item.Ops, Descriptor));
       end if;
 
       Append (Line, Recover_Code);
@@ -465,47 +467,52 @@ package body Wisi is
 
    procedure Resolve_Anchors (Data : in out Parse_Data_Type)
    is
+      Begin_Indent  : Integer renames Data.Begin_Indent;
       Anchor_Indent : array (First_Anchor_ID .. Data.Max_Anchor_ID) of Integer;
    begin
       if Trace_Action > Outline then
          Ada.Text_IO.New_Line;
+         Ada.Text_IO.Put_Line (";; Begin_Indent: " & Integer'Image 
(Data.Begin_Indent));
          for I in Data.Indents.First_Index .. Data.Indents.Last_Index loop
             Ada.Text_IO.Put_Line (Line_Number_Type'Image (I) & ", " & Image 
(Data.Indents (I)));
          end loop;
       end if;
 
-      if Data.Max_Anchor_ID >= First_Anchor_ID then
-         for I in Data.Indents.First_Index .. Data.Indents.Last_Index loop
-            declare
-               Indent : constant Indent_Type := Data.Indents (I);
-            begin
-               case Indent.Label is
-               when Not_Set | Int =>
-                  null;
+      for I in Data.Indents.First_Index .. Data.Indents.Last_Index loop
+         declare
+            Indent : constant Indent_Type := Data.Indents (I);
+         begin
+            case Indent.Label is
+            when Not_Set =>
+               --  Indent not computed, therefore not output.
+               null;
 
-               when Anchor =>
-                  for I of Indent.Anchor_IDs loop
-                     Anchor_Indent (I) := Indent.Anchor_Indent;
-                  end loop;
-                  Data.Indents.Replace_Element (I, (Int, 
Indent.Anchor_Indent));
+            when Int =>
+               Data.Indents.Replace_Element (I, (Int, Indent.Int_Indent + 
Begin_Indent));
 
-               when Anchored =>
-                  Data.Indents.Replace_Element (I, (Int, Anchor_Indent 
(Indent.Anchored_ID) + Indent.Anchored_Delta));
+            when Anchor =>
+               for I of Indent.Anchor_IDs loop
+                  Anchor_Indent (I) := Indent.Anchor_Indent + Begin_Indent;
+               end loop;
+               Data.Indents.Replace_Element (I, (Int, Indent.Anchor_Indent + 
Begin_Indent));
 
-               when Anchor_Anchored =>
-                  declare
-                     Temp : constant Integer :=
-                       Anchor_Indent (Indent.Anchor_Anchored_ID) + 
Indent.Anchor_Anchored_Delta;
-                  begin
-                     for I of Indent.Anchor_Anchored_IDs loop
-                        Anchor_Indent (I) := Temp;
-                     end loop;
-                     Data.Indents.Replace_Element (I, (Int, Temp));
-                  end;
-               end case;
-            end;
-         end loop;
-      end if;
+            when Anchored =>
+               Data.Indents.Replace_Element
+                 (I, (Int, Anchor_Indent (Indent.Anchored_ID) + 
Indent.Anchored_Delta));
+
+            when Anchor_Anchored =>
+               declare
+                  Temp : constant Integer :=
+                    Anchor_Indent (Indent.Anchor_Anchored_ID) + 
Indent.Anchor_Anchored_Delta;
+               begin
+                  for I of Indent.Anchor_Anchored_IDs loop
+                     Anchor_Indent (I) := Temp;
+                  end loop;
+                  Data.Indents.Replace_Element (I, (Int, Temp));
+               end;
+            end case;
+         end;
+      end loop;
    end Resolve_Anchors;
 
    procedure Set_End
@@ -550,14 +557,21 @@ package body Wisi is
       Descriptor        : access constant WisiToken.Descriptor;
       Source_File_Name  : in     String;
       Post_Parse_Action : in     Post_Parse_Action_Type;
-      Line_Count        : in     Line_Number_Type;
+      Begin_Line        : in     Line_Number_Type;
+      End_Line          : in     Line_Number_Type;
+      Begin_Indent      : in     Integer;
       Params            : in     String)
    is
       pragma Unreferenced (Params);
    begin
+      Data.Line_Begin_Pos.Set_First_Last
+        (First   => Begin_Line,
+         Last    => End_Line);
+
       --  + 1 for data on line following last line; see Lexer_To_Augmented.
-      Data.Line_Begin_Pos.Set_Length (Ada.Containers.Count_Type (Line_Count + 
1), Default => Invalid_Buffer_Pos);
-      Data.Line_Paren_State.Set_Length (Ada.Containers.Count_Type (Line_Count 
+ 1));
+      Data.Line_Paren_State.Set_First_Last
+        (First   => Begin_Line,
+         Last    => End_Line + 1);
 
       Data.Descriptor        := Descriptor;
       Data.Source_File_Name  := +Source_File_Name;
@@ -567,7 +581,11 @@ package body Wisi is
       when Navigate | Face =>
          null;
       when Indent =>
-         Data.Indents.Set_Length (Ada.Containers.Count_Type (Line_Count));
+         Data.Indents.Set_First_Last
+           (First   => Begin_Line,
+            Last    => End_Line);
+
+         Data.Begin_Indent := Begin_Indent;
       end case;
 
       Data.Reset;
@@ -618,6 +636,25 @@ package body Wisi is
    begin
       if Lexer.First then
          Data.Line_Begin_Pos (Token.Line) := Token.Char_Region.First;
+
+         if Token.Line > Data.Line_Begin_Pos.First_Index and then
+           Data.Line_Begin_Pos (Token.Line - 1) = Invalid_Buffer_Pos
+         then
+            --  Previous token contains multiple lines; ie %code in 
wisitoken_grammar.wy
+            declare
+               First_Unset_Line : Line_Number_Type;
+            begin
+               for Line in reverse Data.Line_Begin_Pos.First_Index .. 
Token.Line - 1 loop
+                  if Data.Line_Begin_Pos (Line) /= Invalid_Buffer_Pos then
+                     First_Unset_Line := Line;
+                     exit;
+                  end if;
+               end loop;
+               for Line in First_Unset_Line .. Token.Line - 1 loop
+                  Data.Line_Begin_Pos (Line) := Data.Line_Begin_Pos 
(First_Unset_Line); -- good enough
+               end loop;
+            end;
+         end if;
       end if;
 
       if Token.ID < Data.Descriptor.First_Terminal then
@@ -628,7 +665,7 @@ package body Wisi is
          end if;
 
          if Data.Terminals.Length = 0 then
-            Data.Leading_Non_Grammar.Append (Token);
+            Data.Leading_Non_Grammar.Append ((Token with Lexer.First));
          else
             declare
                Containing_Token : Augmented_Token renames Data.Terminals 
(Data.Terminals.Last_Index);
@@ -640,15 +677,13 @@ package body Wisi is
                       (Containing_Token.Non_Grammar.Last_Index).ID = 
Data.Descriptor.New_Line_ID);
             begin
                if Lexer.First and (Token.ID = Data.Descriptor.Comment_ID or 
Trailing_Blank) then
-                  Containing_Token.First := True;
-
                   if Containing_Token.First_Trailing_Comment_Line = 
Invalid_Line_Number then
                      Containing_Token.First_Trailing_Comment_Line := 
Token.Line;
                   end if;
                   Containing_Token.Last_Trailing_Comment_Line  := Token.Line;
                end if;
 
-               Containing_Token.Non_Grammar.Append ((Token.ID, Token.Line, 
Token.Column, Lexer.First));
+               Containing_Token.Non_Grammar.Append ((Token with Lexer.First));
             end;
          end if;
 
@@ -686,41 +721,98 @@ package body Wisi is
 
    overriding
    procedure Delete_Token
-     (Data        : in out Parse_Data_Type;
-      Token_Index : in     WisiToken.Token_Index)
+     (Data                : in out Parse_Data_Type;
+      Deleted_Token_Index : in     WisiToken.Token_Index)
    is
       use all type Ada.Containers.Count_Type;
-      Deleted_Token    : Augmented_Token renames Data.Terminals (Token_Index);
-      Prev_Token_Index : WisiToken.Base_Token_Index := Token_Index - 1;
+      Deleted_Token    : Augmented_Token renames Data.Terminals 
(Deleted_Token_Index);
+      Prev_Token_Index : Base_Token_Index := Deleted_Token_Index - 1;
+      Next_Token_Index : Base_Token_Index := Deleted_Token_Index + 1;
    begin
-      pragma Assert (Deleted_Token.Deleted = False);
-      Deleted_Token.Deleted := True;
-      if Deleted_Token.Non_Grammar.Length = 0 then
+      if Deleted_Token.Deleted then
+         --  This can happen if error recovery screws up.
+         if WisiToken.Trace_Action > WisiToken.Detail then
+            Ada.Text_IO.Put_Line (";; delete token again; ignored " & Image 
(Deleted_Token, Data.Descriptor.all));
+         end if;
          return;
       end if;
+      if WisiToken.Trace_Action > WisiToken.Detail then
+         Ada.Text_IO.Put_Line (";; delete token " & Image (Deleted_Token, 
Data.Descriptor.all));
+      end if;
+
+      Deleted_Token.Deleted := True;
+
+      if Deleted_Token.Non_Grammar.Length > 0 then
+         --  Move Non_Grammar to previous non-deleted token
+
+         loop
+            exit when Prev_Token_Index = Base_Token_Index'First;
+            exit when Data.Terminals (Prev_Token_Index).Deleted = False;
+            Prev_Token_Index := Prev_Token_Index - 1;
+         end loop;
 
-      loop
          if Prev_Token_Index = Base_Token_Index'First then
-            return;
+            Deleted_Token.Non_Grammar 
(Deleted_Token.Non_Grammar.First_Index).First := Deleted_Token.First;
+            Data.Leading_Non_Grammar.Append (Deleted_Token.Non_Grammar);
+         else
+            declare
+               Prev_Token : Augmented_Token renames Data.Terminals 
(Prev_Token_Index);
+            begin
+               Prev_Token.Non_Grammar.Append (Deleted_Token.Non_Grammar);
+
+               if Deleted_Token.First_Trailing_Comment_Line /= 
Invalid_Line_Number then
+                  if Prev_Token.First_Trailing_Comment_Line = 
Invalid_Line_Number then
+                     Prev_Token.First_Trailing_Comment_Line := 
Deleted_Token.First_Trailing_Comment_Line;
+                  end if;
+                  Prev_Token.Last_Trailing_Comment_Line  := 
Deleted_Token.Last_Trailing_Comment_Line;
+               end if;
+            end;
          end if;
-         exit when Data.Terminals (Prev_Token_Index).Deleted = False;
-         Prev_Token_Index := Prev_Token_Index - 1;
+      end if;
+
+      --  Data.Terminals.Last_Index is Wisi_EOI; it is never deleted
+      loop
+         exit when Data.Terminals (Next_Token_Index).Deleted = False;
+         Next_Token_Index := Next_Token_Index + 1;
+         exit when Next_Token_Index = Data.Terminals.Last_Index;
       end loop;
-      declare
-         Prev_Token : Augmented_Token renames Data.Terminals 
(Prev_Token_Index);
-      begin
-         Prev_Token.Non_Grammar.Append (Deleted_Token.Non_Grammar);
-         if Deleted_Token.First_Trailing_Comment_Line /= Invalid_Line_Number 
then
-            if Prev_Token.First_Trailing_Comment_Line = Invalid_Line_Number 
then
-               if Deleted_Token.First then
-                  Prev_Token.First_Trailing_Comment_Line := 
Deleted_Token.First_Indent_Line;
+
+      if Deleted_Token.First and
+        (Next_Token_Index = Data.Terminals.Last_Index or else
+           Data.Terminals (Next_Token_Index).Line > Deleted_Token.Line)
+      then
+         --  Deleted_Token.Line is now blank; add to previous token non
+         --  grammar.
+         if Prev_Token_Index > Base_Token_Index'First then
+            declare
+               Prev_Token : Augmented_Token renames Data.Terminals 
(Prev_Token_Index);
+            begin
+               if Prev_Token.First_Trailing_Comment_Line = Invalid_Line_Number 
then
+                  Prev_Token.First_Trailing_Comment_Line := Deleted_Token.Line;
+                  Prev_Token.Last_Trailing_Comment_Line  := Deleted_Token.Line;
                else
-                  Prev_Token.First_Trailing_Comment_Line := 
Deleted_Token.First_Trailing_Comment_Line;
+                  if Prev_Token.First_Trailing_Comment_Line > 
Deleted_Token.Line then
+                     Prev_Token.First_Trailing_Comment_Line := 
Deleted_Token.Line;
+                  end if;
+                  if Prev_Token.Last_Trailing_Comment_Line < 
Deleted_Token.Line then
+                     Prev_Token.Last_Trailing_Comment_Line := 
Deleted_Token.Line;
+                  end if;
                end if;
-            end if;
-            Prev_Token.Last_Trailing_Comment_Line  := 
Deleted_Token.Last_Trailing_Comment_Line;
+            end;
          end if;
-      end;
+      end if;
+
+      if Deleted_Token.First and Next_Token_Index < Data.Terminals.Last_Index 
then
+         if not Data.Terminals (Next_Token_Index).First then
+            declare
+               Next_Token : Augmented_Token renames Data.Terminals 
(Next_Token_Index);
+            begin
+               Next_Token.First             := True;
+               Next_Token.First_Indent_Line := Deleted_Token.First_Indent_Line;
+               Next_Token.Last_Indent_Line  := Deleted_Token.Last_Indent_Line;
+            end;
+         end if;
+      end if;
    end Delete_Token;
 
    overriding
@@ -759,19 +851,17 @@ package body Wisi is
 
                   Aug_Nonterm.First := Aug_Nonterm.First or Aug_Token.First;
 
-                  if Aug_Token.First then
-                     if Aug_Token.First_Indent_Line /= Invalid_Line_Number then
-                        Aug_Nonterm.First_Indent_Line := 
Aug_Token.First_Indent_Line;
-                     elsif Trailing_Comment_Done and 
Aug_Token.First_Trailing_Comment_Line /= Invalid_Line_Number then
-                        Aug_Nonterm.First_Indent_Line := 
Aug_Token.First_Trailing_Comment_Line;
-                     end if;
+                  if Aug_Token.First_Indent_Line /= Invalid_Line_Number then
+                     Aug_Nonterm.First_Indent_Line := 
Aug_Token.First_Indent_Line;
+                  elsif Trailing_Comment_Done and 
Aug_Token.First_Trailing_Comment_Line /= Invalid_Line_Number then
+                     Aug_Nonterm.First_Indent_Line := 
Aug_Token.First_Trailing_Comment_Line;
+                  end if;
 
-                     if Aug_Nonterm.Last_Indent_Line = Invalid_Line_Number then
-                        if Trailing_Comment_Done and 
Aug_Token.Last_Trailing_Comment_Line /= Invalid_Line_Number then
-                           Aug_Nonterm.Last_Indent_Line := 
Aug_Token.Last_Trailing_Comment_Line;
-                        elsif Aug_Token.Last_Indent_Line /= 
Invalid_Line_Number then
-                           Aug_Nonterm.Last_Indent_Line := 
Aug_Token.Last_Indent_Line;
-                        end if;
+                  if Aug_Nonterm.Last_Indent_Line = Invalid_Line_Number then
+                     if Trailing_Comment_Done and 
Aug_Token.Last_Trailing_Comment_Line /= Invalid_Line_Number then
+                        Aug_Nonterm.Last_Indent_Line := 
Aug_Token.Last_Trailing_Comment_Line;
+                     elsif Aug_Token.Last_Indent_Line /= Invalid_Line_Number 
then
+                        Aug_Nonterm.Last_Indent_Line := 
Aug_Token.Last_Indent_Line;
                      end if;
                   end if;
 
@@ -876,7 +966,7 @@ package body Wisi is
       Containing : in     Positive_Index_Type;
       Contained  : in     Positive_Index_Type)
    is
-      use all type WisiToken.Syntax_Trees.Node_Label;
+      use all type Syntax_Trees.Node_Label;
       pragma Unreferenced (Nonterm);
 
       --  [2] wisi-containing-action.
@@ -952,21 +1042,21 @@ package body Wisi is
       end;
    end Containing_Action;
 
-   function "+" (Item : in WisiToken.Token_ID) return Token_ID_Lists.List
+   function "+" (Item : in Token_ID) return Token_ID_Lists.List
    is begin
       return Result : Token_ID_Lists.List do
          Result.Append (Item);
       end return;
    end "+";
 
-   function "&" (List : in Token_ID_Lists.List; Item : in WisiToken.Token_ID) 
return Token_ID_Lists.List
+   function "&" (List : in Token_ID_Lists.List; Item : in Token_ID) return 
Token_ID_Lists.List
    is begin
       return Result : Token_ID_Lists.List := List do
          Result.Append (Item);
       end return;
    end "&";
 
-   function "&" (Left, Right : in WisiToken.Token_ID) return 
Token_ID_Lists.List
+   function "&" (Left, Right : in Token_ID) return Token_ID_Lists.List
    is begin
       return Result : Token_ID_Lists.List do
          Result.Append (Left);
@@ -1284,7 +1374,7 @@ package body Wisi is
       return "(" & Simple_Indent_Param_Label'Image (Item.Label) &
         (case Item.Label is
          when Int => Integer'Image (Item.Int_Delta),
-         when Anchored_Label => WisiToken.Positive_Index_Type'Image 
(Item.Anchored_Index) & "," &
+         when Anchored_Label => Positive_Index_Type'Image 
(Item.Anchored_Index) & "," &
               Integer'Image (Item.Anchored_Delta),
          when Language => "<language_function>") & ")";
    end Image;
@@ -1314,35 +1404,33 @@ package body Wisi is
       Params  : in     Indent_Param_Array)
    is begin
       if Trace_Action > Outline then
-         Ada.Text_IO.Put_Line ("indent_action_0: " & Tree.Image (Nonterm, 
Data.Descriptor.all));
+         Ada.Text_IO.Put_Line (";; indent_action_0: " & Tree.Image (Nonterm, 
Data.Descriptor.all));
       end if;
 
       --  [2] wisi-indent-action
       for I in Tokens'Range loop
          if Tree.Byte_Region (Tokens (I)) /= Null_Buffer_Region then
             declare
+               use all type WisiToken.Syntax_Trees.Node_Index;
                use all type SAL.Base_Peek_Type;
-               Tree_Token : constant Syntax_Trees.Valid_Node_Index := Tokens 
(I);
-
-               Token             : constant Aug_Token_Ref := Get_Aug_Token 
(Data, Tree, Tree_Token);
+               Tree_Token        : constant Syntax_Trees.Valid_Node_Index := 
Tokens (I);
+               Token             : constant Aug_Token_Ref                 := 
Get_Aug_Token (Data, Tree, Tree_Token);
                Pair              : Indent_Pair renames Params (I);
                Code_Delta        : Delta_Type;
                Comment_Param     : Indent_Param;
-               Comment_Param_Set : Boolean                := False;
+               Comment_Param_Set : Boolean                                := 
False;
                Comment_Delta     : Delta_Type;
             begin
                if Trace_Action > Detail then
                   Ada.Text_IO.Put_Line
-                    ("indent_action_0 a: " & Tree.Image (Tree_Token, 
Data.Descriptor.all) & ": " & Image (Pair));
+                    (";; indent_action_0 a: " & Tree.Image (Tree_Token, 
Data.Descriptor.all) & ": " & Image (Pair));
                end if;
 
                if Token.First_Indent_Line /= Invalid_Line_Number then
                   Code_Delta := Indent_Compute_Delta
                     (Data, Tree, Tokens, Pair.Code_Delta, Tree_Token, 
Indenting_Comment => False);
 
-                  if Code_Delta /= Null_Delta then
-                     Indent_Token_1 (Data, Token, Code_Delta, 
Indenting_Comment => False);
-                  end if;
+                  Indent_Token_1 (Data, Token, Code_Delta, Indenting_Comment 
=> False);
                end if;
 
                if Token.First_Trailing_Comment_Line /= Invalid_Line_Number then
@@ -1353,15 +1441,14 @@ package body Wisi is
                   elsif I < Tokens'Last then
                      Comment_Param     := Params (I + 1).Code_Delta;
                      Comment_Param_Set := True;
+
                   end if;
 
                   if Comment_Param_Set then
                      Comment_Delta := Indent_Compute_Delta
                        (Data, Tree, Tokens, Comment_Param, Tree_Token, 
Indenting_Comment => True);
 
-                     if Comment_Delta /= Null_Delta then
-                        Indent_Token_1 (Data, Token, Comment_Delta, 
Indenting_Comment => True);
-                     end if;
+                     Indent_Token_1 (Data, Token, Comment_Delta, 
Indenting_Comment => True);
                   end if;
                end if;
             end;
@@ -1377,7 +1464,7 @@ package body Wisi is
       N       : in     Positive_Index_Type;
       Params  : in     Indent_Param_Array)
    is
-      use all type WisiToken.Syntax_Trees.Node_Label;
+      use all type Syntax_Trees.Node_Label;
    begin
       --  [2] wisi-indent-action*
       for I in Tokens'First .. N loop
@@ -1426,8 +1513,62 @@ package body Wisi is
       end if;
    end Indent_Hanging_1;
 
-   procedure Put (Data : in out Parse_Data_Type)
-   is begin
+   procedure Put (Data : in out Parse_Data_Type; Parser : in 
Parse.Base_Parser'Class)
+   is
+      use all type Ada.Containers.Count_Type;
+
+      Last_Term : constant Base_Token_Index := Parser.Tree.Max_Terminal_Index 
(Parser.Tree.Root);
+
+      function Get_Last_Char_Pos return Buffer_Pos
+      is begin
+         if Parser.Terminals.Length = 0 then
+            --  All comments, or empty
+            if Data.Leading_Non_Grammar.Length > 0 then
+               return Data.Leading_Non_Grammar 
(Data.Leading_Non_Grammar.Last_Index).Char_Region.Last;
+            else
+               return Buffer_Pos'First;
+            end if;
+         else
+            if Last_Term = Invalid_Token_Index then
+               --  All grammar tokens inserted by recover
+               if Data.Leading_Non_Grammar.Length > 0 then
+                  return Data.Leading_Non_Grammar 
(Data.Leading_Non_Grammar.Last_Index).Char_Region.Last;
+               else
+                  return Buffer_Pos'First;
+               end if;
+            else
+               if Data.Terminals (Last_Term).Non_Grammar.Length > 0 then
+                  return Data.Terminals (Last_Term).Non_Grammar
+                    (Data.Terminals 
(Last_Term).Non_Grammar.Last_Index).Char_Region.Last;
+               else
+                  return Parser.Terminals (Last_Term).Char_Region.Last;
+               end if;
+            end if;
+         end if;
+      end Get_Last_Char_Pos;
+
+      Last_Char_Pos : constant Buffer_Pos := Get_Last_Char_Pos;
+
+      function Get_Last_Line return Line_Number_Type
+      is begin
+         for I in Data.Line_Begin_Pos.First_Index .. 
Data.Line_Begin_Pos.Last_Index loop
+            if Data.Line_Begin_Pos (I) > Last_Char_Pos then
+               return I - 1;
+            end if;
+         end loop;
+         return Data.Line_Begin_Pos.Last_Index;
+      end Get_Last_Line;
+
+   begin
+      if Trace_Action > Outline then
+         Ada.Text_IO.Put_Line
+           (";; last_char_pos:" & Buffer_Pos'Image (Last_Char_Pos + 1) &
+              " last_line:" & Line_Number_Type'Image (Get_Last_Line));
+      end if;
+
+      --  +1 to match Emacs region
+      Ada.Text_IO.Put_Line ('[' & End_Code & Buffer_Pos'Image (Last_Char_Pos + 
1) & ']');
+
       case Data.Post_Parse_Action is
       when Navigate =>
          for Cache of Data.Navigate_Caches loop
@@ -1440,18 +1581,46 @@ package body Wisi is
          end loop;
 
       when Indent =>
-         --  We don't need "Indent_Leading_Comments"; they are indented to 0,
-         --  which is the default.
 
          Resolve_Anchors (Data);
 
-         --  Can't set indent for first line
-         for I in Data.Indents.First_Index + 1 .. Data.Indents.Last_Index loop
+         if Trace_Action > Outline then
+            Ada.Text_IO.Put_Line (";; indent leading non_grammar");
+         end if;
+         for Token of Data.Leading_Non_Grammar loop
+            if Token.First then
+               Put (Token.Line, (Int, Data.Begin_Indent));
+            end if;
+         end loop;
+
+         --  It may be that not all lines in Data.Indents were parsed.
+         if Trace_Action > Outline then
+            Ada.Text_IO.Put_Line (";; indent grammar");
+         end if;
+         for I in Data.Indents.First_Index .. Get_Last_Line loop
             Put (I, Data.Indents (I));
          end loop;
       end case;
    end Put;
 
+   procedure Put (Lexer_Errors : in Lexer.Error_Lists.List)
+   is begin
+      for Item of Lexer_Errors loop
+         Ada.Text_IO.Put_Line
+           ('[' & Lexer_Error_Code & Buffer_Pos'Image (Item.Char_Pos) &
+              " ""lexer error" &
+              (if Item.Recover_Char (1) = ASCII.NUL
+               then """"
+               elsif Item.Recover_Char (1) = '"'
+               then """ ?\"""
+               else """ ?" & Item.Recover_Char (1)) &
+              "]");
+         if Item.Recover_Char (2) /= ASCII.NUL then
+            raise SAL.Programmer_Error with "lexer error with non-ascii or 
multiple repair char";
+         end if;
+      end loop;
+   end Put;
+
    procedure Put
      (Data         : in Parse_Data_Type;
       Lexer_Errors : in Lexer.Error_Lists.List;
@@ -1508,20 +1677,7 @@ package body Wisi is
       end Safe_Pos;
 
    begin
-      for Item of Lexer_Errors loop
-         Put_Line
-           ('[' & Lexer_Error_Code & Buffer_Pos'Image (Item.Char_Pos) &
-              " ""lexer error" &
-              (if Item.Recover_Char (1) = ASCII.NUL
-               then """"
-               elsif Item.Recover_Char (1) = '"'
-               then """ ?\"""
-               else """ ?" & Item.Recover_Char (1)) &
-              "]");
-         if Item.Recover_Char (2) /= ASCII.NUL then
-            raise SAL.Programmer_Error with "lexer error with non-ascii or 
multiple repair char";
-         end if;
-      end loop;
+      Put (Lexer_Errors);
 
       for Item of Parse_Errors loop
          --  We don't include parser id here; not very useful.
@@ -1645,7 +1801,7 @@ package body Wisi is
       Descriptor : in WisiToken.Descriptor)
      return String
    is
-      ID_Image : constant String := WisiToken.Image (Item.ID, Descriptor);
+      ID_Image : constant String := Image (Item.ID, Descriptor);
    begin
       if Item.Line /= Invalid_Line_Number and Trace_Action <= Detail then
          return "(" & ID_Image &
@@ -1839,7 +1995,7 @@ package body Wisi is
    begin
       if Trace_Action > Detail then
          Ada.Text_IO.Put_Line
-           ("indent_token_1: " & Indenting_Token.Image (Data.Descriptor.all) & 
" " & Image (Delta_Indent) &
+           (";; indent_token_1: " & Indenting_Token.Image 
(Data.Descriptor.all) & " " & Image (Delta_Indent) &
               Line_Number_Type'Image (First_Line) & " .." & 
Line_Number_Type'Image (Last_Line) &
               (if Indenting_Comment then " comment" else ""));
       end if;
@@ -1850,11 +2006,11 @@ package body Wisi is
                use all type Ada.Text_IO.Count;
                Indent : Boolean := True;
             begin
-               if Data.Line_Begin_Token.all (Line) /= 
Augmented_Token_Arrays.No_Index then
+               if Data.Line_Begin_Token.all (Line - 1) /= 
Augmented_Token_Arrays.No_Index then
                   for Tok of Data.Terminals (Data.Line_Begin_Token.all (Line - 
1)).Non_Grammar loop
                      if Tok.Line = Line and then
                        Tok.ID = Data.Descriptor.Comment_ID and then
-                       Tok.Col = 0
+                       Tok.Column = 0
                      then
                         Indent := False;
                         exit;
@@ -1864,6 +2020,8 @@ package body Wisi is
 
                if Indent then
                   Indent_Line (Data, Line, Delta_Indent);
+               else
+                  Indent_Line (Data, Line, Null_Delta);
                end if;
             end;
          else
diff --git a/packages/wisi/wisi.ads b/packages/wisi/wisi.ads
index 4203930..d3f1214 100644
--- a/packages/wisi/wisi.ads
+++ b/packages/wisi/wisi.ads
@@ -10,7 +10,7 @@
 --
 --  [3] wisi-process-parse.el - defines elisp/process API
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -28,7 +28,6 @@ pragma License (Modified_GPL);
 with Ada.Containers.Doubly_Linked_Lists;
 with Ada.Containers.Vectors;
 with Ada.Strings.Unbounded;
-with Ada.Text_IO;
 with Ada.Unchecked_Deallocation;
 with SAL.Gen_Unbounded_Definite_Red_Black_Trees;
 with SAL.Gen_Unbounded_Definite_Vectors;
@@ -49,16 +48,12 @@ package Wisi is
       Descriptor        : access constant WisiToken.Descriptor;
       Source_File_Name  : in     String;
       Post_Parse_Action : in     Post_Parse_Action_Type;
-      Line_Count        : in     WisiToken.Line_Number_Type;
+      Begin_Line        : in     WisiToken.Line_Number_Type;
+      End_Line          : in     WisiToken.Line_Number_Type;
+      Begin_Indent      : in     Integer;
       Params            : in     String);
-   --  Line_Count only used for Indent. Params contains language-specific
-   --  indent parameter values.
-   --
-   --  It is possible to do without the Line_Count parameter, and grow
-   --  the various vectors dynamically. However, doing that caused
-   --  intermittent problems with too many lines; the Ada code saw more
-   --  lines than the elisp code did. Using the elisp line count is more
-   --  reliable.
+   --  Begin_Line, Begin_Indent, Line_Count only used for Indent. Params
+   --  contains language-specific indent parameter values.
 
    overriding procedure Reset (Data : in out Parse_Data_Type);
    --  Reset for a new parse, with data from previous Initialize.
@@ -74,8 +69,8 @@ package Wisi is
 
    overriding
    procedure Delete_Token
-     (Data        : in out Parse_Data_Type;
-      Token_Index : in     WisiToken.Token_Index);
+     (Data                : in out Parse_Data_Type;
+      Deleted_Token_Index : in     WisiToken.Token_Index);
 
    overriding
    procedure Reduce
@@ -318,11 +313,12 @@ package Wisi is
    --  Language specific child packages override this to implement
    --  wisi-elisp-parse-indent-hanging-function.
 
-   procedure Put (Data : in out Parse_Data_Type);
-   --  Perform post-parse actions, then put result to
+   procedure Put (Data : in out Parse_Data_Type; Parser : in 
WisiToken.Parse.Base_Parser'Class);
+   --  Perform additional post-parse actions, then put result to
    --  Ada.Text_IO.Current_Output, as encoded responses as defined in [3]
    --  wisi-process-parse--execute.
 
+   procedure Put (Lexer_Errors : in WisiToken.Lexer.Error_Lists.List);
    procedure Put
      (Data         : in Parse_Data_Type;
       Lexer_Errors : in WisiToken.Lexer.Error_Lists.List;
@@ -337,16 +333,12 @@ package Wisi is
 
 private
 
-   type Non_Grammar_Token is record
-      ID    : WisiToken.Token_ID         := WisiToken.Invalid_Token_ID;
-      Line  : WisiToken.Line_Number_Type := WisiToken.Invalid_Line_Number;
-      Col   : Ada.Text_IO.Count          := Ada.Text_IO.Count'Last;
-      First : Boolean                    := False;
-      --  Column is needed to detect comments in column 0.
+   type Non_Grammar_Token is new WisiToken.Base_Token with record
+      First : Boolean := False;
    end record;
 
    package Non_Grammar_Token_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
-     (WisiToken.Token_Index, Non_Grammar_Token);
+     (WisiToken.Token_Index, Non_Grammar_Token, Default_Element => (others => 
<>));
 
    type Augmented_Token is new WisiToken.Base_Token with record
       --  Most fields are set by Lexer_To_Augmented at parse time; others
@@ -359,11 +351,9 @@ private
       --  The following fields are only needed for indent.
 
       First : Boolean := False;
-      --  For a terminal, True if the token is not empty and it is first on
-      --  a line, or if it contains trailing blank or comment lines.
+      --  For a terminal, True if the token is first on a line.
       --
-      --  For a nonterminal, True if some contained token's First is True,
-      --  including trailing comments and blank lines.
+      --  For a nonterminal, True if some contained token's First is True.
 
       Paren_State : Integer := 0;
       --  Parenthesis nesting count, before token.
@@ -431,12 +421,14 @@ private
       Descriptor : in WisiToken.Descriptor)
      return String;
 
-   package Augmented_Token_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(WisiToken.Token_Index, Augmented_Token);
+   package Augmented_Token_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (WisiToken.Token_Index, Augmented_Token, Default_Element => (others => 
<>));
    --  Index matches Base_Token_Arrays.
 
-   package Line_Paren_Vectors is new SAL.Gen_Unbounded_Definite_Vectors 
(WisiToken.Line_Number_Type, Integer);
+   package Line_Paren_Vectors is new SAL.Gen_Unbounded_Definite_Vectors
+     (WisiToken.Line_Number_Type, Integer, Default_Element => Integer'Last);
    package Line_Begin_Pos_Vectors is new SAL.Gen_Unbounded_Definite_Vectors
-     (WisiToken.Line_Number_Type, WisiToken.Buffer_Pos);
+     (WisiToken.Line_Number_Type, WisiToken.Buffer_Pos, Default_Element => 
WisiToken.Invalid_Buffer_Pos);
 
    type Nil_Buffer_Pos (Set : Boolean := False) is record
       case Set is
@@ -520,7 +512,8 @@ private
    end record;
    First_Anchor_ID : constant Positive := Positive'First;
 
-   package Indent_Vectors is new Ada.Containers.Vectors 
(WisiToken.Line_Number_Type, Indent_Type);
+   package Indent_Vectors is new SAL.Gen_Unbounded_Definite_Vectors
+     (WisiToken.Line_Number_Type, Indent_Type, Default_Element => (others => 
<>));
    package Navigate_Cursor_Lists is new Ada.Containers.Doubly_Linked_Lists
      (Navigate_Cache_Trees.Cursor, Navigate_Cache_Trees."=");
 
@@ -535,7 +528,7 @@ private
       --  immediately following non-grammar tokens. Does not contain
       --  nonterminal or virtual tokens.
 
-      Leading_Non_Grammar : WisiToken.Base_Token_Arrays.Vector;
+      Leading_Non_Grammar : Non_Grammar_Token_Arrays.Vector;
       --  non-grammar tokens before first grammar token.
 
       Line_Begin_Pos : Line_Begin_Pos_Vectors.Vector;
@@ -558,6 +551,7 @@ private
       End_Positions     : Navigate_Cursor_Lists.List; -- Dynamic data for 
Navigate.
       Face_Caches       : Face_Cache_Trees.Tree;      -- Set by Face.
       Indents           : Indent_Vectors.Vector;      -- Set by Indent.
+      Begin_Indent      : Integer;                    -- Indentation of line 
at start of parse.
 
       --  Copied from language-specific parameters
       Indent_Comment_Col_0 : Boolean := False;
diff --git a/packages/wisi/wisi.el b/packages/wisi/wisi.el
index 4a6b7ad..3aa522c 100644
--- a/packages/wisi/wisi.el
+++ b/packages/wisi/wisi.el
@@ -1,15 +1,15 @@
 ;;; wisi.el --- Utilities for implementing an indentation/navigation engine 
using a generalized LALR parser -*- lexical-binding:t -*-
 ;;
-;; Copyright (C) 2012 - 2018  Free Software Foundation, Inc.
+;; Copyright (C) 2012 - 2019  Free Software Foundation, Inc.
 ;;
 ;; Author: Stephen Leake <address@hidden>
 ;; Maintainer: Stephen Leake <address@hidden>
 ;; Keywords: parser
 ;;  indentation
 ;;  navigation
-;; Version: 2.0.1
+;; Version: 2.1.0
 ;; package-requires: ((cl-lib "1.0") (emacs "25.0") (seq "2.20"))
-;; URL: http://www.nongnu.org/ada-mode/wisi/wisi.html
+;; URL: http://stephe-leake.org/ada/wisitoken.html
 ;;
 ;; This file is part of GNU Emacs.
 ;;
@@ -47,6 +47,9 @@
 ;; at different times (user indent, font-lock, user navigate), so only
 ;; the relevant parser actions are run.
 ;;
+;; Parsing can be noticeably slow in large files, so sometimes we do a
+;; partial parse, and keep a list of parsed regions.
+;;
 ;; Since we have a cache (the text properties), we need to consider
 ;; when to invalidate it.  Ideally, we invalidate only when a change
 ;; to the buffer would change the result of a parse that crosses that
@@ -56,16 +59,23 @@
 ;; indentation (Python).  Adding comments does not change a parse,
 ;; unless code is commented out.
 ;;
-;; For font-lock and navigate, keeping track of the point after which
-;; caches have been deleted is sufficent (see `wisi-cache-max').
+;; For navigate, we expect fully accurate results, and can tolerate
+;; one initial delay, so we always parse the entire file.
+;;
+;; For font-lock, we only parse the portion of the file requested by
+;; font-lock, so we keep a list of regions, and edit that list when
+;; the buffer is changed..
 ;;
-;; For indenting, we cache the indent for each line in a text property
-;; on the newline char preceding the line. `wisi-indent-region' sets
-;; the cache on all the lines computed (normally the whole buffer),
-;; but performs the indent only on the lines in the indent
+;; For indenting, we expect fast results, and can tolerate some
+;; inaccuracy until the editing is done, so we allow partial parse. We
+;; cache the indent for each line in a text property on the newline
+;; char preceding the line. `wisi-indent-region' sets the cache on all
+;; the lines computed (part of the buffer in large files), but
+;; performs the indent only on the lines in the indent
 ;; region. Subsequent calls to `wisi-indent-region' apply the cached
 ;; indents. Non-whitespace edits to the buffer invalidate the indent
-;; caches in the edited region and after.
+;; caches in the edited region and after. Since we can do partial
+;; parse, we keep a list of parsed regions.
 ;;
 ;; See `wisi--post-change' for the details of what we check for
 ;; invalidating.
@@ -85,7 +95,8 @@
 ;;   The Ada grammar as given in the Ada language reference manual is
 ;;   not LALR(1). So we use a generalized parser. In addition, the
 ;;   semantic lexer is more complex, and gives different information
-;;   than we need.
+;;   than we need. Finally, the semantic parser does not support error
+;;   correction, and thus fails in most editing situations.
 ;;
 ;; We use wisitoken wisi-generate to compile BNF to Elisp source, and
 ;; wisi-compile-grammar to compile that to the parser table. See
@@ -120,13 +131,23 @@
 (require 'wisi-elisp-lexer)
 (require 'wisi-fringe)
 
-(defcustom wisi-size-threshold 100000
+(defcustom wisi-size-threshold most-positive-fixnum
   "Max size (in characters) for using wisi parser results for anything."
   :type 'integer
   :group 'wisi
   :safe 'integerp)
 (make-variable-buffer-local 'wisi-size-threshold)
 
+(defcustom wisi-partial-parse-threshold 100001
+  "Min size (in characters) for using partial wisi parser.
+The partial parser finds a nearby start point, and parses a small
+portion of the file containing the region to parse. For indent,
+it assumes the start point is properly indented."
+  :type 'integer
+  :group 'wisi
+  :safe 'integerp)
+(make-variable-buffer-local 'wisi-partial-parse-threshold)
+
 (defvar wisi-inhibit-parse nil
   "When non-nil, don't run the parser.
 Language code can set this non-nil when syntax is known to be
@@ -145,6 +166,14 @@ Useful when debugging parser or parser actions."
 (defvar wisi-error-buffer nil
   "Buffer for displaying syntax errors.")
 
+(defun wisi-safe-marker-pos (pos)
+  "Return an integer buffer position from POS, an integer or marker"
+  (cond
+   ((markerp pos)
+    (marker-position pos))
+
+   (t pos)))
+
 ;;;; token info cache
 
 (defvar-local wisi-parse-failed nil
@@ -163,100 +192,183 @@ Useful when debugging parser or parser actions."
 (defun wisi-set-parse-try (value &optional parse-action)
   (setcdr (assoc (or parse-action wisi--parse-action) wisi--parse-try) value))
 
-(defvar-local wisi--cache-max
+(defvar-local wisi--cached-regions
   (list
    (cons 'face nil)
    (cons 'navigate nil)
    (cons 'indent nil))
-  "Alist of maximimum position in buffer where parser text properties are 
valid.")
+  "Alist of lists of regions in buffer where parser text properties are valid.
+Regions in a list are in random order.")
+
+(defun wisi--contained-region (begin end region)
+  "Non-nil if BEGIN END (buffer positions) is contained in REGION (a cons of 
positions)."
+  ;; We assume begin < end
+  (and (<= (car region) begin)
+       (<= end (cdr region))))
+
+(defun wisi--contained-pos (pos region)
+  "Non-nil if POS (a buffer position) is contained in REGION (a cons of 
positions)."
+  (and (<= (car region) pos)
+       (<= pos (cdr region))))
+
+(defun wisi-cache-covers-region (begin end &optional parse-action)
+  "Non-nil if BEGIN END is contained in a parsed region."
+  (let ((region-list (cdr (assoc (or parse-action wisi--parse-action) 
wisi--cached-regions)))
+       region)
+    (while (and region-list
+               (not (wisi--contained-region begin end (car region-list))))
+      (pop region-list))
+
+    (when region-list
+      ;; return a nice value for verbosity in wisi-validate-cache
+      (setq region (car region-list))
+      (cons (marker-position (car region)) (marker-position (cdr region))))))
+
+(defun wisi-cache-covers-pos (parse-action pos)
+  "Non-nil if POS is contained in a PARSE-ACTION parsed region."
+  (let ((region-list (cdr (assoc parse-action wisi--cached-regions))))
+    (while (and region-list
+               (not (wisi--contained-pos pos (car region-list))))
+      (pop region-list))
+
+    (when region-list
+      t)))
+
+(defun wisi-cache-contains-pos (parse-action pos)
+  "Non-nil if POS is at or before the end of any PARSE-ACTION parsed region."
+  (let ((region-list (cdr (assoc parse-action wisi--cached-regions)))
+       result)
+    (while (and (not result) region-list)
+      (when (<= pos (cdr (car region-list)))
+       (setq result t))
+      (pop region-list))
+
+    result))
+
+(defun wisi-cache-set-region (region)
+  "Set the cached region list for `wisi--parse-action' to REGION."
+  (setcdr (assoc wisi--parse-action wisi--cached-regions)
+         (list (cons (copy-marker (car region))
+                     (copy-marker (cdr region))))))
+
+(defun wisi-cache-add-region (region)
+  "Add REGION to the cached region list for `wisi--parse-action'."
+  (push (cons (copy-marker (car region))
+             (copy-marker (cdr region)))
+       (cdr (assoc wisi--parse-action wisi--cached-regions))))
+
+(defun wisi-cache-delete-regions-after (parse-action pos)
+  "Delete any PARSE-ACTION parsed region at or after POS.
+Truncate any region that overlaps POS."
+  (let ((region-list (cdr (assoc parse-action wisi--cached-regions)))
+       result)
+    (while (and (not result) region-list)
+      (cond
+       ((and (> pos (car (car region-list)))
+            (<= pos (cdr (car region-list))))
+       ;; region contains POS; keep truncated
+       (push (cons (car (car region-list)) (copy-marker pos)) result))
 
-(defun wisi-cache-max (&optional parse-action)
-  ;; Don't need 'wisi-set-cache-max; (move-marker (wisi-cache-max) foo) works
-  (let ((mark (cdr (assoc (or parse-action wisi--parse-action) 
wisi--cache-max))))
-    (unless (marker-position mark)
-      ;; Sometimes marker gets set to <marker in no buffer>; not clear how.
-      (move-marker mark (point-min)))
-    mark))
+       ((> pos (car (car region-list)))
+       ;; region is entirely before POS; keep
+       (push (car region-list) result))
+
+       ;; else region is entirely after POS; delete
+       )
+
+      (pop region-list))
+    (setcdr (assoc parse-action wisi--cached-regions) result)
+    ))
 
 (defun wisi--delete-face-cache (after)
   (with-silent-modifications
-    (remove-text-properties after (point-max) '(wisi-face nil 'font-lock-face 
nil))
-    ))
+    (remove-text-properties after (point-max) '(font-lock-face nil))
+    )
+  (wisi-cache-delete-regions-after 'face after))
 
 (defun wisi--delete-navigate-cache (after)
   (with-silent-modifications
     ;; This text property is 'wisi-cache', not 'wisi-navigate', for
     ;; historical reasons.
     (remove-text-properties after (point-max) '(wisi-cache nil))
-    ))
+    )
+  (wisi-cache-delete-regions-after 'navigate after))
 
 (defun wisi--delete-indent-cache (after)
   (with-silent-modifications
     (remove-text-properties after (point-max) '(wisi-indent nil))
-    ))
+    )
+  (wisi-cache-delete-regions-after 'indent after))
 
 (defun wisi-invalidate-cache (action after)
   "Invalidate ACTION caches for the current buffer from AFTER to end of 
buffer."
-  (when (< after (wisi-cache-max action))
+  (when (wisi-cache-contains-pos action after)
     (when (> wisi-debug 0) (message "wisi-invalidate-cache %s:%s:%d" action 
(current-buffer) after))
     (cond
      ((eq 'face action)
       (wisi--delete-face-cache after))
 
      ((eq 'navigate action)
-      ;; We goto statement start to ensure that motion within nested
-      ;; structures is properly done (ie prev/next on ’elsif’ is not
-      ;; set by wisi-motion-action if already set by a lower level
-      ;; statement). We don’t do it for ’face or ’indent, because that
-      ;; might require a parse, and they don’t care about nested
-      ;; structures.
-      (save-excursion
-       (goto-char after)
-
-       ;; This is copied from ‘wisi-goto-statement-start’; we can’t
-       ;; call that because it would call ‘wisi-validate-cache’,
-       ;; which would call ‘wisi-invalidate-cache’; infinite loop.
-       ;; If this needed a navigate parse to succeed, we would not
-       ;; get here.
-       (let ((cache (or (wisi-get-cache (point))
-                        (wisi-backward-cache))))
-         (cond
-          ((null cache)
-           ;; at bob
-           nil)
-
-          ((eq 'statement-end (wisi-cache-class cache))
-           ;; If the change did affect part of a structure statement,
-           ;; this is a lower level statement. Otherwise, we are
-           ;; invalidating more than necessary; not a problem.
-           (wisi-goto-start cache)
-           (setq cache (wisi-backward-cache))
-           (when cache ;; else bob
-             (wisi-goto-start cache)))
-
-          (t
-           (wisi-goto-start cache))
-          ))
+      (when (wisi-cache-covers-pos 'navigate after)
+       ;; We goto statement start to ensure that motion within nested
+       ;; structures is properly done (ie prev/next on ’elsif’ is not
+       ;; set by wisi-motion-action if already set by a lower level
+       ;; statement). We don’t do it for ’face or ’indent, because that
+       ;; might require a parse, and they don’t care about nested
+       ;; structures.
+       (save-excursion
+         (goto-char after)
+
+         ;; This is copied from ‘wisi-goto-statement-start’; we can’t
+         ;; call that because it would call ‘wisi-validate-cache’,
+         ;; which would call ‘wisi-invalidate-cache’; infinite loop.
+         ;; If this needed a navigate parse to succeed, we would not
+         ;; get here.
+         (let ((cache (or (wisi-get-cache (point))
+                          (wisi-backward-cache))))
+           (cond
+            ((null cache)
+             ;; at bob
+             nil)
+
+            ((eq 'statement-end (wisi-cache-class cache))
+             ;; If the change did affect part of a structure statement,
+             ;; this is a lower level statement. Otherwise, we are
+             ;; invalidating more than necessary; not a problem.
+             (wisi-goto-start cache)
+             (setq cache (wisi-backward-cache))
+             (when cache ;; else bob
+               (wisi-goto-start cache)))
+
+            (t
+             (wisi-goto-start cache))
+            ))
 
-       (setq after (point)))
+         (setq after (point))))
       (wisi--delete-navigate-cache after))
 
      ((eq 'indent action)
-      ;; indent cache is stored on newline before line being indented.
+      ;; The indent cache is stored on newline before line being
+      ;; indented. We delete that, because changing text on a line can
+      ;; change the indent of that line.
       (setq after
            (save-excursion
              (goto-char after)
              (line-beginning-position)))
       (wisi--delete-indent-cache (max 1 (1- after))))
      )
-    (move-marker (wisi-cache-max action) after)
     ))
 
 (defun wisi-reset-parser ()
-  "For ’ada-reset-parser’."
-  (wisi-invalidate-cache 'indent 0)
-  (wisi-invalidate-cache 'face 0)
-  (wisi-invalidate-cache 'navigate 0))
+  "Force a parse."
+  (interactive)
+  (wisi-invalidate-cache 'indent (point-min))
+  (wisi-invalidate-cache 'face (point-min))
+  (wisi-invalidate-cache 'navigate (point-min))
+  (wisi-set-parse-try t 'indent)
+  (wisi-set-parse-try t 'face)
+  (wisi-set-parse-try t 'navigate)
+  (wisi-fringe-clean))
 
 ;; wisi--change-* keep track of buffer modifications.
 ;; If wisi--change-end comes before wisi--change-beg, it means there were
@@ -323,21 +435,35 @@ Used to ignore whitespace changes in before/after change 
hooks.")
   "For `after-change-functions'"
   ;; begin . end is range of text being inserted (empty if equal);
   ;; length is the size of the deleted text.
-  ;;
-  ;; This change might be changing to/from a keyword; trigger
-  ;; font-lock. See test/ada_mode-interactive_common.adb Obj_1.
-  (unless wisi-indenting-p
+
+  ;; Remove caches on inserted text, which could have caches from
+  ;; anywhere, and are in any case invalid.
+
+  ;; If the insertion changes a word that has wisi fontification,
+  ;; remove fontification from the entire word, so it is all
+  ;; refontified consistently.
+
+  (let (word-begin word-end)
     (save-excursion
-      (let (word-end)
-       (goto-char end)
-       (skip-syntax-forward "w_")
-       (setq word-end (point))
-       (goto-char begin)
-       (skip-syntax-backward "w_")
+      (goto-char end)
+      (skip-syntax-forward "w_")
+      (setq word-end (point))
+      (goto-char begin)
+      (skip-syntax-backward "w_")
+      (setq word-begin (point)))
+    (if (get-text-property word-begin 'font-lock-face)
        (with-silent-modifications
-         (remove-text-properties (point) word-end '(font-lock-face nil 
fontified nil)))
-       )
-      )))
+         (remove-text-properties
+          word-begin word-end
+          '(font-lock-face nil wisi-cache nil wisi-indent nil fontified nil)))
+
+      ;; No point in removing
+      ;; 'fontified here; that's already handled by jit-lock.
+      (with-silent-modifications
+       (remove-text-properties
+        begin end
+        '(font-lock-face nil wisi-cache nil wisi-indent nil))))
+    ))
 
 (defun wisi--post-change (begin end)
   "Update wisi text properties for changes in region BEG END."
@@ -346,14 +472,6 @@ Used to ignore whitespace changes in before/after change 
hooks.")
   ;; see comments above on syntax-propertize
   (when (< emacs-major-version 25) (syntax-propertize end))
 
-  ;; Remove caches on inserted text, which could have caches from
-  ;; before the failed parse (or another buffer), and are in any case
-  ;; invalid. No point in removing 'fontified; that's handled by
-  ;; jit-lock.
-
-  (with-silent-modifications
-    (remove-text-properties begin end '(wisi-cache nil font-lock-face nil)))
-
   (save-excursion
     (let ((need-invalidate t)
          (done nil)
@@ -547,19 +665,31 @@ Usefull if the parser appears to be hung."
   ;; also force re-parse
   (dolist (parse-action '(face navigate indent))
     (wisi-set-parse-try t parse-action)
-    (move-marker (wisi-cache-max parse-action) (point-max));; force delete 
caches
     (wisi-invalidate-cache parse-action (point-min)))
   )
 
-(defun wisi--run-parse ()
-  "Run the parser."
-  (unless (buffer-narrowed-p)
-    (let ((msg (when (> wisi-debug 0)
-                (format "wisi: parsing %s %s:%d ..."
-                        wisi--parse-action
-                        (buffer-name)
-                        (line-number-at-pos (point))))))
-      (when (> wisi-debug 0)
+(defun wisi-partial-parse-p (begin end)
+  (and (wisi-process--parser-p wisi--parser)
+       (not (and (= begin (point-min))
+                (= end (point-max))))
+       (>= (point-max) wisi-partial-parse-threshold)))
+
+(defun wisi--run-parse (begin parse-end)
+  "Run the parser, on at least region BEGIN PARSE-END."
+  (unless (or (buffer-narrowed-p)
+             (= (point-min) (point-max))) ;; some parsers can’t handle an 
empty buffer.
+    (let* ((partial-parse-p (wisi-partial-parse-p begin parse-end))
+          (msg (when (> wisi-debug 0)
+                 (format "wisi: %sparsing %s %s:%d %d %d ..."
+                         (if partial-parse-p "partial " "")
+                         wisi--parse-action
+                         (buffer-name)
+                         begin
+                         (if (markerp parse-end) (marker-position parse-end) 
parse-end)
+                         (line-number-at-pos begin))))
+          (parsed-region nil))
+
+      (when msg
        (message msg))
 
       (setq wisi--last-parse-action wisi--parse-action)
@@ -573,19 +703,25 @@ Usefull if the parser appears to be hung."
 
       (condition-case-unless-debug err
          (save-excursion
-           (wisi-parse-current wisi--parser)
-           (setq wisi-parse-failed nil)
-           (move-marker (wisi-cache-max) (point))
-           )
+           (if partial-parse-p
+             (let ((send-region (wisi-parse-expand-region wisi--parser begin 
parse-end)))
+               (setq parsed-region (wisi-parse-current wisi--parser (car 
send-region) (cdr send-region) parse-end))
+               (wisi-cache-add-region parsed-region))
+
+             ;; parse full buffer
+             (setq parsed-region (cons (point-min) (point-max)))
+             (wisi-cache-set-region (wisi-parse-current wisi--parser 
(point-min) (point-max) (point-max))))
+
+           (when (> wisi-debug 0) (message "... parsed %s" parsed-region))
+           (setq wisi-parse-failed nil))
        (wisi-parse-error
         (cl-ecase wisi--parse-action
           (face
-           ;; caches set by failed parse are ok
-           (wisi--delete-face-cache (wisi-cache-max)))
+           ;; caches set by failed elisp parse are ok
+           (wisi--delete-face-cache (cdr parsed-region)))
 
           (navigate
-           ;; parse partially resets caches before and after wisi-cache-max
-           (move-marker (wisi-cache-max) (point-min))
+           ;; elisp parse partially resets caches
            (wisi--delete-navigate-cache (point-min)))
 
           (indent
@@ -600,12 +736,13 @@ Usefull if the parser appears to be hung."
         (signal (car err) (cdr err)))
        )
 
-      (wisi-fringe-display-errors
-       (append
-       (seq-map (lambda (err) (wisi--lexer-error-pos err)) 
(wisi-parser-lexer-errors wisi--parser))
-       (seq-map (lambda (err) (wisi--parse-error-pos err)) 
(wisi-parser-parse-errors wisi--parser))))
+      (unless partial-parse-p
+       (wisi-fringe-display-errors
+        (append
+         (seq-map (lambda (err) (wisi--lexer-error-pos err)) 
(wisi-parser-lexer-errors wisi--parser))
+         (seq-map (lambda (err) (wisi--parse-error-pos err)) 
(wisi-parser-parse-errors wisi--parser)))))
 
-      (when (> wisi-debug 0)
+      (when (> wisi-debug 1)
        (if (or (wisi-parser-lexer-errors wisi--parser)
                (wisi-parser-parse-errors wisi--parser))
            (progn
@@ -632,23 +769,30 @@ Usefull if the parser appears to be hung."
     (move-marker wisi--change-end (point-min))
     ))
 
-(defun wisi-validate-cache (pos error-on-fail parse-action)
-  "Ensure cached data for PARSE-ACTION is valid at least up to POS in current 
buffer."
-  (if (< (point-max) wisi-size-threshold)
+(defun wisi-validate-cache (begin end error-on-fail parse-action)
+  "Ensure cached data for PARSE-ACTION is valid in region BEGIN END in current 
buffer."
+  (if (and (not wisi-inhibit-parse)
+          (< (point-max) wisi-size-threshold))
       (let ((wisi--parse-action parse-action))
        (wisi--check-change)
 
-       ;; Now we can rely on wisi-cache-max.
-
-       ;; If wisi-cache-max = pos, then there is no cache at pos; need parse
-       (when (and (not wisi-inhibit-parse)
-                  (wisi-parse-try)
-                  (<= (wisi-cache-max) pos))
+       ;; Now we can rely on wisi-cache-covers-region
 
-         ;; Don't keep retrying failed parse until text changes again.
-         (wisi-set-parse-try nil)
-
-         (wisi--run-parse))
+       (if (and (or (not wisi-parse-failed)
+                    (wisi-parse-try))
+               (not (wisi-cache-covers-region begin end)))
+           (progn
+             ;; Don't keep retrying failed parse until text changes again.
+             (wisi-set-parse-try nil)
+             (wisi--run-parse begin end))
+
+         (when (> wisi-debug 0)
+           (message "parse %s skipped: parse-failed %s parse-try %s 
cache-covers-region %s %s.%s"
+                    parse-action
+                    wisi-parse-failed
+                    (wisi-parse-try)
+                    (wisi-cache-covers-region begin end)
+                    begin end)))
 
        ;; We want this error even if we did not try to parse; it means
        ;; the parse results are not valid.
@@ -656,11 +800,14 @@ Usefull if the parser appears to be hung."
          (error "parse %s failed" parse-action))
        )
     (when (> wisi-debug 0)
-      (message "parse skipped due to ‘wisi-size-threshold’"))))
+      (message "parse %s skipped inihibit-parse %s wisi-size-threshold %d"
+              parse-action
+              wisi-inhibit-parse
+              wisi-size-threshold))))
 
-(defun wisi-fontify-region (_begin end)
+(defun wisi-fontify-region (begin end)
   "For `jit-lock-functions'."
-  (wisi-validate-cache end nil 'face))
+  (wisi-validate-cache begin end nil 'face))
 
 (defun wisi-get-containing-cache (cache)
   "Return cache from (wisi-cache-containing CACHE)."
@@ -746,7 +893,7 @@ If LIMIT (a buffer position) is reached, throw an error."
 cache. Otherwise move to cache-next, or cache-end, or next cache
 if both nil.  Return cache found."
   (unless (eobp)
-    (wisi-validate-cache (point-max) t 'navigate) ;; ensure there is a next 
cache to move to
+    (wisi-validate-cache (point-min) (point-max) t 'navigate)
     (let ((cache (wisi-get-cache (point))))
       (if (and cache
               (not (eq (wisi-cache-class cache) 'statement-end)))
@@ -763,7 +910,7 @@ if both nil.  Return cache found."
 (defun wisi-backward-statement-keyword ()
   "If not at a cached token, move backward to prev
 cache. Otherwise move to cache-prev, or prev cache if nil."
-  (wisi-validate-cache (point) t 'navigate)
+  (wisi-validate-cache (point-min) (point-max) t 'navigate)
   (let ((cache (wisi-get-cache (point)))
        prev)
     (when cache
@@ -849,14 +996,14 @@ Return start cache."
   "Move point to token at start of statement point is in or after.
 Return start cache."
   (interactive)
-  (wisi-validate-cache (point) t 'navigate)
+  (wisi-validate-cache (point-min) (point-max) t 'navigate)
   (wisi-goto-start (or (wisi-get-cache (point))
                       (wisi-backward-cache))))
 
 (defun wisi-goto-statement-end ()
   "Move point to token at end of statement point is in or before."
   (interactive)
-  (wisi-validate-cache (point) t 'navigate)
+  (wisi-validate-cache (point-min) (point-max) t 'navigate)
   (let ((cache (or (wisi-get-cache (point))
                   (wisi-forward-cache))))
     (when (wisi-cache-end cache)
@@ -914,7 +1061,7 @@ the comment on the previous line."
 
 (defun wisi-indent-statement ()
   "Indent region given by `wisi-goto-start', `wisi-cache-end'."
-  (wisi-validate-cache (point) t 'navigate)
+  (wisi-validate-cache (point-min) (point-max) t 'navigate)
 
   (save-excursion
     (let ((cache (or (wisi-get-cache (point))
@@ -965,8 +1112,43 @@ Called with BEGIN END.")
        ;; single line in buffer; terminate loop
        (goto-char (point-max))))))
 
-(defun wisi-indent-region (begin end)
-  "For `indent-region-function', using the wisi indentation engine."
+(defun wisi-list-memq (a b)
+  "Return non-nil if any member of A is a memq of B."
+  (let ((temp (copy-sequence a))
+       result)
+    (while (and (not result)
+               temp)
+      (when (memq (pop temp) b)
+       (setq result t)))
+    result))
+
+(defun wisi--get-cached-indent (begin end)
+  "Return cached indent for point (must be bol), after correcting
+for parse errors. BEGIN, END is the parsed region."
+  (let ((indent (get-text-property (1- (point)) 'wisi-indent)))
+    (unless indent
+      (error "nil indent for line %d" (line-number-at-pos (point))))
+    (when (and (wisi-partial-parse-p begin end)
+              (< 0 (length (wisi-parser-parse-errors wisi--parser))))
+      (dolist (err (wisi-parser-parse-errors wisi--parser))
+       (dolist (repair (wisi--parse-error-repair err))
+         ;; point is at bol; error pos may be at first token on same line.
+         (save-excursion
+           (back-to-indentation)
+           (when (>= (point) (wisi--parse-error-repair-pos repair))
+             (setq indent (max 0 (wisi-parse-adjust-indent wisi--parser indent 
repair))))
+           ))))
+    indent))
+
+(defun wisi-indent-region (begin end &optional indent-blank-lines)
+  "For `indent-region-function', using the wisi indentation engine.
+If INDENT-BLANK-LINES is non-nil, also indent blank lines (for use as
+`indent-line-function')."
+  (when (< 0 wisi-debug)
+    (message "wisi-indent-region %d %d"
+            (wisi-safe-marker-pos begin)
+            (wisi-safe-marker-pos end)))
+
   (let ((wisi--parse-action 'indent)
        (parse-required nil)
        (end-mark (copy-marker end))
@@ -974,14 +1156,15 @@ Called with BEGIN END.")
 
     (wisi--check-change)
 
-    ;; Always indent the line containing BEGIN.
+    ;; BEGIN is inclusive; END is exclusive.
     (save-excursion
       (goto-char begin)
       (setq begin (line-beginning-position))
 
       (when (bobp) (forward-line))
       (while (and (not parse-required)
-                 (<= (point) end)
+                 (or (and (= begin end) (= (point) end))
+                     (< (point) end))
                  (not (eobp)))
        (unless (get-text-property (1- (point)) 'wisi-indent)
          (setq parse-required t))
@@ -989,18 +1172,23 @@ Called with BEGIN END.")
       )
 
     ;; A parse either succeeds and sets the indent cache on all
-    ;; lines in the buffer, or fails and leaves valid caches
+    ;; lines in the parsed region, or fails and leaves valid caches
     ;; untouched.
     (when (and parse-required
-              (wisi-parse-try))
+              (or (not wisi-parse-failed)
+                  (wisi-parse-try 'indent)))
 
       (wisi-set-parse-try nil)
-      (wisi--run-parse)
+
+      (wisi--run-parse begin end)
 
       ;; If there were errors corrected, the indentation is
-      ;; potentially ambiguous; see test/ada_mode-interactive_2.adb
-      (setq wisi-indent-failed (< 0 (+ (length (wisi-parser-lexer-errors 
wisi--parser))
-                                      (length (wisi-parser-parse-errors 
wisi--parser)))))
+      ;; potentially ambiguous; see
+      ;; test/ada_mode-interactive_2.adb. Or it was a partial parse,
+      ;; where errors producing bad indent are pretty much expected.
+      (unless (wisi-partial-parse-p begin end)
+       (setq wisi-indent-failed (< 0 (+ (length (wisi-parser-lexer-errors 
wisi--parser))
+                                        (length (wisi-parser-parse-errors 
wisi--parser))))))
       )
 
     (if wisi-parse-failed
@@ -1008,6 +1196,8 @@ Called with BEGIN END.")
          ;; primary indent failed
          (setq wisi-indent-failed t)
          (when (functionp wisi-indent-region-fallback)
+           (when (< 0 wisi-debug)
+             (message "wisi-indent-region fallback"))
            (funcall wisi-indent-region-fallback begin end)))
 
       (save-excursion
@@ -1015,22 +1205,28 @@ Called with BEGIN END.")
        (goto-char begin)
        (let ((wisi-indenting-p t))
          (while (and (not (eobp))
-                     (<= (point) end-mark)) ;; end-mark can be at the start of 
an empty line
-           (indent-line-to (if (bobp) 0 (get-text-property (1- (point)) 
'wisi-indent)))
-           (forward-line 1)))
-
-       ;; Run wisi-indent-calculate-functions
-       (when wisi-indent-calculate-functions
-         (goto-char begin)
-         (while (and (not (eobp))
-                     (< (point) end-mark))
-           (back-to-indentation)
-           (let ((indent
-                  (run-hook-with-args-until-success 
'wisi-indent-calculate-functions)))
-             (when indent
-               (indent-line-to indent)))
-
-           (forward-line 1)))
+                     (or (and (= begin end) (= (point) end))
+                         (< (point) end-mark))) ;; end-mark is exclusive
+           (when (or indent-blank-lines (not (eolp)))
+             ;; ’indent-region’ doesn’t indent an empty line; ’indent-line’ 
does
+             (let ((indent (if (bobp) 0 (wisi--get-cached-indent begin end))))
+                   (indent-line-to indent))
+             )
+           (forward-line 1))
+
+         ;; Run wisi-indent-calculate-functions
+         (when wisi-indent-calculate-functions
+           (goto-char begin)
+           (while (and (not (eobp))
+                       (< (point) end-mark))
+             (back-to-indentation)
+             (let ((indent
+                    (run-hook-with-args-until-success 
'wisi-indent-calculate-functions)))
+               (when indent
+                 (indent-line-to indent)))
+
+             (forward-line 1)))
+         )
 
        (when
            (and prev-indent-failed
@@ -1038,6 +1234,8 @@ Called with BEGIN END.")
          ;; Previous parse failed or indent was potentially
          ;; ambiguous, this one is not.
          (goto-char end-mark)
+         (when (< 0 wisi-debug)
+           (message "wisi-indent-region post-parse-fail-hook"))
          (run-hooks 'wisi-post-indent-fail-hook))
        ))
     ))
@@ -1050,7 +1248,7 @@ Called with BEGIN END.")
     (when (>= (point) savep)
       (setq to-indent t))
 
-    (wisi-indent-region (line-beginning-position) (line-end-position))
+    (wisi-indent-region (line-beginning-position) (line-end-position) t)
 
     (goto-char savep)
     (when to-indent (back-to-indentation))
@@ -1093,7 +1291,6 @@ Called with BEGIN END.")
       (if (buffer-live-p wisi-error-buffer)
          (let ((err
                 (with-current-buffer wisi-error-buffer
-                  ;; FIXME: ensure at beginning of error message line.
                   (get-text-property (point) 'wisi-error-data))))
            (wisi-repair-error-1 err))
        (error "no current error found")
@@ -1122,6 +1319,24 @@ If non-nil, only repair errors in BEG END region."
 
 ;;;; debugging
 
+(defun wisi-show-region (string)
+  (interactive "Mregion: ")
+  (when (not (= ?\( (aref string 0)))
+    (setq string (concat "(" string ")")))
+
+  (let ((region (read string)))
+    (cond
+     ((consp (cdr region))
+      ;; region is a list; (begin end)
+      (set-mark  (nth 0 region))
+      (goto-char (nth 1 region)))
+
+     ((consp region)
+      ;; region is a cons; (begin . end)
+      (set-mark  (car region))
+      (goto-char (cdr region)))
+     )))
+
 (defun wisi-debug-keys ()
   "Add debug key definitions to `global-map'."
   (interactive)
@@ -1130,29 +1345,41 @@ If non-nil, only repair errors in BEG END region."
   (define-key global-map "\M-j" 'wisi-show-cache)
   )
 
-(defun wisi-parse-buffer (&optional parse-action)
+(defun wisi-read-parse-action ()
+  "Read a parse action symbol from the minibuffer."
+  (intern-soft (completing-read "parse action (indent): " '(face navigate 
indent) nil t nil nil 'indent)))
+
+(defun wisi-parse-buffer (&optional parse-action begin end)
   (interactive)
-  (unless parse-action (setq parse-action 'indent))
+  (unless parse-action
+    (setq parse-action (wisi-read-parse-action)))
+  (if (use-region-p)
+      (progn
+       (setq begin (region-beginning))
+       (setq end   (region-end)))
+
+    (unless begin (setq begin (point-min)))
+    (unless end (setq end (point-max))))
+
   (wisi-set-parse-try t parse-action)
-  (move-marker (wisi-cache-max parse-action) (point-max));; force delete caches
-  (wisi-invalidate-cache parse-action (point-min))
+  (wisi-invalidate-cache parse-action begin)
 
   (cl-ecase parse-action
     (face
      (with-silent-modifications
        (remove-text-properties
-       (point-min) (point-max)
+       begin end
        (list
         'font-lock-face nil
         'fontified nil)))
-     (wisi-validate-cache (point-max) t parse-action)
+     (wisi-validate-cache begin end t parse-action)
      (when (fboundp 'font-lock-ensure) (font-lock-ensure))) ;; emacs < 25
 
     (navigate
-     (wisi-validate-cache (point-max) t parse-action))
+     (wisi-validate-cache begin end t parse-action))
 
     (indent
-     (wisi-indent-region (point-min) (point-max)))
+     (wisi-indent-region begin end))
     ))
 
 (defun wisi-time (func count &optional report-wait-time)
@@ -1197,7 +1424,6 @@ If non-nil, only repair errors in BEG END region."
     (wisi-time
      (lambda ()
        (wisi-set-parse-try t 'indent)
-       (move-marker (wisi-cache-max 'indent) (point-max));; force delete caches
        (wisi-invalidate-cache 'indent (point-min))
        (wisi-indent-line)
        (when (wisi-process--parser-p wisi--parser)
@@ -1208,7 +1434,6 @@ If non-nil, only repair errors in BEG END region."
 
 (defun wisi-time-indent-middle-line-warm-cache (count)
   (wisi-set-parse-try t 'indent)
-  (move-marker (wisi-cache-max 'indent) (point-max));; force delete caches
   (wisi-invalidate-cache 'indent (point-min))
   (goto-char (point-min))
   (forward-line (/ (count-lines (point-min) (point-max)) 2))
@@ -1221,11 +1446,10 @@ If non-nil, only repair errors in BEG END region."
   (message "%s" (get-text-property (1- (line-beginning-position)) 
'wisi-indent)))
 
 (defun wisi-show-cache ()
-  "Show navigation and face caches, and applied faces, at point."
+  "Show navigation cache, and applied faces, at point."
   (interactive)
-  (message "%s:%s:%s:%s"
+  (message "%s:%s:%s"
           (wisi-get-cache (point))
-          (get-text-property (point) 'wisi-face)
           (get-text-property (point) 'face)
           (get-text-property (point) 'font-lock-face)
           ))
@@ -1238,10 +1462,6 @@ If non-nil, only repair errors in BEG END region."
       (message "previous %s" (wisi-backward-cache)))
     ))
 
-(defun wisi-show-cache-max (action)
-  (push-mark)
-  (goto-char (wisi-cache-max action)))
-
 ;;;;; setup
 
 (cl-defun wisi-setup (&key indent-calculate post-indent-fail parser lexer)
@@ -1251,12 +1471,11 @@ If non-nil, only repair errors in BEG END region."
 
   (setq wisi--parser parser)
   (setq wisi--lexer lexer)
-
-  (setq wisi--cache-max
+  (setq wisi--cached-regions
        (list
-        (cons 'face (copy-marker (point-min)))
-        (cons 'navigate (copy-marker (point-min)))
-        (cons 'indent (copy-marker (point-min)))))
+        (cons 'face nil)
+        (cons 'navigate nil)
+        (cons 'indent nil)))
 
   (setq wisi--parse-try
        (list
diff --git a/packages/wisi/wisitoken-bnf-generate.adb 
b/packages/wisi/wisitoken-bnf-generate.adb
index 8d2da44..d74b4a5 100644
--- a/packages/wisi/wisitoken-bnf-generate.adb
+++ b/packages/wisi/wisitoken-bnf-generate.adb
@@ -3,7 +3,7 @@
 --  Parser for Wisi grammar files, producing Ada or Elisp source
 --  files for a parser.
 --
---  Copyright (C) 2012 - 2015, 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2012 - 2015, 2017 - 2019 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
@@ -54,7 +54,7 @@ is
    begin
       --  verbosity meaning is actually determined by output choice;
       --  they should be consistent with this description.
-      Put_Line (Standard_Error, "version 1.0.1");
+      Put_Line (Standard_Error, "version 1.1.0");
       Put_Line (Standard_Error, "wisi-generate [options] {wisi grammar file}");
       Put_Line (Standard_Error, "Generate source code implementing a parser 
for the grammar.");
       New_Line (Standard_Error);
diff --git a/packages/wisi/wisitoken-bnf-generate_utils.adb 
b/packages/wisi/wisitoken-bnf-generate_utils.adb
index 01bc419..8e52ca4 100644
--- a/packages/wisi/wisitoken-bnf-generate_utils.adb
+++ b/packages/wisi/wisitoken-bnf-generate_utils.adb
@@ -118,7 +118,7 @@ package body WisiToken.BNF.Generate_Utils is
       begin
          Data.Grammar (Descriptor.Accept_ID) :=
            Descriptor.Accept_ID <= Only
-             (Find_Token_ID (Data, Start_Token) & Descriptor.EOF_ID + 
WisiToken.Syntax_Trees.Null_Action);
+             (Find_Token_ID (Data, Start_Token) & Descriptor.EOI_ID + 
WisiToken.Syntax_Trees.Null_Action);
 
          Data.Source_Line_Map (Descriptor.Accept_ID).Line := 
Line_Number_Type'First;
          Data.Source_Line_Map (Descriptor.Accept_ID).RHS_Map.Set_First (0);
@@ -213,7 +213,7 @@ package body WisiToken.BNF.Generate_Utils is
 
    function Initialize (Input_Data : aliased in 
WisiToken_Grammar_Runtime.User_Data_Type) return Generate_Data
    is
-      EOF_ID : constant Token_ID := Token_ID
+      EOI_ID : constant Token_ID := Token_ID
         (Count (Input_Data.Tokens.Non_Grammar) + Count 
(Input_Data.Tokens.Tokens)) + Token_ID
           (Input_Data.Tokens.Keywords.Length) + Token_ID'First;
    begin
@@ -225,11 +225,11 @@ package body WisiToken.BNF.Generate_Utils is
               (if Count (Input_Data.Tokens.Non_Grammar) > 0
                then Token_ID (Count (Input_Data.Tokens.Non_Grammar)) + 
Token_ID'First
                else Token_ID'First),
-            Last_Terminal     => EOF_ID,
-            EOF_ID            => EOF_ID,
-            Accept_ID         => EOF_ID + 1,
-            First_Nonterminal => EOF_ID + 1,
-            Last_Nonterminal  => EOF_ID + 1 + Token_ID 
(Input_Data.Tokens.Rules.Length)),
+            Last_Terminal     => EOI_ID,
+            EOI_ID            => EOI_ID,
+            Accept_ID         => EOI_ID + 1,
+            First_Nonterminal => EOI_ID + 1,
+            Last_Nonterminal  => EOI_ID + 1 + Token_ID 
(Input_Data.Tokens.Rules.Length)),
 
          others => <>)
       do
diff --git a/packages/wisi/wisitoken-bnf-generate_utils.ads 
b/packages/wisi/wisitoken-bnf-generate_utils.ads
index 9e2ff96..7720e21 100644
--- a/packages/wisi/wisitoken-bnf-generate_utils.ads
+++ b/packages/wisi/wisitoken-bnf-generate_utils.ads
@@ -27,7 +27,7 @@ with WisiToken_Grammar_Runtime;
 package WisiToken.BNF.Generate_Utils is
 
    EOI_Name : constant String := "Wisi_EOI";
-   --  EOI_Name is used for EOF_ID token; it must match Emacs ada-mode
+   --  EOI_Name is used for Descriptor.EOI_ID token; it must match Emacs 
ada-mode
    --  wisi.el wisi-eoi-term. It must be a valid Ada identifier when
    --  "_ID" is appended.
 
diff --git a/packages/wisi/wisitoken-bnf-output_ada.adb 
b/packages/wisi/wisitoken-bnf-output_ada.adb
index 0d99340..d27c602 100644
--- a/packages/wisi/wisitoken-bnf-output_ada.adb
+++ b/packages/wisi/wisitoken-bnf-output_ada.adb
@@ -4,7 +4,7 @@
 --  parameters, and a parser for that grammar. The grammar parser
 --  actions must be Ada.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
@@ -191,11 +191,13 @@ is
                      Unref_Lexer   : constant Boolean := 0 = Index (Line, 
"Lexer");
                      Unref_Nonterm : constant Boolean := 0 = Index (Line, 
"Nonterm");
                      Unref_Tokens  : constant Boolean := 0 = Index (Line, 
"Tokens");
+                     Unref_Recover : constant Boolean := 0 = Index (Line, 
"Recover_Active");
                   begin
                      Indent_Line ("function " & Name);
-                     Indent_Line (" (Lexer   : access constant 
WisiToken.Lexer.Instance'Class;");
-                     Indent_Line ("  Nonterm : in out 
WisiToken.Recover_Token;");
-                     Indent_Line ("  Tokens  : in     
WisiToken.Recover_Token_Array)");
+                     Indent_Line (" (Lexer          : access constant 
WisiToken.Lexer.Instance'Class;");
+                     Indent_Line ("  Nonterm        : in out 
WisiToken.Recover_Token;");
+                     Indent_Line ("  Tokens         : in     
WisiToken.Recover_Token_Array;");
+                     Indent_Line ("  Recover_Active : in     Boolean)");
                      Indent_Line (" return 
WisiToken.Semantic_Checks.Check_Status");
                      Indent_Line ("is");
 
@@ -208,6 +210,9 @@ is
                      if Unref_Tokens then
                         Indent_Line ("   pragma Unreferenced (Tokens);");
                      end if;
+                     if Unref_Recover then
+                        Indent_Line ("   pragma Unreferenced 
(Recover_Active);");
+                     end if;
 
                      Indent_Line ("begin");
                      Indent := Indent + 3;
diff --git a/packages/wisi/wisitoken-bnf-output_ada_common.adb 
b/packages/wisi/wisitoken-bnf-output_ada_common.adb
index de9db8c..cbd36b7 100644
--- a/packages/wisi/wisitoken-bnf-output_ada_common.adb
+++ b/packages/wisi/wisitoken-bnf-output_ada_common.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -138,7 +138,7 @@ package body WisiToken.BNF.Output_Ada_Common is
       Indent_Line ("Last_Terminal                 =>" & 
WisiToken.Token_ID'Image (Descriptor.Last_Terminal) & ",");
       Indent_Line ("First_Nonterminal             =>" & 
WisiToken.Token_ID'Image (Descriptor.First_Nonterminal) & ",");
       Indent_Line ("Last_Nonterminal              =>" & 
WisiToken.Token_ID'Image (Descriptor.Last_Nonterminal) & ",");
-      Indent_Line ("EOF_ID                        =>" & 
WisiToken.Token_ID'Image (Descriptor.EOF_ID) & ",");
+      Indent_Line ("EOI_ID                        =>" & 
WisiToken.Token_ID'Image (Descriptor.EOI_ID) & ",");
       Indent_Line ("Accept_ID                     =>" & 
WisiToken.Token_ID'Image (Descriptor.Accept_ID) & ",");
       Indent_Line ("Case_Insensitive              => " & Image 
(Input_Data.Language_Params.Case_Insensitive) & ",");
       Indent_Line ("New_Line_ID                   =>" & 
WisiToken.Token_ID'Image (Descriptor.New_Line_ID) & ",");
@@ -232,9 +232,10 @@ package body WisiToken.BNF.Output_Ada_Common is
             for Name of Name_List.all loop
                if Name /= null then
                   Indent_Line ("function " & Name.all);
-                  Indent_Line (" (Lexer   : access constant 
WisiToken.Lexer.Instance'Class;");
-                  Indent_Line ("  Nonterm : in out WisiToken.Recover_Token;");
-                  Indent_Line ("  Tokens  : in     
WisiToken.Recover_Token_Array)");
+                  Indent_Line (" (Lexer          : access constant 
WisiToken.Lexer.Instance'Class;");
+                  Indent_Line ("  Nonterm        : in out 
WisiToken.Recover_Token;");
+                  Indent_Line ("  Tokens         : in     
WisiToken.Recover_Token_Array;");
+                  Indent_Line ("  Recover_Active : in     Boolean)");
                   Indent_Line (" return 
WisiToken.Semantic_Checks.Check_Status;");
                end if;
             end loop;
@@ -535,7 +536,7 @@ package body WisiToken.BNF.Output_Ada_Common is
      (Input_Data    : in WisiToken_Grammar_Runtime.User_Data_Type;
       Generate_Data : in WisiToken.BNF.Generate_Utils.Generate_Data)
    is
-      use all type Ada.Containers.Count_Type;
+      use all type WisiToken.Parse.LR.All_Parse_Action_Verbs;
       use Ada.Strings.Unbounded;
 
       Table            : WisiToken.Parse.LR.Parse_Table_Ptr renames 
Generate_Data.LR_Parse_Table;
@@ -711,10 +712,12 @@ package body WisiToken.BNF.Output_Ada_Common is
             end loop;
          end Gotos;
 
-         if Table.States (State_Index).Minimal_Complete_Actions.Length > 0 then
+         if Input_Data.Language_Params.Error_Recover and
+           Table.States (State_Index).Minimal_Complete_Action.Verb /= 
Parse.LR.Pause
+         then
             Indent_Wrap
-              ("Set_Minimal_Action (Table.States (" & Trimmed_Image 
(State_Index) & ").Minimal_Complete_Actions, " &
-                 WisiToken.Parse.LR.Image (Table.States 
(State_Index).Minimal_Complete_Actions, Strict => True) & ");");
+              ("Table.States (" & Trimmed_Image (State_Index) & 
").Minimal_Complete_Action := " &
+                 WisiToken.Parse.LR.Strict_Image (Table.States 
(State_Index).Minimal_Complete_Action) & ";");
          end if;
 
          if Line_Count > Lines_Per_Subr then
@@ -834,7 +837,7 @@ package body WisiToken.BNF.Output_Ada_Common is
       case Common_Data.Interface_Kind is
       when Process =>
          Indent_Line ("   Trace,");
-         Indent_Line ("   Lexer.New_Lexer (Trace),");
+         Indent_Line ("   Lexer.New_Lexer (Trace.Descriptor),");
          Indent_Line ("   Table,");
          if Input_Data.Language_Params.Error_Recover then
             Indent_Line ("   Language_Fixes,");
@@ -876,7 +879,7 @@ package body WisiToken.BNF.Output_Ada_Common is
          Indent_Line ("return Parser : 
WisiToken.Parse.Packrat.Generated.Parser do");
          Indent := Indent + 3;
          Indent_Line ("Parser.Trace := Trace;");
-         Indent_Line ("Parser.Lexer := Lexer.New_Lexer (Trace);");
+         Indent_Line ("Parser.Lexer := Lexer.New_Lexer (Trace.Descriptor);");
          Indent_Line ("Parser.User_Data := User_Data;");
          Indent_Line ("Parser.Parse_WisiToken_Accept := 
Parse_wisitoken_accept_1'Access;");
          Indent := Indent - 3;
@@ -921,7 +924,7 @@ package body WisiToken.BNF.Output_Ada_Common is
          Indent_Line ("return WisiToken.Parse.Packrat.Procedural.Create");
          Indent_Line
            ("  (Grammar, Direct_Left_Recursive, " & Trimmed_Image 
(Generate_Data.Descriptor.Accept_ID) &
-              ", Trace, Lexer.New_Lexer (Trace), User_Data);");
+              ", Trace, Lexer.New_Lexer (Trace.Descriptor), User_Data);");
       end case;
       Indent := Indent - 3;
       Indent_Line ("end Create_Parser;");
@@ -983,7 +986,7 @@ package body WisiToken.BNF.Output_Ada_Common is
       Indent_Line ("int            line_token_start; // line at start of 
current token");
       Indent_Line ("unsigned char* marker;           // saved cursor");
       Indent_Line ("size_t         marker_pos;       // saved character 
position");
-      Indent_Line ("size_t         marker_line;      // saved line ");
+      Indent_Line ("size_t         marker_line;      // saved line");
       Indent_Line ("unsigned char* context;          // saved cursor");
       Indent_Line ("size_t         context_pos;      // saved character 
position");
       Indent_Line ("int            context_line;     // saved line");
@@ -1012,13 +1015,16 @@ package body WisiToken.BNF.Output_Ada_Common is
       Indent_Line ("   (unsigned char* input, size_t length, int verbosity)");
       Indent_Line ("{");
       Indent := Indent + 3;
-      Indent_Line ("wisi_lexer* result  = malloc (sizeof (wisi_lexer));");
-      Indent_Line ("result->buffer      = input;");
-      Indent_Line ("result->buffer_last = input + length - 1;");
-      Indent_Line ("result->cursor      = input;");
-      Indent_Line ("result->char_pos    = 1;");
-      Indent_Line ("result->line        = (*result->cursor == 0x0A) ? 2 : 1;");
-      Indent_Line ("result->verbosity   = verbosity;");
+      Indent_Line ("wisi_lexer* result        = malloc (sizeof 
(wisi_lexer));");
+      Indent_Line ("result->buffer            = input;");
+      Indent_Line ("result->buffer_last       = input + length - 1;");
+      Indent_Line ("result->cursor            = input;");
+      Indent_Line ("result->byte_token_start  = input;");
+      Indent_Line ("result->char_pos          = 1;");
+      Indent_Line ("result->char_token_start  = 1;");
+      Indent_Line ("result->line              = (*result->cursor == 0x0A) ? 2 
: 1;");
+      Indent_Line ("result->line_token_start  = result->line;");
+      Indent_Line ("result->verbosity         = verbosity;");
       Indent_Line ("return result;");
       Indent := Indent - 3;
       Indent_Line ("}");
@@ -1077,10 +1083,13 @@ package body WisiToken.BNF.Output_Ada_Common is
       Indent_Line ("static void skip(wisi_lexer* lexer)");
       Indent_Line ("{");
       Indent := Indent + 3;
-      Indent_Line ("if (lexer->cursor <= lexer->buffer_last) 
++lexer->cursor;");
       Indent_Line ("if (lexer->cursor <= lexer->buffer_last)");
+      Indent_Line ("{");
+      Indent_Line ("   ++lexer->cursor;");
       Indent_Line ("   if (DO_COUNT) ++lexer->char_pos;");
-      Indent_Line ("if (*lexer->cursor == 0x0A) ++lexer->line;");
+      Indent_Line ("   if (lexer->cursor <= lexer->buffer_last)");
+      Indent_Line ("      if (*lexer->cursor == 0x0A) ++lexer->line;");
+      Indent_Line ("}");
       Indent := Indent - 3;
       Indent_Line ("}");
       Indent_Start ("#define YYSKIP() skip(lexer)");
@@ -1144,7 +1153,7 @@ package body WisiToken.BNF.Output_Ada_Common is
       Indent_Line ("if (lexer->cursor > lexer->buffer_last)");
       Indent_Line ("{");
       Indent := Indent + 3;
-      Indent_Line ("*id            =" & WisiToken.Token_ID'Image 
(Generate_Data.Descriptor.EOF_ID) & ";");
+      Indent_Line ("*id            =" & WisiToken.Token_ID'Image 
(Generate_Data.Descriptor.EOI_ID) & ";");
       Indent_Line ("*byte_position = lexer->buffer_last - lexer->buffer + 1;");
       Indent_Line ("*byte_length   = 0;");
       Indent_Line ("*char_position = lexer->char_token_start;");
@@ -1156,10 +1165,7 @@ package body WisiToken.BNF.Output_Ada_Common is
       New_Line;
 
       Indent_Line ("lexer->byte_token_start = lexer->cursor;");
-      Indent_Line ("if (DO_COUNT)");
-      Indent_Line ("   lexer->char_token_start = lexer->char_pos;");
-      Indent_Line ("else");
-      Indent_Line ("   lexer->char_token_start = lexer->char_pos + 1;");
+      Indent_Line ("lexer->char_token_start = lexer->char_pos;");
       Indent_Line ("if (*lexer->cursor == 0x0A)");
       Indent_Line ("   lexer->line_token_start = lexer->line-1;");
       Indent_Line ("else");
@@ -1239,7 +1245,7 @@ package body WisiToken.BNF.Output_Ada_Common is
       end loop;
       New_Line;
 
-      --  Default action
+      --  Default action.
       Indent_Line ("* {status = ERROR_unrecognized_character; continue;}");
 
       Put_Line ("*/");
diff --git a/packages/wisi/wisitoken-bnf-output_ada_emacs.adb 
b/packages/wisi/wisitoken-bnf-output_ada_emacs.adb
index 30da8c4..a16d289 100644
--- a/packages/wisi/wisitoken-bnf-output_ada_emacs.adb
+++ b/packages/wisi/wisitoken-bnf-output_ada_emacs.adb
@@ -12,7 +12,7 @@
 --  If run in an Emacs dynamically loaded module, the parser actions
 --  call the elisp actions directly.
 --
---  Copyright (C) 2012 - 2015, 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2012 - 2015, 2017 - 2019 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
@@ -178,7 +178,7 @@ is
       Navigate_Lines     : String_Lists.List;
       Face_Line          : Unbounded_String;
       Indent_Action_Line : Unbounded_String;
-      Check_Lines        : String_Lists.List;
+      Check_Line         : Unbounded_String;
 
       function Statement_Params (Params : in String) return String
       is
@@ -320,7 +320,7 @@ is
             First  := Index_Non_Blank (Params, Last + 1);
             Last   := Index (Params, Delim, First);
             Result := Result & ',' & Integer'Image
-              (Find_Elisp_ID (Input_Data.User_Names.Faces, Params (First .. 
Last - 1)));
+              (Find_Elisp_ID (Input_Data.Tokens.Faces, Params (First .. Last - 
1)));
 
             if Params (Last) = ']' then
                Put_Error
@@ -332,7 +332,7 @@ is
             First  := Index_Non_Blank (Params, Last + 1);
             Last   := Index (Params, Delim, First);
             Result := Result & ',' &
-              Integer'Image (Find_Elisp_ID (Input_Data.User_Names.Faces, 
Params (First .. Last - 1))) & ")";
+              Integer'Image (Find_Elisp_ID (Input_Data.Tokens.Faces, Params 
(First .. Last - 1))) & ")";
 
             Need_Comma := True;
          end loop;
@@ -573,9 +573,9 @@ is
                   Last := Last + 1; -- get past ')'
                   return -Args;
 
-               elsif Is_Present (Input_Data.User_Names.Indents, 
-Function_Name) then
+               elsif Is_Present (Input_Data.Tokens.Indents, -Function_Name) 
then
                   --  Language-specific function call
-                  Function_Name := +Value (Input_Data.User_Names.Indents, 
-Function_Name);
+                  Function_Name := +Value (Input_Data.Tokens.Indents, 
-Function_Name);
                   Arg_Count     := 0;
                   loop
                      exit when Params (Last) = ')';
@@ -735,7 +735,35 @@ is
       procedure Translate_Line (Line : in String)
       is
          Last       : constant Integer := Index (Line, Blank_Set);
-         Elisp_Name : constant String  := Line (Line'First + 1 .. Last - 1);
+         Elisp_Name : constant String  := Line (Line'First + 1 .. (if Last = 0 
then Line'Last else Last) - 1);
+
+         procedure Assert_Face_Empty
+         is begin
+            if Length (Face_Line) > 0 then
+               Put_Error
+                 (Error_Message
+                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
"multiple face actions"));
+            end if;
+         end Assert_Face_Empty;
+
+         procedure Assert_Indent_Empty
+         is begin
+            if Length (Indent_Action_Line) > 0 then
+               Put_Error
+                 (Error_Message
+                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
"multiple indent actions"));
+            end if;
+         end Assert_Indent_Empty;
+
+         procedure Assert_Check_Empty
+         is begin
+            if Length (Check_Line) > 0 then
+               Put_Error
+                 (Error_Message
+                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
"multiple check actions"));
+            end if;
+         end Assert_Check_Empty;
+
       begin
          --  wisi action/check functions, in same order as typically used in
          --  .wy files; Navigate, Face, Indent, Check.
@@ -755,101 +783,58 @@ is
                  Motion_Params (Line (Last + 1 .. Line'Last)) & ";");
 
          elsif Elisp_Name = "wisi-face-apply-action" then
-            if Length (Face_Line) = 0 then
+            Assert_Face_Empty;
                Face_Line := +Elisp_Name_To_Ada (Elisp_Name, False, Trim => 5) &
                  Face_Apply_Params (Line (Last + 1 .. Line'Last)) & ";";
-            else
-               Put_Error
-                 (Error_Message
-                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
"multiple face actions"));
-            end if;
 
          elsif Elisp_Name = "wisi-face-apply-list-action" then
-            if Length (Face_Line) = 0 then
+            Assert_Face_Empty;
                Face_Line := +Elisp_Name_To_Ada (Elisp_Name, False, Trim => 5) &
                  Face_Apply_Params (Line (Last + 1 .. Line'Last)) & ";";
-            else
-               Put_Error
-                 (Error_Message
-                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
"multiple face actions"));
-            end if;
 
          elsif Elisp_Name = "wisi-face-mark-action" then
-            if Length (Face_Line) = 0 then
+            Assert_Face_Empty;
                Face_Line := +Elisp_Name_To_Ada (Elisp_Name, False, Trim => 5) &
                  Face_Mark_Params (Line (Last + 1 .. Line'Last)) & ";";
-            else
-               Put_Error
-                 (Error_Message
-                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
"multiple face actions"));
-            end if;
 
          elsif Elisp_Name = "wisi-face-remove-action" then
-            if Length (Face_Line) = 0 then
+            Assert_Face_Empty;
                Face_Line := +Elisp_Name_To_Ada (Elisp_Name, False, Trim => 5) &
                  Face_Remove_Params (Line (Last + 1 .. Line'Last)) & ";";
-            else
-               Put_Error
-                 (Error_Message
-                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
"multiple face actions"));
-            end if;
 
          elsif Elisp_Name = "wisi-indent-action" then
-            if Length (Indent_Action_Line) = 0 then
+            Assert_Indent_Empty;
                Indent_Action_Line := +"Indent_Action_0" &
                  Indent_Params (Line (Last + 1 .. Line'Last)) & ";";
-            else
-               Put_Error
-                 (Error_Message
-                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
"multiple indent actions"));
-            end if;
 
          elsif Elisp_Name = "wisi-indent-action*" then
-            if Length (Indent_Action_Line) = 0 then
+            Assert_Indent_Empty;
                declare
                   Temp : constant Integer := Index (Line, Blank_Set, Last + 1);
                begin
                   Indent_Action_Line := +"Indent_Action_1" &
                     Indent_Params (Line (Temp + 1 .. Line'Last), Line (Last + 
1 .. Temp - 1) & ", ") & ";";
                end;
-            else
-               Put_Error
-                 (Error_Message
-                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
"multiple indent actions"));
-            end if;
 
          elsif Elisp_Name = "wisi-propagate-name" then
-            if not Check then
-               Put_Error
-                 (Error_Message
-                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
Elisp_Name & " used in action"));
-               return;
-            end if;
-            Check_Lines.Append
-              ("return " & Elisp_Name_To_Ada (Elisp_Name, False, Trim => 5) &
-                 " (Nonterm, Tokens, " & Line (Last + 1 .. Line'Last) & ";");
+            Assert_Check_Empty;
+            Check_Line := +"return " & Elisp_Name_To_Ada (Elisp_Name, False, 
Trim => 5) &
+              " (Nonterm, Tokens, " & Line (Last + 1 .. Line'Last) & ";";
 
          elsif Elisp_Name = "wisi-merge-names" then
-            if not Check then
-               Put_Error
-                 (Error_Message
-                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
Elisp_Name & " used in action"));
-               return;
-            end if;
-            Check_Lines.Append
-              ("return " & Elisp_Name_To_Ada (Elisp_Name, False, Trim => 5) &
-                 Merge_Names_Params (Line (Last + 1 .. Line'Last)) & ";");
+            Assert_Check_Empty;
+            Check_Line := +"return " & Elisp_Name_To_Ada (Elisp_Name, False, 
Trim => 5) &
+              Merge_Names_Params (Line (Last + 1 .. Line'Last)) & ";";
 
          elsif Elisp_Name = "wisi-match-names" then
-            if not Check then
-               Put_Error
-                 (Error_Message
-                    (Input_Data.Grammar_Lexer.File_Name, RHS.Source_Line, 
Elisp_Name & " used in action"));
-               return;
-            end if;
-            Check_Lines.Append
-              ("return " & Elisp_Name_To_Ada (Elisp_Name, False, Trim => 5) &
-                 Match_Names_Params (Line (Last + 1 .. Line'Last)) & ";");
+            Assert_Check_Empty;
+            Check_Line := +"return " & Elisp_Name_To_Ada (Elisp_Name, False, 
Trim => 5) &
+              Match_Names_Params (Line (Last + 1 .. Line'Last)) & ";";
+
+         elsif Elisp_Name = "wisi-terminate-partial-parse" then
+            Assert_Check_Empty;
+            Check_Line := +"return Terminate_Partial_Parse 
(Partial_Parse_Active, Partial_Parse_Byte_Goal, " &
+              "Recover_Active, Nonterm);";
 
          else
             Put_Error
@@ -874,16 +859,18 @@ is
       if Check then
          --  in a check
          Indent_Line ("function " & Name);
-         Indent_Line (" (Lexer   : access constant 
WisiToken.Lexer.Instance'Class;");
-         Indent_Line ("  Nonterm : in out WisiToken.Recover_Token;");
-         Indent_Line ("  Tokens  : in     WisiToken.Recover_Token_Array)");
+         Indent_Line (" (Lexer          : access constant 
WisiToken.Lexer.Instance'Class;");
+         Indent_Line ("  Nonterm        : in out WisiToken.Recover_Token;");
+         Indent_Line ("  Tokens         : in     
WisiToken.Recover_Token_Array;");
+         Indent_Line ("  Recover_Active : in     Boolean)");
          Indent_Line (" return WisiToken.Semantic_Checks.Check_Status");
          declare
-            --  Tokens is always referenced.
-            Unref_Lexer   : constant Boolean := (for all Line of Check_Lines 
=> 0 = Index (Line, "Lexer"));
-            Unref_Nonterm : constant Boolean := (for all Line of Check_Lines 
=> 0 = Index (Line, "Nonterm"));
+            Unref_Lexer   : constant Boolean := 0 = Index (Check_Line, 
"Lexer");
+            Unref_Nonterm : constant Boolean := 0 = Index (Check_Line, 
"Nonterm");
+            Unref_Tokens  : constant Boolean := 0 = Index (Check_Line, 
"Tokens");
+            Unref_Recover : constant Boolean := 0 = Index (Check_Line, 
"Recover_Active");
          begin
-            if Unref_Lexer or Unref_Nonterm then
+            if Unref_Lexer or Unref_Nonterm or Unref_Tokens or Unref_Recover 
then
                Indent_Line ("is");
                if Unref_Lexer then
                   Indent_Line ("   pragma Unreferenced (Lexer);");
@@ -891,15 +878,20 @@ is
                if Unref_Nonterm then
                   Indent_Line ("   pragma Unreferenced (Nonterm);");
                end if;
+               if Unref_Tokens then
+                  Indent_Line ("   pragma Unreferenced (Tokens);");
+               end if;
+               if Unref_Recover then
+                  Indent_Line ("   pragma Unreferenced (Recover_Active);");
+               end if;
+
                Indent_Line ("begin");
             else
                Indent_Line ("is begin");
             end if;
          end;
          Indent := Indent + 3;
-         for Line of Check_Lines loop
-            Indent_Line (Line);
-         end loop;
+         Indent_Line (-Check_Line);
       else
          --  In an action
          Indent_Line ("procedure " & Name);
@@ -1179,7 +1171,7 @@ is
          Indent_Line ("      Elisp_Numbers (I) := Env.make_fixnum (Env, 
emacs_module_h.int64_t (I));");
          Indent_Line ("   end loop;");
          Indent_Line ("   for I in Lexer_Elisp_Symbols'Range loop");
-         Indent_Line ("      Lexer_Elisp_Symbols (I) := Intern_Soft (Env, 
Lexers.User_Names (I).all);");
+         Indent_Line ("      Lexer_Elisp_Symbols (I) := Intern_Soft (Env, 
Lexers.Tokens (I).all);");
          Indent_Line ("   end loop;");
          Indent_Line ("   Parser := Create_Parser (Env, 
Lexer_Elisp_Symbols);");
          Indent_Line ("   return 0;");
@@ -1238,7 +1230,7 @@ is
       New_Line;
 
       Output_Elisp_Common.Indent_Name_Table
-        (Output_File_Name_Root, "process-face-table", 
Input_Data.User_Names.Faces);
+        (Output_File_Name_Root, "process-face-table", Input_Data.Tokens.Faces);
 
       Put_Line ("(provide '" & Output_File_Name_Root & "-process)");
       Set_Output (Standard_Output);
diff --git a/packages/wisi/wisitoken-bnf.ads b/packages/wisi/wisitoken-bnf.ads
index cd40975..3d46c45 100644
--- a/packages/wisi/wisitoken-bnf.ads
+++ b/packages/wisi/wisitoken-bnf.ads
@@ -13,7 +13,7 @@
 --  [1] https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form
 --  [2] http://www.nongnu.org/ada-mode/wisi/wisi-user_guide.html, (info 
"(wisi-user_guide)Top")
 --
---  Copyright (C) 2012 - 2015, 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2012 - 2015, 2017 - 2019 Free Software Foundation, Inc.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
@@ -257,18 +257,13 @@ package WisiToken.BNF is
       --  Rules included here because they define the nonterminal tokens, as
       --  well as the productions.
 
-      re2c_Regexps : String_Pair_Lists.List;
-      --  From %re2c_regexp; included here because they are used in defining
-      --  the Tokens.
-   end record;
-
-   type User_Names is record
-      --  Specified in grammar file declarations, used in other declarations
+      --  The following are specified in grammar file declarations and used in 
other declarations
       --  or actions. Faces, Indents only used if .wy action language is
       --  elisp and output language is not elisp.
 
-      Faces   : String_Lists.List;      -- %elisp_face
-      Indents : String_Pair_Lists.List; -- %elisp_indent
+      re2c_Regexps : String_Pair_Lists.List; -- %re2c_regexp
+      Faces        : String_Lists.List;      -- %elisp_face
+      Indents      : String_Pair_Lists.List; -- %elisp_indent
    end record;
 
    function "+" (Item : in String) return 
Ada.Strings.Unbounded.Unbounded_String
diff --git a/packages/wisi/wisitoken-gen_token_enum.ads 
b/packages/wisi/wisitoken-gen_token_enum.ads
index cfd508b..36fca14 100644
--- a/packages/wisi/wisitoken-gen_token_enum.ads
+++ b/packages/wisi/wisitoken-gen_token_enum.ads
@@ -2,7 +2,7 @@
 --
 --  Support for an enumerated token type
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -47,7 +47,7 @@ package WisiToken.Gen_Token_Enum is
       Last_Terminal                 => +Last_Terminal,
       First_Nonterminal             => +First_Nonterminal,
       Last_Nonterminal              => +Last_Nonterminal,
-      EOF_ID                        => +EOF_ID,
+      EOI_ID                        => +EOF_ID,
       Accept_ID                     => +Accept_ID,
       Case_Insensitive              => Case_Insensitive,
       New_Line_ID                   => Invalid_Token_ID,
@@ -67,7 +67,7 @@ package WisiToken.Gen_Token_Enum is
       Last_Terminal                 => +Last_Terminal,
       First_Nonterminal             => +First_Nonterminal,
       Last_Nonterminal              => +Last_Nonterminal,
-      EOF_ID                        => +EOF_ID,
+      EOI_ID                        => +EOF_ID,
       Accept_ID                     => +Accept_ID,
       Case_Insensitive              => Case_Insensitive,
       New_Line_ID                   => Invalid_Token_ID,
diff --git a/packages/wisi/wisitoken-generate-lr-lalr_generate.adb 
b/packages/wisi/wisitoken-generate-lr-lalr_generate.adb
index 0558f74..2a1f403 100644
--- a/packages/wisi/wisitoken-generate-lr-lalr_generate.adb
+++ b/packages/wisi/wisitoken-generate-lr-lalr_generate.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2002 - 2005, 2008 - 2015, 2017, 2018 Free Software 
Foundation, Inc.
+--  Copyright (C) 2002 - 2005, 2008 - 2015, 2017 - 2019 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -98,7 +98,7 @@ package body WisiToken.Generate.LR.LALR_Generate is
 
             --  If Symbol = EOF_Token, this is the start symbol accept
             --  production; don't need a kernel with dot after EOF.
-            if (Dot_ID = Symbol and Symbol /= Descriptor.EOF_ID) and then
+            if (Dot_ID = Symbol and Symbol /= Descriptor.EOI_ID) and then
               not Has_Element (Find (Item.Prod, Next (Item.Dot), Goto_Set))
             then
                Goto_Set.Set.Insert
@@ -494,10 +494,11 @@ package body WisiToken.Generate.LR.LALR_Generate is
 
       Has_Empty_Production : constant Token_ID_Set := 
WisiToken.Generate.Has_Empty_Production (Grammar);
 
-      Minimal_Terminal_First : constant Token_Array_Token_ID :=
-        WisiToken.Generate.LR.Minimal_Terminal_First (Grammar, Descriptor);
+      Minimal_Terminal_Sequences : constant Minimal_Sequence_Array :=
+        Compute_Minimal_Terminal_Sequences (Descriptor, Grammar);
 
-      Ancestors : constant Token_Array_Token_Set := 
WisiToken.Generate.Ancestors (Grammar, Descriptor);
+      Minimal_Terminal_First : constant Token_Array_Token_ID :=
+        Compute_Minimal_Terminal_First (Descriptor, 
Minimal_Terminal_Sequences);
 
       First_Nonterm_Set : constant Token_Array_Token_Set := 
WisiToken.Generate.First
         (Grammar, Has_Empty_Production, Descriptor.First_Terminal);
@@ -558,16 +559,20 @@ package body WisiToken.Generate.LR.LALR_Generate is
         (Kernels, Grammar, Has_Empty_Production, First_Nonterm_Set, 
First_Terminal_Sequence, Unknown_Conflicts,
          Table.all, Descriptor);
 
-      --  Set Table.States.Productions, Minimal_Terminal_First for 
McKenzie_Recover
+      --  Set Table.States.Productions, Minimal_Complete_Actions for 
McKenzie_Recover
       for State in Table.States'Range loop
          Table.States (State).Productions := LR1_Items.Productions (Kernels 
(State));
+         if Trace_Generate > Extra then
+            Ada.Text_IO.Put_Line ("Set_Minimal_Complete_Actions:" & 
State_Index'Image (State));
+         end if;
          WisiToken.Generate.LR.Set_Minimal_Complete_Actions
-           (Table.States (State), Kernels (State), Minimal_Terminal_First, 
Ancestors, Descriptor, Grammar);
+           (Table.States (State), Kernels (State), Descriptor, Grammar, 
Minimal_Terminal_Sequences,
+            Minimal_Terminal_First);
       end loop;
 
       if Put_Parse_Table then
          WisiToken.Generate.LR.Put_Parse_Table
-           (Table, "LALR", Grammar, Kernels, Ancestors, Unknown_Conflicts, 
Descriptor);
+           (Table, "LALR", Grammar, Kernels, Unknown_Conflicts, Descriptor);
       end if;
 
       Delete_Known (Unknown_Conflicts, Known_Conflicts_Edit);
diff --git a/packages/wisi/wisitoken-generate-lr-lalr_generate.ads 
b/packages/wisi/wisitoken-generate-lr-lalr_generate.ads
index 80cc165..b4a109f 100644
--- a/packages/wisi/wisitoken-generate-lr-lalr_generate.ads
+++ b/packages/wisi/wisitoken-generate-lr-lalr_generate.ads
@@ -2,7 +2,7 @@
 --
 --  Generalized LALR parse table generator.
 --
---  Copyright (C) 2002 - 2003, 2009 - 2010, 2013 - 2015, 2017, 2018 Free 
Software Foundation, Inc.
+--  Copyright (C) 2002 - 2003, 2009 - 2010, 2013 - 2015, 2017 - 2019 Free 
Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -63,4 +63,21 @@ package WisiToken.Generate.LR.LALR_Generate is
       Descriptor        : in WisiToken.Descriptor)
      return LR1_Items.Item_Set_List;
 
+   procedure Fill_In_Lookaheads
+     (Grammar                 : in     
WisiToken.Productions.Prod_Arrays.Vector;
+      Has_Empty_Production    : in     Token_ID_Set;
+      First_Terminal_Sequence : in     Token_Sequence_Arrays.Vector;
+      Kernels                 : in out LR1_Items.Item_Set_List;
+      Descriptor              : in     WisiToken.Descriptor);
+
+   procedure Add_Actions
+     (Kernels                 : in     LR1_Items.Item_Set_List;
+      Grammar                 : in     
WisiToken.Productions.Prod_Arrays.Vector;
+      Has_Empty_Production    : in     Token_ID_Set;
+      First_Nonterm_Set       : in     Token_Array_Token_Set;
+      First_Terminal_Sequence : in     Token_Sequence_Arrays.Vector;
+      Conflicts               :    out Conflict_Lists.List;
+      Table                   : in out Parse_Table;
+      Descriptor              : in     WisiToken.Descriptor);
+
 end WisiToken.Generate.LR.LALR_Generate;
diff --git a/packages/wisi/wisitoken-generate-lr-lr1_generate.adb 
b/packages/wisi/wisitoken-generate-lr-lr1_generate.adb
index 53507ba..62c20c1 100644
--- a/packages/wisi/wisitoken-generate-lr-lr1_generate.adb
+++ b/packages/wisi/wisitoken-generate-lr-lr1_generate.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -43,10 +43,10 @@ package body WisiToken.Generate.LR.LR1_Generate is
       for Item of Set.Set loop
          if Item.Dot /= No_Element then
             if Element (Item.Dot) = Symbol and
-              --  We don't need a state with dot after EOF in the
-              --  accept production. EOF should only appear in the
+              --  We don't need a state with dot after EOI in the
+              --  accept production. EOI should only appear in the
               --  accept production.
-              Symbol /= Descriptor.EOF_ID
+              Symbol /= Descriptor.EOI_ID
             then
                Goto_Set.Set.Insert ((Item.Prod, Next (Item.Dot), new 
Token_ID_Set'(Item.Lookaheads.all)));
             end if;
@@ -91,7 +91,7 @@ package body WisiToken.Generate.LR.LR1_Generate is
         ((Set            => Item_Lists.To_List
             ((Prod       => (Grammar.First_Index, 0),
               Dot        => Grammar (Grammar.First_Index).RHSs 
(0).Tokens.First,
-              Lookaheads => new Token_ID_Set'(To_Lookahead (Descriptor.EOF_ID, 
Descriptor)))),
+              Lookaheads => new Token_ID_Set'(To_Lookahead (Descriptor.EOI_ID, 
Descriptor)))),
           Goto_List      => <>,
           Dot_IDs        => <>,
           State          => First_State_Index),
@@ -207,10 +207,11 @@ package body WisiToken.Generate.LR.LR1_Generate is
 
       Has_Empty_Production : constant Token_ID_Set := 
WisiToken.Generate.Has_Empty_Production (Grammar);
 
-      Minimal_Terminal_First : constant Token_Array_Token_ID :=
-        WisiToken.Generate.LR.Minimal_Terminal_First (Grammar, Descriptor);
+      Minimal_Terminal_Sequences : constant Minimal_Sequence_Array :=
+        Compute_Minimal_Terminal_Sequences (Descriptor, Grammar);
 
-      Ancestors : constant Token_Array_Token_Set := 
WisiToken.Generate.Ancestors (Grammar, Descriptor);
+      Minimal_Terminal_First : constant Token_Array_Token_ID :=
+        Compute_Minimal_Terminal_First (Descriptor, 
Minimal_Terminal_Sequences);
 
       First_Nonterm_Set : constant Token_Array_Token_Set := 
WisiToken.Generate.First
         (Grammar, Has_Empty_Production, Descriptor.First_Terminal);
@@ -261,19 +262,24 @@ package body WisiToken.Generate.LR.LR1_Generate is
       Add_Actions
         (Item_Sets, Grammar, Has_Empty_Production, First_Nonterm_Set, 
Unknown_Conflicts, Table.all, Descriptor);
 
-      --  Set Table.States.Productions, Minimal_Terminal_First for 
McKenzie_Recover
+      --  Set Table.States.Productions, Minimal_Complete_Actions for 
McKenzie_Recover
       for State in Table.States'Range loop
          Table.States (State).Productions := LR1_Items.Productions
            (LR1_Items.Filter (Item_Sets (State), Grammar, Descriptor, 
LR1_Items.In_Kernel'Access));
+
+         if Trace_Generate > Detail then
+            Ada.Text_IO.Put_Line ("Set_Minimal_Complete_Actions:" & 
State_Index'Image (State));
+         end if;
+
          WisiToken.Generate.LR.Set_Minimal_Complete_Actions
            (Table.States (State),
             LR1_Items.Filter (Item_Sets (State), Grammar, Descriptor, 
LR1_Items.In_Kernel'Access),
-            Minimal_Terminal_First, Ancestors, Descriptor, Grammar);
+            Descriptor, Grammar, Minimal_Terminal_Sequences, 
Minimal_Terminal_First);
       end loop;
 
       if Put_Parse_Table then
          WisiToken.Generate.LR.Put_Parse_Table
-           (Table, "LR1", Grammar, Item_Sets, Ancestors, Unknown_Conflicts, 
Descriptor);
+           (Table, "LR1", Grammar, Item_Sets, Unknown_Conflicts, Descriptor);
       end if;
 
       if Trace_Generate > Outline then
diff --git a/packages/wisi/wisitoken-generate-lr-lr1_generate.ads 
b/packages/wisi/wisitoken-generate-lr-lr1_generate.ads
index 7a3c6f6..92992cb 100644
--- a/packages/wisi/wisitoken-generate-lr-lr1_generate.ads
+++ b/packages/wisi/wisitoken-generate-lr-lr1_generate.ads
@@ -7,7 +7,7 @@
 --  [dragon] "Compilers Principles, Techniques, and Tools" by Aho,
 --  Sethi, and Ullman (aka: "The [Red] Dragon Book").
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -73,4 +73,13 @@ package WisiToken.Generate.LR.LR1_Generate is
      return LR1_Items.Item_Set_List;
    --  [dragon] algorithm 4.9 pg 231; figure 4.38 pg 232; procedure "items"
 
+   procedure Add_Actions
+     (Item_Sets            : in     LR1_Items.Item_Set_List;
+      Grammar              : in     WisiToken.Productions.Prod_Arrays.Vector;
+      Has_Empty_Production : in     Token_ID_Set;
+      First_Nonterm_Set    : in     Token_Array_Token_Set;
+      Conflicts            :    out Conflict_Lists.List;
+      Table                : in out Parse_Table;
+      Descriptor           : in     WisiToken.Descriptor);
+
 end WisiToken.Generate.LR.LR1_Generate;
diff --git a/packages/wisi/wisitoken-generate-lr.adb 
b/packages/wisi/wisitoken-generate-lr.adb
index c124327..f909fde 100644
--- a/packages/wisi/wisitoken-generate-lr.adb
+++ b/packages/wisi/wisitoken-generate-lr.adb
@@ -1,1141 +1,1256 @@
---  Abstract :
---
---  See spec.
---
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
---
---  This library is free software;  you can redistribute it and/or modify it
---  under terms of the  GNU General Public License  as published by the Free
---  Software  Foundation;  either version 3,  or (at your  option) any later
---  version. This library is distributed in the hope that it will be useful,
---  but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN-
---  TABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-
---  As a special exception under Section 7 of GPL version 3, you are granted
---  additional permissions described in the GCC Runtime Library Exception,
---  version 3.1, as published by the Free Software Foundation.
-
-pragma License (GPL);
-
-with Ada.Strings.Fixed;
-with Ada.Text_IO;
-with System.Multiprocessors;
-with WisiToken.Generate;
-package body WisiToken.Generate.LR is
-
-   ----------
-   --  Body subprograms, alphabetical
-
-   function Count_Reduce (List : in Parse.LR.Minimal_Action_Lists.List) return 
Integer
-   is
-      Count : Integer := 0;
-   begin
-      for Item of List loop
-         if Item.Verb = Reduce then
-            Count := Count + 1;
-         end if;
-      end loop;
-      return Count;
-   end Count_Reduce;
-
-   function Find
-     (Symbol      : in Token_ID;
-      Action_List : in Action_Node_Ptr)
-     return Action_Node_Ptr
-   is
-      Action_Node : Action_Node_Ptr := Action_List;
-   begin
-      while Action_Node /= null loop
-         if Action_Node.Symbol = Symbol then
-            return Action_Node;
-         end if;
-         Action_Node := Action_Node.Next;
-      end loop;
-
-      return null;
-   end Find;
-
-   procedure Terminal_Sequence
-     (Grammar       : in     WisiToken.Productions.Prod_Arrays.Vector;
-      Descriptor    : in     WisiToken.Descriptor;
-      All_Sequences : in out Token_Sequence_Arrays.Vector;
-      All_Set       : in out Token_ID_Set;
-      Recursing     : in out Token_ID_Set;
-      Nonterm       : in     Token_ID)
-   is
-      use Ada.Containers;
-      Prod : Productions.Instance renames Grammar (Nonterm);
-
-      Temp              : Token_Sequence_Arrays.Vector;
-      Min_Length        : Count_Type := Count_Type'Last;
-      Skipped_Recursive : Boolean    := False;
-   begin
-      --  We get here because All_Sequences (Nonterm) has not been comptued
-      --  yet. Attempt to compute All_Sequences (Nonterm); if successful, set
-      --  All_Set (Nonterm) True.
-
-      --  First fill Temp with terminals from each production for Nonterm.
-      for L in Prod.RHSs.First_Index .. Prod.RHSs.Last_Index loop
-
-         if Prod.RHSs (L).Tokens.Length = 0 then
-            All_Set (Nonterm) := True;
-
-            if Trace_Generate > Detail then
-               Ada.Text_IO.Put_Line (Image (Nonterm, Descriptor) & " => ()");
-            end if;
-
-            return;
-         end if;
-
-         if Prod.RHSs (L).Tokens (1) = Nonterm then
-            --  The first RHS token = LHS; a recursive list. This will never be
-            --  the shortest production, so just skip it.
-            null;
-
-         else
-            declare
-               Sequence : Token_ID_Arrays.Vector;
-            begin
-               for ID of Prod.RHSs (L).Tokens loop
-                  if ID in Descriptor.First_Terminal .. 
Descriptor.Last_Terminal then
-                     Sequence.Append (ID);
-
-                  else
-                     if not All_Set (ID) then
-                        if Recursing (ID) then
-                           --  This nonterm is mutually recursive with some 
other. This
-                           --  production will never be the shortest unless 
it's the only one,
-                           --  so skip it.
-                           if Trace_Generate > Detail then
-                              Ada.Text_IO.Put_Line (Image (ID, Descriptor) & " 
mutual recurse skipped");
-                           end if;
-                           Skipped_Recursive := True;
-                           goto Skip;
-                        else
-                           Recursing (ID) := True;
-                           if Trace_Generate > Detail then
-                              Ada.Text_IO.Put_Line (Image (ID, Descriptor) & " 
recurse");
-                           end if;
-                           Terminal_Sequence (Grammar, Descriptor, 
All_Sequences, All_Set, Recursing, ID);
-                           Recursing (ID) := False;
-
-                           if not All_Set (ID) then
-                              --  abandoned because of recursion
-                              Skipped_Recursive := True;
-                              goto Skip;
-                           end if;
-                        end if;
-                     end if;
-                     Sequence.Append (All_Sequences (ID));
-                  end if;
-               end loop;
-
-               if Trace_Generate > Detail then
-                  Ada.Text_IO.Put_Line (Image (Nonterm, Descriptor) & " -> " & 
Image (Sequence, Descriptor));
-               end if;
-               Temp.Append (Sequence);
-            end;
-         end if;
-
-         <<Skip>>
-         null;
-      end loop;
-
-      --  Now find the minimum length.
-      if Temp.Length = 0 and Skipped_Recursive then
-         --  better luck next time.
-         return;
-      end if;
-
-      for S of Temp loop
-         if S.Length <= Min_Length then
-            Min_Length := S.Length;
-
-            All_Sequences (Nonterm) := S;
-         end if;
-      end loop;
-
-      if Trace_Generate > Detail then
-         Ada.Text_IO.Put_Line (Image (Nonterm, Descriptor) & " ==> " & Image 
(All_Sequences (Nonterm), Descriptor));
-      end if;
-
-      All_Set (Nonterm) := True;
-   end Terminal_Sequence;
-
-   ----------
-   --  Public subprograms, declaration order
-
-   procedure Put
-     (Item       : in Conflict_Lists.List;
-      File       : in Ada.Text_IO.File_Type;
-      Descriptor : in WisiToken.Descriptor)
-   is begin
-      for Conflict of Item loop
-         Ada.Text_IO.Put_Line (File, Image (Conflict, Descriptor));
-      end loop;
-   end Put;
-
-   procedure Add_Action
-     (Symbol               : in     Token_ID;
-      Action               : in     Parse_Action_Rec;
-      Action_List          : in out Action_Node_Ptr;
-      Closure              : in     LR1_Items.Item_Set;
-      Grammar              : in     WisiToken.Productions.Prod_Arrays.Vector;
-      Has_Empty_Production : in     Token_ID_Set;
-      First_Nonterm_Set    : in     Token_Array_Token_Set;
-      Conflicts            : in out Conflict_Lists.List;
-      Descriptor           : in     WisiToken.Descriptor)
-   is
-      Matching_Action : constant Action_Node_Ptr := Find (Symbol, Action_List);
-   begin
-      if Trace_Generate > Outline then
-         Ada.Text_IO.Put (Image (Symbol, Descriptor) & " => ");
-         Put (Descriptor, Action);
-         Ada.Text_IO.New_Line;
-      end if;
-
-      if Matching_Action /= null then
-         if Equal (Matching_Action.Action.Item, Action) then
-            --  Matching_Action is identical to Action, so there is no
-            --  conflict; just don't add it again.
-            if Trace_Generate > Outline then
-               Ada.Text_IO.Put_Line (" - already present");
-            end if;
-            return;
-         else
-            --  There is a conflict. Report it and add it, so the
-            --  generalized parser can follow both paths
-            declare
-               --  Enforce canonical Shift/Reduce or Accept/Reduce
-               --  order, to simplify searching and code generation.
-               Action_A : constant Parse_Action_Rec :=
-                 (if Action.Verb in Shift | Accept_It then Action else 
Matching_Action.Action.Item);
-
-               Action_B : constant Parse_Action_Rec :=
-                 (if Action.Verb in Shift | Accept_It then 
Matching_Action.Action.Item else Action);
-
-               New_Conflict : constant Conflict :=
-                 (Action_A    => Action_A.Verb,
-                  Action_B    => Action_B.Verb,
-                  LHS_A       => Find
-                    (Closure, Action_A, Symbol, Grammar, Has_Empty_Production, 
First_Nonterm_Set, Descriptor),
-                  LHS_B       => Find
-                    (Closure, Action_B, Symbol, Grammar, Has_Empty_Production, 
First_Nonterm_Set, Descriptor),
-                  State_Index => Closure.State,
-                  On          => Symbol);
-            begin
-               if not Is_Present (New_Conflict, Conflicts) then
-                  --  The same conflict may occur in a different
-                  --  item set. Only add it to conflicts once.
-                  Conflicts.Append (New_Conflict);
-
-                  if Trace_Generate > Outline then
-                     Ada.Text_IO.Put_Line (" - conflict added: " & Image 
(New_Conflict, Descriptor));
-                  end if;
-               else
-                  if Trace_Generate > Outline then
-                     Ada.Text_IO.Put_Line (" - conflict duplicate: " & Image 
(New_Conflict, Descriptor));
-                  end if;
-               end if;
-
-               --  More than two actions can occur; see triple_conflict.wy. We 
make
-               --  that an error, since the grammar will be better off without 
them.
-               --  But keep going; the full parse table output will be needed 
to fix
-               --  the excess conflict.
-               if Matching_Action.Action.Next /= null then
-                  if Matching_Action.Action.Item = Action or 
Matching_Action.Action.Next.Item = Action then
-                     if Trace_Generate > Outline then
-                        Ada.Text_IO.Put_Line (" - conflict duplicate");
-                     end if;
-                  else
-                     WisiToken.Generate.Put_Error
-                       ("More than two actions on " & Image (Symbol, 
Descriptor) &
-                          " in state" & State_Index'Image (Closure.State));
-                  end if;
-               end if;
-
-               if Action.Verb = Shift then
-                  Matching_Action.Action := new Parse_Action_Node'(Action, 
Matching_Action.Action);
-               else
-                  Matching_Action.Action.Next := new 
Parse_Action_Node'(Action, Matching_Action.Action.Next);
-               end if;
-            end;
-         end if;
-      else
-         WisiToken.Parse.LR.Add (Action_List, Symbol, Action);
-      end if;
-   end Add_Action;
-
-   procedure Add_Actions
-     (Closure              : in     LR1_Items.Item_Set;
-      Table                : in out Parse_Table;
-      Grammar              : in     WisiToken.Productions.Prod_Arrays.Vector;
-      Has_Empty_Production : in     Token_ID_Set;
-      First_Nonterm_Set    : in     Token_Array_Token_Set;
-      Conflicts            : in out Conflict_Lists.List;
-      Descriptor           : in     WisiToken.Descriptor)
-   is
-      use WisiToken.Token_ID_Arrays;
-
-      State : constant State_Index := Closure.State;
-   begin
-      if Trace_Generate > Outline then
-         Ada.Text_IO.Put_Line ("adding actions for state" & State_Index'Image 
(State));
-      end if;
-
-      for Item of Closure.Set loop
-         if Item.Dot = No_Element then
-            --  Pointer is at the end of the production; add a reduce action.
-
-            Add_Lookahead_Actions
-              (Item, Table.States (State).Action_List, Grammar, 
Has_Empty_Production, First_Nonterm_Set,
-               Conflicts, Closure, Descriptor);
-
-         elsif Element (Item.Dot) in Descriptor.First_Terminal .. 
Descriptor.Last_Terminal then
-            --  Dot is before a terminal token.
-            declare
-               use all type Ada.Containers.Count_Type;
-
-               Dot_ID : constant Token_ID := Element (Item.Dot);
-               --  ID of token after Item.Dot
-
-               Goto_State : constant Unknown_State_Index := 
LR1_Items.Goto_State (Closure, Dot_ID);
-            begin
-               if Dot_ID = Descriptor.EOF_ID then
-                  --  This is the start symbol production with dot before EOF.
-                  declare
-                     P_ID : constant Production_ID := Item.Prod;
-                     RHS  : Productions.Right_Hand_Side renames Grammar 
(P_ID.LHS).RHSs (P_ID.RHS);
-                  begin
-                     Add_Action
-                       (Dot_ID,
-                        (Accept_It, P_ID, RHS.Action, RHS.Check, 
RHS.Tokens.Length - 1),
-                        --  EOF is not pushed on stack in parser, because the 
action for EOF
-                        --  is Accept, not Shift.
-                        Table.States (State).Action_List, Closure,
-                        Grammar, Has_Empty_Production, First_Nonterm_Set, 
Conflicts, Descriptor);
-                  end;
-               else
-                  if Goto_State /= Unknown_State then
-                     Add_Action
-                       (Dot_ID,
-                        (Shift, Goto_State),
-                        Table.States (State).Action_List,
-                        Closure, Grammar, Has_Empty_Production, 
First_Nonterm_Set, Conflicts, Descriptor);
-                  end if;
-               end if;
-            end;
-         else
-            --  Dot is before a non-terminal token; no action.
-            if Trace_Generate > Outline then
-               Ada.Text_IO.Put_Line (Image (Element (Item.Dot), Descriptor) & 
" => no action");
-            end if;
-         end if;
-      end loop;
-
-      --  Place a default error action at the end of every state.
-      --  (it should always have at least one action already).
-      declare
-         --  The default action, when nothing else matches an input
-         Default_Action : constant Action_Node :=
-           --  The symbol here is actually irrelevant; it is the
-           --  position as the last on a state's action list that makes
-           --  it the default.
-           (Symbol => Invalid_Token_ID,
-            Action => new Parse_Action_Node'(Parse_Action_Rec'(Verb => 
WisiToken.Parse.LR.Error), null),
-            Next   => null);
-
-         Last_Action : Action_Node_Ptr := Table.States (State).Action_List;
-      begin
-         if Last_Action = null then
-            --  This happens if the first production in the grammar is
-            --  not the start symbol production.
-            --
-            --  It also happens when the start symbol production does
-            --  not have an explicit EOF, or when there is more than
-            --  one production that has the start symbol on the left
-            --  hand side.
-            --
-            --  It also happens when the grammar is bad, for example:
-            --
-            --  declarations <= declarations & declaration
-            --
-            --  without 'declarations <= declaration'.
-            --
-            --  We continue generating the grammar, in order to help the user
-            --  debug this issue.
-            WisiToken.Generate.Error := True;
-
-            Ada.Text_IO.Put_Line
-              (Ada.Text_IO.Current_Error, "Error: state" & State_Index'Image 
(State) &
-                 " has no actions; bad grammar, or " &
-                 "first production in grammar must be the only start symbol 
production, " &
-                 "and it must must have an explicit EOF.");
-         else
-            while Last_Action.Next /= null loop
-               Last_Action := Last_Action.Next;
-            end loop;
-            Last_Action.Next := new Action_Node'(Default_Action);
-         end if;
-      end;
-
-      for Item of Closure.Goto_List loop
-         if Item.Symbol in Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal then
-            Add_Goto (Table.States (State), Item.Symbol, Item.State); -- note 
list is already sorted.
-         end if;
-      end loop;
-   end Add_Actions;
-
-   procedure Add_Lookahead_Actions
-     (Item                 : in     LR1_Items.Item;
-      Action_List          : in out Action_Node_Ptr;
-      Grammar              : in     WisiToken.Productions.Prod_Arrays.Vector;
-      Has_Empty_Production : in     Token_ID_Set;
-      First_Nonterm_Set    : in     Token_Array_Token_Set;
-      Conflicts            : in out Conflict_Lists.List;
-      Closure              : in     LR1_Items.Item_Set;
-      Descriptor           : in     WisiToken.Descriptor)
-   is
-      Prod   : Productions.Instance renames Grammar (Item.Prod.LHS);
-      RHS    : Productions.Right_Hand_Side renames Prod.RHSs (Item.Prod.RHS);
-      Action : constant Parse_Action_Rec := (Reduce, Item.Prod, RHS.Action, 
RHS.Check, RHS.Tokens.Length);
-   begin
-      if Trace_Generate > Outline then
-         Ada.Text_IO.Put_Line ("processing lookaheads");
-      end if;
-
-      --  We ignore propagate lookaheads here.
-      for Lookahead in Item.Lookaheads'Range loop
-         if Item.Lookaheads (Lookahead) then
-            if Lookahead = Descriptor.First_Nonterminal then
-               null;
-            else
-               Add_Action
-                 (Lookahead, Action, Action_List, Closure, Grammar,
-                  Has_Empty_Production, First_Nonterm_Set, Conflicts, 
Descriptor);
-            end if;
-         end if;
-      end loop;
-   end Add_Lookahead_Actions;
-
-   procedure Delete_Known
-     (Conflicts       : in out Conflict_Lists.List;
-      Known_Conflicts : in out Conflict_Lists.List)
-   is
-      --  Delete all elements in Conflicts that match an element in
-      --  Known_Conflicts. There can be more than one Conflict that
-      --  match one Known_Conflict.
-      use Conflict_Lists;
-      Known      : Cursor  := Known_Conflicts.First;
-      Next_Known : Cursor;
-   begin
-      loop
-         exit when Known = No_Element;
-         Next_Known := Next (Known);
-         declare
-            I      : Cursor  := Conflicts.First;
-            Next_I : Cursor;
-            Used   : Boolean := False;
-         begin
-            loop
-               exit when I = No_Element;
-               Next_I := Next (I);
-               if Match (Element (Known), Conflicts.Constant_Reference (I)) 
then
-                  Delete (Conflicts, I);
-                  Used := True;
-               end if;
-               I := Next_I;
-            end loop;
-
-            if Used then
-               Delete (Known_Conflicts, Known);
-            end if;
-         end;
-         Known := Next_Known;
-      end loop;
-   end Delete_Known;
-
-   function Find
-     (Closure              : in LR1_Items.Item_Set;
-      Action               : in Parse_Action_Rec;
-      Lookahead            : in Token_ID;
-      Grammar              : in WisiToken.Productions.Prod_Arrays.Vector;
-      Has_Empty_Production : in Token_ID_Set;
-      First                : in Token_Array_Token_Set;
-      Descriptor           : in WisiToken.Descriptor)
-     return Token_ID
-   is
-      use WisiToken.Token_ID_Arrays;
-
-      ID_I : Cursor;
-   begin
-      case Action.Verb is
-      when Reduce | Accept_It =>
-         --  If the nonterm produced by the reduce is the LHS of the state
-         --  production, use it.
-         for Item of Closure.Set loop
-            if LR1_Items.In_Kernel (Grammar, Descriptor, Item) and
-              Action.Production.LHS = Item.Prod.LHS
-            then
-               return Item.Prod.LHS;
-            end if;
-         end loop;
-
-         --  The reduce nonterm is after Dot in a state production; find which
-         --  one, use that.
-         for Item of Closure.Set loop
-            if LR1_Items.In_Kernel (Grammar, Descriptor, Item) then
-               ID_I := Item.Dot;
-               loop
-                  if ID_I = No_Element then
-                     if Item.Lookaheads (Lookahead) then
-                        return Item.Prod.LHS;
-                     end if;
-                  else
-                     declare
-                        Dot_ID : Token_ID renames Element (ID_I);
-                     begin
-                        if Dot_ID = Lookahead or
-                          (Dot_ID in Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal and then
-                             First (Dot_ID, Lookahead))
-                        then
-                           return Item.Prod.LHS;
-                        end if;
-                        exit when Dot_ID in Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal and then
-                          not Has_Empty_Production (Dot_ID);
-                     end;
-                  end if;
-
-                  exit when ID_I = No_Element;
-                  Next (ID_I);
-               end loop;
-            end if;
-         end loop;
-
-      when Shift =>
-
-         for Item of Closure.Set loop
-            --  Lookahead (the token shifted) is starting a nonterm in a state
-            --  production; it is in First of that nonterm.
-            if LR1_Items.In_Kernel (Grammar, Descriptor, Item) then
-               ID_I := Item.Dot;
-               loop
-                  exit when ID_I = No_Element;
-                  declare
-                     Dot_ID : Token_ID renames Element (ID_I);
-                  begin
-                     if Dot_ID = Lookahead or
-                       (Dot_ID in Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal and then
-                          First (Dot_ID, Lookahead))
-                     then
-                        return Item.Prod.LHS;
-                     end if;
-
-                     exit when Dot_ID in Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal and then
-                       not Has_Empty_Production (Dot_ID);
-                  end;
-
-                  Next (ID_I);
-               end loop;
-            end if;
-         end loop;
-
-      when WisiToken.Parse.LR.Error =>
-         raise SAL.Programmer_Error;
-      end case;
-
-      Ada.Text_IO.Put_Line
-        ("item for " & Image (Action, Descriptor) & " on " & Image (Lookahead, 
Descriptor) & " not found in");
-      LR1_Items.Put (Grammar, Descriptor, Closure, Kernel_Only => True);
-      raise SAL.Programmer_Error;
-   end Find;
-
-   function Image (Item : in Conflict; Descriptor : in WisiToken.Descriptor) 
return String
-   is begin
-      return
-        ("%conflict " &
-           Conflict_Parse_Actions'Image (Item.Action_A) & "/" &
-           Conflict_Parse_Actions'Image (Item.Action_B) & " in state " &
-           Image (Item.LHS_A, Descriptor) & ", " &
-           Image (Item.LHS_B, Descriptor) &
-           " on token " & Image (Item.On, Descriptor) &
-           " (" & State_Index'Image (Item.State_Index) & ")"); -- state number 
last for easier delete
-   end Image;
-
-   function Is_Present (Item : in Conflict; Conflicts : in 
Conflict_Lists.List) return Boolean
-   is
-      use Conflict_Lists;
-      I : Cursor := Conflicts.First;
-   begin
-      loop
-         exit when I = No_Element;
-         if Match (Item, Conflicts.Constant_Reference (I)) then
-            return True;
-         end if;
-         I := Next (I);
-      end loop;
-      return False;
-   end Is_Present;
-
-   function Match (Known : in Conflict; Item : in 
Conflict_Lists.Constant_Reference_Type) return Boolean
-   is begin
-      --  Ignore State_Index. Actions are in canonical order; enforced
-      --  in Add_Action above. For reduce/reduce, LHS_A, LHS_B are not
-      --  in canonical order.
-      return
-        Known.Action_A = Item.Action_A and
-        Known.Action_B = Item.Action_B and
-        ((Known.LHS_A = Item.LHS_A and Known.LHS_B = Item.LHS_B) or
-           (Known.LHS_B = Item.LHS_A and Known.LHS_A = Item.LHS_B)) and
-        Known.On = Item.On;
-   end Match;
-
-   procedure Compute_Minimal_Terminal_Sequences
-     (Grammar    : in     WisiToken.Productions.Prod_Arrays.Vector;
-      Descriptor : in     WisiToken.Descriptor;
-      Result     : in out Token_Sequence_Arrays.Vector)
-   is
-      --  Result (ID).Length = 0 is a valid sequence (ie the nonterminal can
-      --  be empty), so we use an auxilliary array to track whether Result
-      --  (ID) has been computed.
-      --
-      --  We also need to detect mutual recursion, and incomplete grammars.
-
-      All_Set   : Token_ID_Set := (Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal => False);
-      Recursing : Token_ID_Set := (Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal => False);
-
-      Last_Count : Integer := 0;
-      This_Count : Integer;
-   begin
-      Result.Set_First (Descriptor.First_Nonterminal);
-      Result.Set_Last (Descriptor.Last_Nonterminal);
-
-      loop
-         exit when (for all B of All_Set => B);
-         for P of Grammar loop
-            if not All_Set (P.LHS) then
-               Terminal_Sequence (Grammar, Descriptor, Result, All_Set, 
Recursing, P.LHS);
-            end if;
-         end loop;
-         This_Count := Count (All_Set);
-         if This_Count = Last_Count then
-            raise Grammar_Error with "nonterminals have no minimum terminal 
sequence: " &
-              Image (All_Set, Descriptor, Inverted => True);
-         end if;
-         Last_Count := This_Count;
-      end loop;
-   end Compute_Minimal_Terminal_Sequences;
-
-   function Minimal_Terminal_First
-     (Grammar    : in     WisiToken.Productions.Prod_Arrays.Vector;
-      Descriptor : in     WisiToken.Descriptor)
-     return Token_Array_Token_ID
-   is
-      use all type Ada.Containers.Count_Type;
-      Minimal_Terminal_Sequences : Token_Sequence_Arrays.Vector;
-   begin
-      Compute_Minimal_Terminal_Sequences (Grammar, Descriptor, 
Minimal_Terminal_Sequences);
-
-      return Result : Token_Array_Token_ID (Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal) do
-         for ID in Result'Range loop
-            if Minimal_Terminal_Sequences (ID).Length = 0 then
-               Result (ID) := Invalid_Token_ID;
-            else
-               Result (ID) := Minimal_Terminal_Sequences 
(ID)(Minimal_Terminal_Sequences (ID).First);
-            end if;
-         end loop;
-      end return;
-   end Minimal_Terminal_First;
-
-   procedure Set_Minimal_Complete_Actions
-     (State                  : in out Parse_State;
-      Kernel                 : in     LR1_Items.Item_Set;
-      Minimal_Terminal_First : in     Token_Array_Token_ID;
-      Ancestors              : in     Token_Array_Token_Set;
-      Descriptor             : in     WisiToken.Descriptor;
-      Grammar                : in     WisiToken.Productions.Prod_Arrays.Vector)
-   is
-      use all type Ada.Containers.Count_Type;
-      use LR1_Items.Item_Lists;
-      use Token_ID_Arrays;
-
-      subtype Terminals is Token_ID range Descriptor.First_Terminal .. 
Descriptor.Last_Terminal;
-
-      Del  : LR1_Items.Item_Lists.Cursor;
-
-      procedure Delete_Same_Ancestor (List : in out LR1_Items.Item_Lists.List; 
Cur : in LR1_Items.Item_Lists.Cursor)
-      is
-         Cur_LHS : constant Token_ID := Element (Cur).Prod.LHS;
-
-         J : LR1_Items.Item_Lists.Cursor := List.First;
-      begin
-         loop
-            exit when not Has_Element (J);
-            if J = Cur then
-               Next (J);
-            else
-               declare
-                  Item : LR1_Items.Item renames Constant_Ref (J);
-               begin
-                  if Cur_LHS = Item.Prod.LHS or else Ancestors (Cur_LHS, 
Item.Prod.LHS) then
-                     Del := J;
-                     Next (J);
-                     List.Delete (Del);
-                  else
-                     Next (J);
-                  end if;
-               end;
-            end if;
-         end loop;
-      end Delete_Same_Ancestor;
-
-      procedure Append_No_Dup (Item : in Minimal_Action)
-      is begin
-         if not State.Minimal_Complete_Actions.Contains (Item) then
-            State.Minimal_Complete_Actions.Insert (Item);
-         end if;
-      end Append_No_Dup;
-
-      function Find_Action (List : in Action_Node_Ptr; ID : in Token_ID) 
return Minimal_Action
-      is
-         Node : Action_Node_Ptr := List;
-      begin
-         loop
-            if Node.Symbol = ID then
-               case Node.Action.Item.Verb is
-               when Shift =>
-                  return (Shift, ID, Node.Action.Item.State);
-               when Reduce =>
-                  --  Item.Dot is a nonterm that starts with a nullable 
nonterm; reduce
-                  --  to that first.
-                  return (Reduce, Node.Action.Item.Production.LHS, 0);
-               when Accept_It | WisiToken.Parse.LR.Error =>
-                  raise SAL.Programmer_Error;
-               end case;
-            end if;
-            Node := Node.Next;
-            exit when Node = null;
-         end loop;
-         raise SAL.Programmer_Error;
-      end Find_Action;
-
-      Working_Set : LR1_Items.Item_Lists.List := Kernel.Set;
-      I           : LR1_Items.Item_Lists.Cursor;
-
-   begin
-      --  First find items to delete.
-      --
-      --  This algorithm will return an empty Minimal_Complete_Actions in
-      --  the top level accept state.
-
-      I := Working_Set.First;
-      loop
-         exit when not Has_Element (I);
-         declare
-            Item : LR1_Items.Item renames Constant_Ref (I);
-            Prod : WisiToken.Productions.Instance renames Grammar 
(Item.Prod.LHS);
-         begin
-            if not Has_Element (Item.Dot) then
-               --  Completing this item also completes items that share an 
ancestor.
-               Delete_Same_Ancestor (Working_Set, I);
-               Next (I);
-
-            elsif To_Index (Item.Dot) = 2 and then
-              Prod.RHSs (Item.Prod.RHS).Tokens (1) = Item.Prod.LHS
-            then
-               --  Item is left-recursive; it can't be minimal.
-               Del := I;
-               Next (I);
-               Working_Set.Delete (Del);
-            else
-               Next (I);
-            end if;
-         end;
-      end loop;
-
-      for Item of Working_Set loop
-         if not Has_Element (Item.Dot) then
-            --  Item has no next terminal. Include a reduce action; the
-            --  Minimal_Terminal_First for the resulting state will be used.
-            Append_No_Dup
-              ((Reduce, Item.Prod.LHS,
-                Token_Count => Grammar (Item.Prod.LHS).RHSs 
(Item.Prod.RHS).Tokens.Length));
-         else
-            declare
-               ID : constant Token_ID := Element (Item.Dot);
-            begin
-               if ID /= Descriptor.EOF_ID then
-
-                  if ID in Terminals then
-                     Append_No_Dup (Find_Action (State.Action_List, ID));
-
-                  else
-                     if Minimal_Terminal_First (ID) = Invalid_Token_ID then
-                        --  Item.Dot is a nullable nonterm, include a reduce 
of the null
-                        --  nonterm, rather than a shift of the following 
terminal; recover
-                        --  must do the reduce first.
-                        Append_No_Dup ((Reduce, ID, Token_Count => 0));
-
-                     else
-                        Append_No_Dup (Find_Action (State.Action_List, 
Minimal_Terminal_First (ID)));
-                     end if;
-                  end if;
-               end if;
-            end;
-         end if;
-      end loop;
-   end Set_Minimal_Complete_Actions;
-
-   ----------
-   --  Parse table output
-
-   procedure Put_Text_Rep
-     (Table        : in Parse_Table;
-      File_Name    : in String;
-      Action_Names : in Names_Array_Array;
-      Check_Names  : in Names_Array_Array)
-   is
-      use Ada.Text_IO;
-      File : File_Type;
-   begin
-      --  Only space, semicolon, newline delimit object values. Bounds of
-      --  arrays output before each array, unless known from discriminants.
-      --  End of lists indicated by semicolon. Action, Check subprograms are
-      --  represented by True if present, False if not; look up the actual
-      --  address Table.Productions.
-
-      Create (File, Out_File, File_Name);
-
-      --  First the discriminants
-      Put (File,
-           Trimmed_Image (Table.State_First) & State_Index'Image 
(Table.State_Last) &
-             Token_ID'Image (Table.First_Terminal) & Token_ID'Image 
(Table.Last_Terminal) &
-             Token_ID'Image (Table.First_Nonterminal) & Token_ID'Image 
(Table.Last_Nonterminal));
-      New_Line (File);
-
-      for State of Table.States loop
-         Put (File, Integer'Image (State.Productions.First_Index));
-         Put (File, Integer'Image (State.Productions.Last_Index));
-         for Prod of State.Productions loop
-            Put (File, Token_ID'Image (Prod.LHS) & Integer'Image (Prod.RHS));
-         end loop;
-         New_Line (File);
-
-         declare
-            Node_I : Action_Node_Ptr := State.Action_List;
-         begin
-            loop
-               exit when Node_I = null;
-               --  Action first, so we know if Symbol is present (not when 
Error)
-               declare
-                  Node_J     : Parse_Action_Node_Ptr := Node_I.Action;
-                  Put_Symbol : Boolean               := True;
-               begin
-                  loop
-                     Put (File, Parse_Action_Verbs'Image (Node_J.Item.Verb));
-
-                     case Node_J.Item.Verb is
-                     when Shift =>
-                        Put (File, State_Index'Image (Node_J.Item.State));
-
-                     when Reduce | Accept_It =>
-                        Put (File, Token_ID'Image (Node_J.Item.Production.LHS) 
&
-                               Integer'Image (Node_J.Item.Production.RHS));
-
-                        if Action_Names (Node_J.Item.Production.LHS) /= null 
and then
-                          Action_Names 
(Node_J.Item.Production.LHS)(Node_J.Item.Production.RHS) /= null
-                        then
-                           Put (File, " true");
-                        else
-                           Put (File, " false");
-                        end if;
-                        if Check_Names (Node_J.Item.Production.LHS) /= null 
and then
-                          Check_Names 
(Node_J.Item.Production.LHS)(Node_J.Item.Production.RHS) /= null
-                        then
-                           Put (File, " true");
-                        else
-                           Put (File, " false");
-                        end if;
-
-                        Put (File, Ada.Containers.Count_Type'Image 
(Node_J.Item.Token_Count));
-
-                     when Parse.LR.Error =>
-                        --  Error action terminates the action list
-                        Put_Symbol := False;
-                     end case;
-
-                     Node_J := Node_J.Next;
-                     exit when Node_J = null;
-                     Put (File, ' ');
-                  end loop;
-                  Put (File, ';');
-                  if Put_Symbol then
-                     Put (File, Token_ID'Image (Node_I.Symbol));
-                  end if;
-               end;
-               New_Line (File);
-
-               Node_I := Node_I.Next;
-            end loop;
-         end;
-
-         declare
-            Node_I : Goto_Node_Ptr := State.Goto_List;
-         begin
-            loop
-               exit when Node_I = null;
-               Put (File, Token_ID'Image (Symbol (Node_I)) & State_Index'Image 
(Parse.LR.State (Node_I)));
-               Node_I := Next (Node_I);
-            end loop;
-            Put (File, ';');
-            New_Line (File);
-         end;
-
-         for Action of State.Minimal_Complete_Actions loop
-            Put (File, ' ' & Minimal_Verbs'Image (Action.Verb));
-            case Action.Verb is
-            when Shift =>
-               Put (File, Token_ID'Image (Action.ID) & State_Index'Image 
(Action.State));
-            when Reduce =>
-               Put (File, Token_ID'Image (Action.Nonterm) & 
Ada.Containers.Count_Type'Image (Action.Token_Count));
-            end case;
-         end loop;
-         Put (File, ';');
-         New_Line (File);
-      end loop;
-      Close (File);
-   end Put_Text_Rep;
-
-   procedure Put (Item : in Parse_Action_Rec; Descriptor : in 
WisiToken.Descriptor)
-   is
-      use Ada.Containers;
-      use Ada.Text_IO;
-   begin
-      case Item.Verb is
-      when Shift =>
-         Put ("shift and goto state" & State_Index'Image (Item.State));
-
-      when Reduce =>
-         Put
-           ("reduce" & Count_Type'Image (Item.Token_Count) & " tokens to " &
-              Image (Item.Production.LHS, Descriptor));
-      when Accept_It =>
-         Put ("accept it");
-      when Parse.LR.Error =>
-         Put ("ERROR");
-      end case;
-   end Put;
-
-   procedure Put (Item : in McKenzie_Param_Type; Descriptor : in 
WisiToken.Descriptor)
-   is
-      use Ada.Text_IO;
-   begin
-      Put_Line ("(Insert =>");
-      for I in Item.Insert'Range loop
-         Put (" " & Padded_Image (I, Descriptor) & " =>" & Natural'Image 
(Item.Insert (I)));
-         if I = Item.Insert'Last then
-            Put_Line (")");
-         else
-            Put_Line (",");
-         end if;
-      end loop;
-      Put_Line ("(Delete =>");
-      for I in Item.Delete'Range loop
-         Put (" " & Padded_Image (I, Descriptor) & " =>" & Natural'Image 
(Item.Delete (I)));
-         if I = Item.Delete'Last then
-            Put_Line (")");
-         else
-            Put_Line (",");
-         end if;
-      end loop;
-      Put_Line ("(Push_Back =>");
-      for I in Item.Delete'Range loop
-         Put (" " & Padded_Image (I, Descriptor) & " =>" & Natural'Image 
(Item.Delete (I)));
-         if I = Item.Delete'Last then
-            Put_Line (")");
-         else
-            Put_Line (",");
-         end if;
-      end loop;
-      Put_Line ("Ignore_Check_Fail =>" & Integer'Image 
(Item.Ignore_Check_Fail));
-      Put_Line ("Task_Count        =>" & 
System.Multiprocessors.CPU_Range'Image (Item.Task_Count));
-      Put_Line ("Cost_Limit        =>" & Integer'Image (Item.Cost_Limit));
-      Put_Line ("Check_Limit       =>" & Token_Index'Image (Item.Check_Limit));
-      Put_Line ("Check_Delta_Limit =>" & Integer'Image 
(Item.Check_Delta_Limit));
-      Put_Line ("Enqueue_Limit     =>" & Integer'Image (Item.Enqueue_Limit));
-   end Put;
-
-   procedure Put (Descriptor : in WisiToken.Descriptor; Item : in 
Parse_Action_Rec)
-   is
-      use Ada.Containers;
-      use Ada.Text_IO;
-   begin
-      case Item.Verb is
-      when Shift =>
-         Put ("shift and goto state" & State_Index'Image (Item.State));
-      when Reduce =>
-         Put
-           ("reduce" & Count_Type'Image (Item.Token_Count) & " tokens to " &
-              Image (Item.Production.LHS, Descriptor));
-         Put (" " & Trimmed_Image (Item.Production));
-      when Accept_It =>
-         Put ("accept it");
-         Put (" " & Trimmed_Image (Item.Production));
-      when Parse.LR.Error =>
-         Put ("ERROR");
-      end case;
-   end Put;
-
-   procedure Put (Descriptor : in WisiToken.Descriptor; Action : in 
Parse_Action_Node_Ptr)
-   is
-      use Ada.Text_IO;
-      Ptr    : Parse_Action_Node_Ptr   := Action;
-      Column : constant Positive_Count := Col;
-   begin
-      loop
-         Put (Descriptor, Ptr.Item);
-         Ptr := Ptr.Next;
-         exit when Ptr = null;
-         Put_Line (",");
-         Set_Col (Column);
-      end loop;
-   end Put;
-
-   procedure Put (Descriptor : in WisiToken.Descriptor; State : in Parse_State)
-   is
-      use all type Ada.Containers.Count_Type;
-      use Ada.Text_IO;
-      use Ada.Strings.Fixed;
-      Action_Ptr : Action_Node_Ptr := State.Action_List;
-      Goto_Ptr   : Goto_Node_Ptr   := State.Goto_List;
-      Need_Comma : Boolean := False;
-   begin
-      while Action_Ptr /= null loop
-         Put ("   ");
-         if Action_Ptr.Next = null then
-            Put ("default" & (Descriptor.Image_Width - 7) * ' ' & " => ");
-
-         elsif Action_Ptr.Action.Item.Verb /= Parse.LR.Error then
-            Put (Image (Action_Ptr.Symbol, Descriptor) &
-                   (Descriptor.Image_Width - Image (Action_Ptr.Symbol, 
Descriptor)'Length) * ' '
-                   & " => ");
-         end if;
-         Put (Descriptor, Action_Ptr.Action);
-         New_Line;
-         Action_Ptr := Action_Ptr.Next;
-      end loop;
-
-      if Goto_Ptr /= null then
-         New_Line;
-      end if;
-
-      while Goto_Ptr /= null loop
-         Put_Line
-           ("   " & Image (Symbol (Goto_Ptr), Descriptor) &
-              (Descriptor.Image_Width - Image (Symbol (Goto_Ptr), 
Descriptor)'Length) * ' ' &
-              " goto state" & State_Index'Image (Parse.LR.State (Goto_Ptr)));
-         Goto_Ptr := Next (Goto_Ptr);
-      end loop;
-
-      if State.Minimal_Complete_Actions.Length > 0 then
-         New_Line;
-         Put ("   Minimal_Complete_Actions => (");
-         for Action of State.Minimal_Complete_Actions loop
-            if Need_Comma then
-               Put (", ");
-            else
-               Need_Comma := True;
-            end if;
-            case Action.Verb is
-            when Shift =>
-               Put (Image (Action.ID, Descriptor));
-            when Reduce =>
-               Put (Image (Action.Nonterm, Descriptor));
-            end case;
-         end loop;
-         Put_Line (")");
-      end if;
-   end Put;
-
-   procedure Put_Parse_Table
-     (Table      : in Parse_Table_Ptr;
-      Title      : in String;
-      Grammar    : in WisiToken.Productions.Prod_Arrays.Vector;
-      Kernels    : in LR1_Items.Item_Set_List;
-      Ancestors  : in Token_Array_Token_Set;
-      Conflicts  : in Conflict_Lists.List;
-      Descriptor : in WisiToken.Descriptor)
-   is
-      use all type Ada.Containers.Count_Type;
-      use Ada.Text_IO;
-      Minimal_Complete_Multiple_Reduce : State_Index_Arrays.Vector;
-   begin
-      Put_Line ("Tokens:");
-      WisiToken.Put_Tokens (Descriptor);
-
-      New_Line;
-      Put_Line ("Productions:");
-      WisiToken.Productions.Put (Grammar, Descriptor);
-
-      if Table.McKenzie_Param.Cost_Limit /= Default_McKenzie_Param.Cost_Limit 
or
-          Table.McKenzie_Param.Check_Limit /= 
Default_McKenzie_Param.Check_Limit or
-          Table.McKenzie_Param.Check_Delta_Limit /= 
Default_McKenzie_Param.Check_Delta_Limit or
-          Table.McKenzie_Param.Enqueue_Limit /= 
Default_McKenzie_Param.Enqueue_Limit
-      then
-         New_Line;
-         Put_Line ("McKenzie:");
-         Put (Table.McKenzie_Param, Descriptor);
-      end if;
-
-      New_Line;
-      Put_Line ("Ancestors:");
-      for ID in Ancestors'Range (1) loop
-         if Any (Ancestors, ID) then
-            Put_Line (Image (ID, Descriptor) & " => " & Image (Slice 
(Ancestors, ID), Descriptor));
-         end if;
-      end loop;
-
-      New_Line;
-      Put_Line (Title & " Parse Table:");
-
-      for State_Index in Table.States'Range loop
-         LR1_Items.Put (Grammar, Descriptor, Kernels (State_Index), 
Kernel_Only => True, Show_Lookaheads => True);
-         New_Line;
-         Put (Descriptor, Table.States (State_Index));
-
-         if Count_Reduce (Table.States (State_Index).Minimal_Complete_Actions) 
> 1 then
-            Minimal_Complete_Multiple_Reduce.Append (State_Index);
-         end if;
-
-         if State_Index /= Table.States'Last then
-            New_Line;
-         end if;
-      end loop;
-
-      if Minimal_Complete_Multiple_Reduce.Length + Conflicts.Length > 0 then
-         New_Line;
-      end if;
-
-      if Minimal_Complete_Multiple_Reduce.Length > 0 then
-         Indent_Wrap
-           ("States with multiple reduce in Minimal_Complete_Action: " & Image 
(Minimal_Complete_Multiple_Reduce));
-      end if;
-
-      if Conflicts.Length > 0 then
-         declare
-            use Ada.Strings.Unbounded;
-            Last_State : Unknown_State_Index := Unknown_State;
-            Line : Unbounded_String := +"States with conflicts:";
-         begin
-            for Conflict of Conflicts loop
-               if Conflict.State_Index /= Last_State then
-                  Append (Line, State_Index'Image (Conflict.State_Index));
-                  Last_State := Conflict.State_Index;
-               end if;
-            end loop;
-            Indent_Wrap (-Line);
-         end;
-      end if;
-   end Put_Parse_Table;
-
-end WisiToken.Generate.LR;
+--  Abstract :
+--
+--  See spec.
+--
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
+--
+--  This library is free software;  you can redistribute it and/or modify it
+--  under terms of the  GNU General Public License  as published by the Free
+--  Software  Foundation;  either version 3,  or (at your  option) any later
+--  version. This library is distributed in the hope that it will be useful,
+--  but WITHOUT ANY WARRANTY;  without even the implied warranty of MERCHAN-
+--  TABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+--  As a special exception under Section 7 of GPL version 3, you are granted
+--  additional permissions described in the GCC Runtime Library Exception,
+--  version 3.1, as published by the Free Software Foundation.
+
+pragma License (GPL);
+
+with Ada.Strings.Fixed;
+with Ada.Text_IO;
+with System.Multiprocessors;
+with WisiToken.Generate;
+package body WisiToken.Generate.LR is
+
+   package RHS_Set is new SAL.Gen_Unbounded_Definite_Vectors (Natural, 
Boolean, Default_Element => False);
+   type Token_ID_RHS_Set is array (Token_ID range <>) of RHS_Set.Vector;
+
+   type Token_ID_Array_Positive is array (Token_ID range <>) of Positive;
+
+   ----------
+   --  Body subprograms, alphabetical
+
+   function Find
+     (Symbol      : in Token_ID;
+      Action_List : in Action_Node_Ptr)
+     return Action_Node_Ptr
+   is
+      Action_Node : Action_Node_Ptr := Action_List;
+   begin
+      while Action_Node /= null loop
+         if Action_Node.Symbol = Symbol then
+            return Action_Node;
+         end if;
+         Action_Node := Action_Node.Next;
+      end loop;
+
+      return null;
+   end Find;
+
+   function Min
+     (Item    : in RHS_Sequence_Arrays.Vector;
+      RHS_Set : in LR.RHS_Set.Vector)
+     return Integer
+   is
+      use all type Ada.Containers.Count_Type;
+      Min_Length : Ada.Containers.Count_Type := Ada.Containers.Count_Type'Last;
+      Min_RHS    : Natural                   := Natural'Last;
+   begin
+      for RHS in Item.First_Index .. Item.Last_Index loop
+         if RHS_Set (RHS) and then Min_Length > Item (RHS).Sequence.Length then
+               Min_Length := Item (RHS).Sequence.Length;
+               Min_RHS    := RHS;
+         end if;
+      end loop;
+      if Min_RHS = Natural'Last then
+         raise SAL.Programmer_Error with "nonterm has no minimum terminal 
sequence";
+      else
+         return Min_RHS;
+      end if;
+   end Min;
+
+   procedure Terminal_Sequence
+     (Grammar         : in     WisiToken.Productions.Prod_Arrays.Vector;
+      Descriptor      : in     WisiToken.Descriptor;
+      All_Sequences   : in out Minimal_Sequence_Array;
+      All_Set         : in out Token_ID_Set;
+      RHS_Set         : in out Token_ID_RHS_Set;
+      Recursing       : in out Token_ID_Set;
+      Recursing_Index : in out Token_ID_Array_Positive;
+      Nonterm         : in     Token_ID)
+   is
+      use Ada.Containers;
+      use Token_ID_Arrays;
+
+      subtype Terminals is Token_ID range Descriptor.First_Terminal .. 
Descriptor.Last_Terminal;
+
+      Prod : Productions.Instance renames Grammar (Nonterm);
+
+      Skipped_Recursive : Boolean := False;
+   begin
+      --  We get here because All_Sequences (Nonterm) has not been comptued
+      --  yet. Attempt to compute All_Sequences (Nonterm); it may not
+      --  succeed due to recursion. If successful, set All_Set (Nonterm)
+      --  True.
+      --
+      --  In a useful grammar, all direct and indirect recursive nonterms
+      --  have a non-recursive minimal terminal sequence; finding it will
+      --  break the recursion, allowing this algorithm to complete. This is
+      --  checked in Compute_Minimal_Terminal_Sequences.
+
+      --  Fill All_Sequences (Nonterm) with terminals from each production
+      --  for Nonterm. We set partial results so recursion can be resolved.
+      if All_Sequences (Nonterm).Length = 0 then
+         All_Sequences (Nonterm).Set_First_Last (Prod.RHSs.First_Index, 
Prod.RHSs.Last_Index); -- defaults empty
+         RHS_Set (Nonterm).Set_First_Last (Prod.RHSs.First_Index, 
Prod.RHSs.Last_Index); -- defaults False
+      end if;
+
+      for RHS in Prod.RHSs.First_Index .. Prod.RHSs.Last_Index loop
+         if not RHS_Set (Nonterm)(RHS) then
+            if Prod.RHSs (RHS).Tokens.Length = 0 then
+               RHS_Set (Nonterm)(RHS) := True;
+               if Trace_Generate > Extra then
+                  Ada.Text_IO.Put_Line (Trimmed_Image (Production_ID'(Nonterm, 
RHS)) & " => () empty");
+               end if;
+
+            else
+               for I in Prod.RHSs (RHS).Tokens.First_Index .. Prod.RHSs 
(RHS).Tokens.Last_Index loop
+                  Recursing_Index (Nonterm) := I;
+                  declare
+                     ID : Token_ID renames Prod.RHSs (RHS).Tokens (I);
+                  begin
+                     if ID in Terminals then
+                        All_Sequences (Nonterm) (RHS).Sequence.Append (ID);
+
+                     else
+                        if not All_Set (ID) then
+                           --  Need to compute some RHSs of ID
+
+                           if ID = Nonterm or Recursing (ID) then
+                              --  Nonterm is mutually recursive with itself or 
some other.
+                              All_Sequences (Nonterm)(RHS).Left_Recursive := I 
= Positive'First and
+                                (ID = Nonterm or Recursing_Index (ID) = 
Positive'First);
+
+                              if (for some RHS of RHS_Set (ID) => RHS) then
+                                 --  There is a minimal sequence for ID; use it
+                                 null;
+                              else
+                                 if Trace_Generate > Extra then
+                                    Ada.Text_IO.Put_Line
+                                      (Trimmed_Image (Production_ID'(Nonterm, 
RHS)) & "." & Trimmed_Image (I) & " => " &
+                                         (if ID = Nonterm
+                                          then "direct recursive"
+                                          else "indirect recursive " & Image 
(ID, Descriptor)));
+                                 end if;
+
+                                 All_Sequences (Nonterm)(RHS).Left_Recursive 
:= False;
+                                 All_Sequences (Nonterm)(RHS).Sequence.Clear;
+                                 goto Skip;
+                              end if;
+                           else
+                              Recursing (ID) := True;
+                              if Trace_Generate > Extra then
+                                 Ada.Text_IO.Put_Line (Trimmed_Image (ID) & " 
" & Image (ID, Descriptor) & " compute");
+                              end if;
+                              Terminal_Sequence
+                                (Grammar, Descriptor, All_Sequences, All_Set, 
RHS_Set, Recursing, Recursing_Index, ID);
+                              Recursing (ID) := False;
+
+                              if All_Set (ID) or else (for some RHS of RHS_Set 
(ID) => RHS) then
+                                 --  Found a minimal sequence for ID; use it
+                                 null;
+                              else
+                                 All_Sequences (Nonterm)(RHS).Sequence.Clear;
+                                 goto Skip;
+                              end if;
+                           end if;
+                        end if;
+                        declare
+                           Min_RHS : constant Integer := Min (All_Sequences 
(ID), RHS_Set (ID));
+                        begin
+                           All_Sequences (Nonterm)(RHS).Sequence.Append 
(All_Sequences (ID)(Min_RHS).Sequence);
+                        end;
+                     end if;
+                  end;
+               end loop;
+               RHS_Set (Nonterm)(RHS) := True;
+               if Trace_Generate > Extra then
+                  Ada.Text_IO.Put_Line
+                    (Trimmed_Image (Production_ID'(Nonterm, RHS)) & " => " &
+                       Image (All_Sequences (Nonterm)(RHS), Descriptor));
+               end if;
+            end if;
+         end if;
+         <<Skip>>
+         Skipped_Recursive := True;
+      end loop;
+
+      if Skipped_Recursive then
+         if (for some RHS of RHS_Set (Nonterm) => not RHS) then
+            --  Some RHSs are have unresolved recursion; we will
+            --  eventually try again when the recursion is resolved.
+            if Trace_Generate > Extra then
+               Ada.Text_IO.Put_Line
+                 (Trimmed_Image (Nonterm) & " " & Image (Nonterm, Descriptor) 
& " skipped some recursive");
+            end if;
+            return;
+         end if;
+      end if;
+
+      All_Set (Nonterm) := True;
+
+      if Trace_Generate > Extra then
+         Ada.Text_IO.Put_Line
+           (Trimmed_Image (Nonterm) & " " & Image (Nonterm, Descriptor) & " 
==> " &
+              Image (All_Sequences (Nonterm), Descriptor));
+      end if;
+   end Terminal_Sequence;
+
+   ----------
+   --  Public subprograms, declaration order
+
+   procedure Put
+     (Item       : in Conflict_Lists.List;
+      File       : in Ada.Text_IO.File_Type;
+      Descriptor : in WisiToken.Descriptor)
+   is begin
+      for Conflict of Item loop
+         Ada.Text_IO.Put_Line (File, Image (Conflict, Descriptor));
+      end loop;
+   end Put;
+
+   procedure Add_Action
+     (Symbol               : in     Token_ID;
+      Action               : in     Parse_Action_Rec;
+      Action_List          : in out Action_Node_Ptr;
+      Closure              : in     LR1_Items.Item_Set;
+      Grammar              : in     WisiToken.Productions.Prod_Arrays.Vector;
+      Has_Empty_Production : in     Token_ID_Set;
+      First_Nonterm_Set    : in     Token_Array_Token_Set;
+      Conflicts            : in out Conflict_Lists.List;
+      Descriptor           : in     WisiToken.Descriptor)
+   is
+      Matching_Action : constant Action_Node_Ptr := Find (Symbol, Action_List);
+   begin
+      if Trace_Generate > Outline then
+         Ada.Text_IO.Put (Image (Symbol, Descriptor) & " => ");
+         Put (Descriptor, Action);
+         Ada.Text_IO.New_Line;
+      end if;
+
+      if Matching_Action /= null then
+         if Equal (Matching_Action.Action.Item, Action) then
+            --  Matching_Action is identical to Action, so there is no
+            --  conflict; just don't add it again.
+            if Trace_Generate > Outline then
+               Ada.Text_IO.Put_Line (" - already present");
+            end if;
+            return;
+         else
+            --  There is a conflict. Report it and add it, so the
+            --  generalized parser can follow both paths
+            declare
+               --  Enforce canonical Shift/Reduce or Accept/Reduce
+               --  order, to simplify searching and code generation.
+               Action_A : constant Parse_Action_Rec :=
+                 (if Action.Verb in Shift | Accept_It then Action else 
Matching_Action.Action.Item);
+
+               Action_B : constant Parse_Action_Rec :=
+                 (if Action.Verb in Shift | Accept_It then 
Matching_Action.Action.Item else Action);
+
+               New_Conflict : constant Conflict :=
+                 (Action_A    => Action_A.Verb,
+                  Action_B    => Action_B.Verb,
+                  LHS_A       => Find
+                    (Closure, Action_A, Symbol, Grammar, Has_Empty_Production, 
First_Nonterm_Set, Descriptor),
+                  LHS_B       => Find
+                    (Closure, Action_B, Symbol, Grammar, Has_Empty_Production, 
First_Nonterm_Set, Descriptor),
+                  State_Index => Closure.State,
+                  On          => Symbol);
+            begin
+               if not Is_Present (New_Conflict, Conflicts) then
+                  --  The same conflict may occur in a different
+                  --  item set. Only add it to conflicts once.
+                  Conflicts.Append (New_Conflict);
+
+                  if Trace_Generate > Outline then
+                     Ada.Text_IO.Put_Line (" - conflict added: " & Image 
(New_Conflict, Descriptor));
+                  end if;
+               else
+                  if Trace_Generate > Outline then
+                     Ada.Text_IO.Put_Line (" - conflict duplicate: " & Image 
(New_Conflict, Descriptor));
+                  end if;
+               end if;
+
+               --  More than two actions can occur; see triple_conflict.wy. We 
make
+               --  that an error, since the grammar will be better off without 
them.
+               --  But keep going; the full parse table output will be needed 
to fix
+               --  the excess conflict.
+               if Matching_Action.Action.Next /= null then
+                  if Matching_Action.Action.Item = Action or 
Matching_Action.Action.Next.Item = Action then
+                     if Trace_Generate > Outline then
+                        Ada.Text_IO.Put_Line (" - conflict duplicate");
+                     end if;
+                  else
+                     WisiToken.Generate.Put_Error
+                       ("More than two actions on " & Image (Symbol, 
Descriptor) &
+                          " in state" & State_Index'Image (Closure.State));
+                  end if;
+               end if;
+
+               if Action.Verb = Shift then
+                  Matching_Action.Action := new Parse_Action_Node'(Action, 
Matching_Action.Action);
+               else
+                  Matching_Action.Action.Next := new 
Parse_Action_Node'(Action, Matching_Action.Action.Next);
+               end if;
+            end;
+         end if;
+      else
+         WisiToken.Parse.LR.Add (Action_List, Symbol, Action);
+      end if;
+   end Add_Action;
+
+   procedure Add_Actions
+     (Closure              : in     LR1_Items.Item_Set;
+      Table                : in out Parse_Table;
+      Grammar              : in     WisiToken.Productions.Prod_Arrays.Vector;
+      Has_Empty_Production : in     Token_ID_Set;
+      First_Nonterm_Set    : in     Token_Array_Token_Set;
+      Conflicts            : in out Conflict_Lists.List;
+      Descriptor           : in     WisiToken.Descriptor)
+   is
+      use WisiToken.Token_ID_Arrays;
+
+      State : constant State_Index := Closure.State;
+   begin
+      if Trace_Generate > Outline then
+         Ada.Text_IO.Put_Line ("adding actions for state" & State_Index'Image 
(State));
+      end if;
+
+      for Item of Closure.Set loop
+         if Item.Dot = No_Element then
+            --  Pointer is at the end of the production; add a reduce action.
+
+            Add_Lookahead_Actions
+              (Item, Table.States (State).Action_List, Grammar, 
Has_Empty_Production, First_Nonterm_Set,
+               Conflicts, Closure, Descriptor);
+
+         elsif Element (Item.Dot) in Descriptor.First_Terminal .. 
Descriptor.Last_Terminal then
+            --  Dot is before a terminal token.
+            declare
+               use all type Ada.Containers.Count_Type;
+
+               Dot_ID : constant Token_ID := Element (Item.Dot);
+               --  ID of token after Item.Dot
+
+               Goto_State : constant Unknown_State_Index := 
LR1_Items.Goto_State (Closure, Dot_ID);
+            begin
+               if Dot_ID = Descriptor.EOI_ID then
+                  --  This is the start symbol production with dot before EOF.
+                  declare
+                     P_ID : constant Production_ID := Item.Prod;
+                     RHS  : Productions.Right_Hand_Side renames Grammar 
(P_ID.LHS).RHSs (P_ID.RHS);
+                  begin
+                     Add_Action
+                       (Dot_ID,
+                        (Accept_It, P_ID, RHS.Action, RHS.Check, 
RHS.Tokens.Length - 1),
+                        --  EOF is not pushed on stack in parser, because the 
action for EOF
+                        --  is Accept, not Shift.
+                        Table.States (State).Action_List, Closure,
+                        Grammar, Has_Empty_Production, First_Nonterm_Set, 
Conflicts, Descriptor);
+                  end;
+               else
+                  if Goto_State /= Unknown_State then
+                     Add_Action
+                       (Dot_ID,
+                        (Shift, Goto_State),
+                        Table.States (State).Action_List,
+                        Closure, Grammar, Has_Empty_Production, 
First_Nonterm_Set, Conflicts, Descriptor);
+                  end if;
+               end if;
+            end;
+         else
+            --  Dot is before a non-terminal token; no action.
+            if Trace_Generate > Outline then
+               Ada.Text_IO.Put_Line (Image (Element (Item.Dot), Descriptor) & 
" => no action");
+            end if;
+         end if;
+      end loop;
+
+      --  Place a default error action at the end of every state.
+      --  (it should always have at least one action already).
+      declare
+         --  The default action, when nothing else matches an input
+         Default_Action : constant Action_Node :=
+           --  The symbol here is actually irrelevant; it is the
+           --  position as the last on a state's action list that makes
+           --  it the default.
+           (Symbol => Invalid_Token_ID,
+            Action => new Parse_Action_Node'(Parse_Action_Rec'(Verb => 
WisiToken.Parse.LR.Error), null),
+            Next   => null);
+
+         Last_Action : Action_Node_Ptr := Table.States (State).Action_List;
+      begin
+         if Last_Action = null then
+            --  This happens if the first production in the grammar is
+            --  not the start symbol production.
+            --
+            --  It also happens when the start symbol production does
+            --  not have an explicit EOF, or when there is more than
+            --  one production that has the start symbol on the left
+            --  hand side.
+            --
+            --  It also happens when the grammar is bad, for example:
+            --
+            --  declarations <= declarations & declaration
+            --
+            --  without 'declarations <= declaration'.
+            --
+            --  We continue generating the grammar, in order to help the user
+            --  debug this issue.
+            WisiToken.Generate.Error := True;
+
+            Ada.Text_IO.Put_Line
+              (Ada.Text_IO.Current_Error, "Error: state" & State_Index'Image 
(State) &
+                 " has no actions; bad grammar, or " &
+                 "first production in grammar must be the only start symbol 
production, " &
+                 "and it must must have an explicit EOF.");
+         else
+            while Last_Action.Next /= null loop
+               Last_Action := Last_Action.Next;
+            end loop;
+            Last_Action.Next := new Action_Node'(Default_Action);
+         end if;
+      end;
+
+      for Item of Closure.Goto_List loop
+         if Item.Symbol in Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal then
+            Add_Goto (Table.States (State), Item.Symbol, Item.State); -- note 
list is already sorted.
+         end if;
+      end loop;
+   end Add_Actions;
+
+   procedure Add_Lookahead_Actions
+     (Item                 : in     LR1_Items.Item;
+      Action_List          : in out Action_Node_Ptr;
+      Grammar              : in     WisiToken.Productions.Prod_Arrays.Vector;
+      Has_Empty_Production : in     Token_ID_Set;
+      First_Nonterm_Set    : in     Token_Array_Token_Set;
+      Conflicts            : in out Conflict_Lists.List;
+      Closure              : in     LR1_Items.Item_Set;
+      Descriptor           : in     WisiToken.Descriptor)
+   is
+      Prod   : Productions.Instance renames Grammar (Item.Prod.LHS);
+      RHS    : Productions.Right_Hand_Side renames Prod.RHSs (Item.Prod.RHS);
+      Action : constant Parse_Action_Rec := (Reduce, Item.Prod, RHS.Action, 
RHS.Check, RHS.Tokens.Length);
+   begin
+      if Trace_Generate > Outline then
+         Ada.Text_IO.Put_Line ("processing lookaheads");
+      end if;
+
+      --  We ignore propagate lookaheads here.
+      for Lookahead in Item.Lookaheads'Range loop
+         if Item.Lookaheads (Lookahead) then
+            if Lookahead = Descriptor.First_Nonterminal then
+               null;
+            else
+               Add_Action
+                 (Lookahead, Action, Action_List, Closure, Grammar,
+                  Has_Empty_Production, First_Nonterm_Set, Conflicts, 
Descriptor);
+            end if;
+         end if;
+      end loop;
+   end Add_Lookahead_Actions;
+
+   procedure Delete_Known
+     (Conflicts       : in out Conflict_Lists.List;
+      Known_Conflicts : in out Conflict_Lists.List)
+   is
+      --  Delete all elements in Conflicts that match an element in
+      --  Known_Conflicts. There can be more than one Conflict that
+      --  match one Known_Conflict.
+      use Conflict_Lists;
+      Known      : Cursor  := Known_Conflicts.First;
+      Next_Known : Cursor;
+   begin
+      loop
+         exit when Known = No_Element;
+         Next_Known := Next (Known);
+         declare
+            I      : Cursor  := Conflicts.First;
+            Next_I : Cursor;
+            Used   : Boolean := False;
+         begin
+            loop
+               exit when I = No_Element;
+               Next_I := Next (I);
+               if Match (Element (Known), Conflicts.Constant_Reference (I)) 
then
+                  Delete (Conflicts, I);
+                  Used := True;
+               end if;
+               I := Next_I;
+            end loop;
+
+            if Used then
+               Delete (Known_Conflicts, Known);
+            end if;
+         end;
+         Known := Next_Known;
+      end loop;
+   end Delete_Known;
+
+   function Find
+     (Closure              : in LR1_Items.Item_Set;
+      Action               : in Parse_Action_Rec;
+      Lookahead            : in Token_ID;
+      Grammar              : in WisiToken.Productions.Prod_Arrays.Vector;
+      Has_Empty_Production : in Token_ID_Set;
+      First                : in Token_Array_Token_Set;
+      Descriptor           : in WisiToken.Descriptor)
+     return Token_ID
+   is
+      use WisiToken.Token_ID_Arrays;
+
+      ID_I : Cursor;
+   begin
+      case Action.Verb is
+      when Reduce | Accept_It =>
+         --  If the nonterm produced by the reduce is the LHS of the state
+         --  production, use it.
+         for Item of Closure.Set loop
+            if LR1_Items.In_Kernel (Grammar, Descriptor, Item) and
+              Action.Production.LHS = Item.Prod.LHS
+            then
+               return Item.Prod.LHS;
+            end if;
+         end loop;
+
+         --  The reduce nonterm is after Dot in a state production; find which
+         --  one, use that.
+         for Item of Closure.Set loop
+            if LR1_Items.In_Kernel (Grammar, Descriptor, Item) then
+               ID_I := Item.Dot;
+               loop
+                  if ID_I = No_Element then
+                     if Item.Lookaheads (Lookahead) then
+                        return Item.Prod.LHS;
+                     end if;
+                  else
+                     declare
+                        Dot_ID : Token_ID renames Element (ID_I);
+                     begin
+                        if Dot_ID = Lookahead or
+                          (Dot_ID in Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal and then
+                             First (Dot_ID, Lookahead))
+                        then
+                           return Item.Prod.LHS;
+                        end if;
+                        exit when Dot_ID in Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal and then
+                          not Has_Empty_Production (Dot_ID);
+                     end;
+                  end if;
+
+                  exit when ID_I = No_Element;
+                  Next (ID_I);
+               end loop;
+            end if;
+         end loop;
+
+      when Shift =>
+
+         for Item of Closure.Set loop
+            --  Lookahead (the token shifted) is starting a nonterm in a state
+            --  production; it is in First of that nonterm.
+            if LR1_Items.In_Kernel (Grammar, Descriptor, Item) then
+               ID_I := Item.Dot;
+               loop
+                  exit when ID_I = No_Element;
+                  declare
+                     Dot_ID : Token_ID renames Element (ID_I);
+                  begin
+                     if Dot_ID = Lookahead or
+                       (Dot_ID in Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal and then
+                          First (Dot_ID, Lookahead))
+                     then
+                        return Item.Prod.LHS;
+                     end if;
+
+                     exit when Dot_ID in Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal and then
+                       not Has_Empty_Production (Dot_ID);
+                  end;
+
+                  Next (ID_I);
+               end loop;
+            end if;
+         end loop;
+
+      when WisiToken.Parse.LR.Error =>
+         raise SAL.Programmer_Error;
+      end case;
+
+      Ada.Text_IO.Put_Line
+        ("item for " & Image (Action, Descriptor) & " on " & Image (Lookahead, 
Descriptor) & " not found in");
+      LR1_Items.Put (Grammar, Descriptor, Closure, Kernel_Only => True);
+      raise SAL.Programmer_Error;
+   end Find;
+
+   function Image (Item : in Conflict; Descriptor : in WisiToken.Descriptor) 
return String
+   is begin
+      return
+        ("%conflict " &
+           Conflict_Parse_Actions'Image (Item.Action_A) & "/" &
+           Conflict_Parse_Actions'Image (Item.Action_B) & " in state " &
+           Image (Item.LHS_A, Descriptor) & ", " &
+           Image (Item.LHS_B, Descriptor) &
+           " on token " & Image (Item.On, Descriptor) &
+           " (" & State_Index'Image (Item.State_Index) & ")"); -- state number 
last for easier delete
+   end Image;
+
+   function Is_Present (Item : in Conflict; Conflicts : in 
Conflict_Lists.List) return Boolean
+   is
+      use Conflict_Lists;
+      I : Cursor := Conflicts.First;
+   begin
+      loop
+         exit when I = No_Element;
+         if Match (Item, Conflicts.Constant_Reference (I)) then
+            return True;
+         end if;
+         I := Next (I);
+      end loop;
+      return False;
+   end Is_Present;
+
+   function Match (Known : in Conflict; Item : in 
Conflict_Lists.Constant_Reference_Type) return Boolean
+   is begin
+      --  Ignore State_Index. Actions are in canonical order; enforced
+      --  in Add_Action above. For reduce/reduce, LHS_A, LHS_B are not
+      --  in canonical order.
+      return
+        Known.Action_A = Item.Action_A and
+        Known.Action_B = Item.Action_B and
+        ((Known.LHS_A = Item.LHS_A and Known.LHS_B = Item.LHS_B) or
+           (Known.LHS_B = Item.LHS_A and Known.LHS_A = Item.LHS_B)) and
+        Known.On = Item.On;
+   end Match;
+
+   function Image (Item : in RHS_Sequence; Descriptor : in 
WisiToken.Descriptor) return String
+   is begin
+      return "(" & Boolean'Image (Item.Left_Recursive) & ", " & Image 
(Item.Sequence, Descriptor) & ")";
+   end Image;
+
+   function Min (Item : in RHS_Sequence_Arrays.Vector) return RHS_Sequence
+   is
+      use all type Ada.Containers.Count_Type;
+      Min_Length : Ada.Containers.Count_Type := Ada.Containers.Count_Type'Last;
+      Min_RHS    : Natural                   := Natural'Last;
+   begin
+      --  This version assumes all RHS are computed.
+      for RHS in Item.First_Index .. Item.Last_Index loop
+         if Min_Length > Item (RHS).Sequence.Length then
+            Min_Length := Item (RHS).Sequence.Length;
+            Min_RHS    := RHS;
+         end if;
+      end loop;
+      if Min_RHS = Natural'Last then
+         raise Grammar_Error with "nonterm has no minimum terminal sequence";
+      else
+         return Item (Min_RHS);
+      end if;
+   end Min;
+
+   function Compute_Minimal_Terminal_Sequences
+     (Descriptor : in     WisiToken.Descriptor;
+      Grammar    : in     WisiToken.Productions.Prod_Arrays.Vector)
+     return Minimal_Sequence_Array
+   is
+      --  Result (ID).Length = 0 is a valid sequence (ie the nonterminal can
+      --  be empty), so we use an auxilliary array to track whether Result
+      --  (ID) has been computed.
+      --
+      --  We also need to detect mutual recursion, and incomplete grammars.
+
+      All_Set   : Token_ID_Set := (Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal  => False);
+      Recursing : Token_ID_Set := (Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal  => False);
+
+      Recursing_Index : Token_ID_Array_Positive :=
+        (Descriptor.First_Nonterminal .. Descriptor.Last_Nonterminal  => 
Positive'Last);
+
+      RHS_Set : Token_ID_RHS_Set :=
+        (Descriptor.First_Nonterminal .. Descriptor.Last_Nonterminal => 
LR.RHS_Set.Empty_Vector);
+
+      Last_Count : Integer := 0;
+      This_Count : Integer;
+   begin
+      return Result : Minimal_Sequence_Array (Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal) do
+         loop
+            exit when (for all B of All_Set => B);
+            for P of Grammar loop
+               if not All_Set (P.LHS) then
+                  Terminal_Sequence (Grammar, Descriptor, Result, All_Set, 
RHS_Set, Recursing, Recursing_Index, P.LHS);
+               end if;
+            end loop;
+            This_Count := Count (All_Set);
+            if This_Count = Last_Count then
+               Ada.Text_IO.Put_Line (Ada.Text_IO.Standard_Error, Image 
(All_Set, Descriptor, Inverted => True));
+               raise Grammar_Error with "recursion not resolved";
+            end if;
+            Last_Count := This_Count;
+         end loop;
+      end return;
+   end Compute_Minimal_Terminal_Sequences;
+
+   function Compute_Minimal_Terminal_First
+     (Descriptor                 : in WisiToken.Descriptor;
+      Minimal_Terminal_Sequences : in Minimal_Sequence_Array)
+     return Token_Array_Token_ID
+   is
+      use all type Ada.Containers.Count_Type;
+      use Token_ID_Arrays;
+   begin
+      return Result : Token_Array_Token_ID (Descriptor.First_Nonterminal .. 
Descriptor.Last_Nonterminal) do
+         for ID in Result'Range loop
+            declare
+               Min_Seq : Token_ID_Arrays.Vector renames Min 
(Minimal_Terminal_Sequences (ID)).Sequence;
+            begin
+               if Min_Seq.Length = 0 then
+                  Result (ID) := Invalid_Token_ID;
+               else
+                  Result (ID) := Element (Min_Seq.First);
+               end if;
+            end;
+         end loop;
+      end return;
+   end Compute_Minimal_Terminal_First;
+
+   procedure Set_Minimal_Complete_Actions
+     (State                      : in out Parse_State;
+      Kernel                     : in     LR1_Items.Item_Set;
+      Descriptor                 : in     WisiToken.Descriptor;
+      Grammar                    : in     
WisiToken.Productions.Prod_Arrays.Vector;
+      Minimal_Terminal_Sequences : in     Minimal_Sequence_Array;
+      Minimal_Terminal_First     : in     Token_Array_Token_ID)
+   is
+      use all type Ada.Containers.Count_Type;
+      use LR1_Items.Item_Lists;
+      use Token_ID_Arrays;
+
+      subtype Terminals is Token_ID range Descriptor.First_Terminal .. 
Descriptor.Last_Terminal;
+
+      Working_Set : LR1_Items.Item_Lists.List := Kernel.Set;
+      Del         : LR1_Items.Item_Lists.Cursor;
+
+      function Find_Action (List : in Action_Node_Ptr; ID : in Token_ID) 
return Minimal_Action
+      is
+         Node : Action_Node_Ptr := List;
+      begin
+         loop
+            if Node.Symbol = ID then
+               case Node.Action.Item.Verb is
+               when Shift =>
+                  return (Shift, ID, Node.Action.Item.State);
+               when Reduce =>
+                  --  Item.Dot is a nonterm that starts with a nullable 
nonterm; reduce
+                  --  to that first.
+                  return (Reduce, Node.Action.Item.Production.LHS, 0);
+               when Accept_It | WisiToken.Parse.LR.Error =>
+                  raise SAL.Programmer_Error;
+               end case;
+            end if;
+            Node := Node.Next;
+            exit when Node = null;
+         end loop;
+         raise SAL.Programmer_Error;
+      end Find_Action;
+
+      procedure Delete_Non_Minimal
+      is
+         Min_Length : Ada.Containers.Count_Type := 
Ada.Containers.Count_Type'Last;
+         I          : LR1_Items.Item_Lists.Cursor;
+         Min_I      : LR1_Items.Item_Lists.Cursor;
+      begin
+         --  The absolute minimal production for an LHS may not be in this 
state.
+         --  For example, for an Ada aggregate, the minimal terminal sequence 
is:
+         --  aggregate <= LEFT_PAREN RIGHT_PAREN
+         --  but one state has:
+         --  aggregate <= LEFT_PAREN expression_opt WITH ^ NULL RECORD 
RIGHT_PAREN
+         --  aggregate <= LEFT_PAREN expression_opt WITH ^ association_list 
RIGHT_PAREN
+         --
+         --  Find the minimum of the productions that are present
+
+         I := Working_Set.First;
+         loop
+            exit when not Has_Element (I);
+            declare
+               Prod : constant WisiToken.Production_ID := Constant_Ref 
(I).Prod;
+            begin
+               --  IMPROVEME: If Dot is near the end of a production, this is 
not the
+               --  best metric; the best metric is count of remaining tokens to
+               --  insert. But changing to that won't make much difference; it 
only
+               --  matters when Dot is not near the beginning, but then we 
don't have
+               --  multiple productions (they all must have same prefix).
+               --
+               --  We must eliminate direct left recursion; otherwise it can 
appear
+               --  to have a minimum length. For example, consider ada_lite 
state
+               --  149:
+               --
+               --  57.0:actual_parameter_part <= LEFT_PAREN association_list ^ 
RIGHT_PAREN
+               --  61.0:association_list <= association_list ^ COMMA 
association_opt
+               --
+               --  Both have length 2, but the association_list requires a
+               --  RIGHT_PAREN eventually.
+               --
+               --  We also have to eliminate indirect left recursion; consider 
ada_lite state 60:
+               --
+               --   94.0:function_specification <= FUNCTION name ^ 
parameter_and_result_profile
+               --  103.0:name <= name ^ LEFT_PAREN range_list
+               --  103.1:name <= name ^ actual_parameter_part
+               --  123.0:selected_component <= name ^ DOT IDENTIFIER
+               --
+               --  'selected' component has length 3, which two others also 
have, but
+               --  it requires more eventually.
+               --
+               --  An item production is left recursive only if Dot is after 
the
+               --  first token (ie, before the second token); consider 
conflict_name
+               --  state 5:
+               --
+               --   8.0:attribute_reference <= name TICK ^ 
attribute_designator, RIGHT_PAREN/TICK/Wisi_EOI
+               --  11.0:qualified_expression <= name TICK ^ aggregate, 
RIGHT_PAREN/TICK/Wisi_EOI
+               --
+               --  Both are indirect left recursive with "name", but both are 
past
+               --  the recursion, and can be completed.
+
+               if Min_Length > Minimal_Terminal_Sequences 
(Prod.LHS)(Prod.RHS).Sequence.Length and
+                 not (Minimal_Terminal_Sequences 
(Prod.LHS)(Prod.RHS).Left_Recursive and then
+                        (Has_Element (Constant_Ref (I).Dot) and then
+                           Constant_Ref (I).Dot = To_Cursor (Grammar 
(Prod.LHS).RHSs (Prod.RHS).Tokens, 2)))
+               then
+                  Min_Length := Minimal_Terminal_Sequences 
(Prod.LHS)(Prod.RHS).Sequence.Length;
+                  Min_I      := I;
+               end if;
+            end;
+            Next (I);
+         end loop;
+
+         if not Has_Element (Min_I) then
+            Working_Set.Clear;
+         else
+            I := Working_Set.First;
+            loop
+               exit when not Has_Element (I);
+               declare
+                  Prod : constant WisiToken.Production_ID := Constant_Ref 
(I).Prod;
+               begin
+                  if I /= Min_I then
+                     if Trace_Generate > Extra then
+                        Ada.Text_IO.Put_Line ("delete " & Image (Prod) & " not 
minimal");
+                     end if;
+                     Del := I;
+                     Next (I);
+                     Working_Set.Delete (Del);
+                  else
+                     Next (I);
+                  end if;
+               end;
+            end loop;
+         end if;
+      end Delete_Non_Minimal;
+
+   begin
+      --  The actions computed here are used in the error recovery
+      --  algorithm, to decide what terminals to insert in the input stream
+      --  in order to correct an error. The strategy is to complete a high
+      --  level production (ie declaration or statement) as quickly as
+      --  possible, because the next real token is known to be the start of
+      --  a high level production, or the end of a containing block-style
+      --  production.
+      --
+      --  The actions are empty in a state that includes the accept
+      --  production, or where the only not left recursive productions can
+      --  be empty. That tells the error recovery algorithm to stop using
+      --  the minimal complete actions strategy.
+
+      if (for some Item of Working_Set =>
+            Item.Prod.LHS = Descriptor.Accept_ID and
+            (Has_Element (Item.Dot) and then Element (Item.Dot) = 
Descriptor.EOI_ID))
+      then
+         --  No actions
+         return;
+      end if;
+
+      if Working_Set.Length > 1 then
+         --  There are multiple productions in this state, all equally valid;
+         --  the choice is determined by what input error recovery inserts.
+         Delete_Non_Minimal;
+      end if;
+
+      if Trace_Generate > Extra then
+         Ada.Text_IO.Put_Line ("after deletions:");
+         LR1_Items.Put (Grammar, Descriptor, Working_Set, Show_Lookaheads => 
False);
+      end if;
+
+      --  Find the actions for the remaining productions.
+
+      for Item of Working_Set loop
+         if not Has_Element (Item.Dot) then
+            --  Item has no next terminal. Include a reduce action; the
+            --  Minimal_Terminal_First for the resulting state will be used.
+            if Trace_Generate > Extra then
+               Ada.Text_IO.Put_Line ("reduce " & Image (Item.Prod));
+            end if;
+            State.Minimal_Complete_Action :=
+              (Reduce, Item.Prod.LHS,
+                Token_Count => Grammar (Item.Prod.LHS).RHSs 
(Item.Prod.RHS).Tokens.Length);
+         else
+            declare
+               ID : constant Token_ID := Element (Item.Dot);
+            begin
+               if ID /= Descriptor.EOI_ID then
+
+                  if ID in Terminals then
+                     State.Minimal_Complete_Action := Find_Action 
(State.Action_List, ID);
+
+                  else
+                     if Minimal_Terminal_First (ID) = Invalid_Token_ID then
+                        --  Item.Dot is a nullable nonterm, include a reduce 
of the null
+                        --  nonterm, rather than a shift of the following 
terminal; recover
+                        --  must do the reduce first.
+                        State.Minimal_Complete_Action := (Reduce, ID, 
Token_Count => 0);
+
+                     else
+                        State.Minimal_Complete_Action := Find_Action 
(State.Action_List, Minimal_Terminal_First (ID));
+                     end if;
+                  end if;
+               end if;
+            end;
+         end if;
+      end loop;
+   end Set_Minimal_Complete_Actions;
+
+   ----------
+   --  Parse table output
+
+   procedure Put_Text_Rep
+     (Table        : in Parse_Table;
+      File_Name    : in String;
+      Action_Names : in Names_Array_Array;
+      Check_Names  : in Names_Array_Array)
+   is
+      use Ada.Text_IO;
+      File : File_Type;
+   begin
+      --  Only space, semicolon, newline delimit object values. Bounds of
+      --  arrays output before each array, unless known from discriminants.
+      --  End of lists indicated by semicolon. Action, Check subprograms are
+      --  represented by True if present, False if not; look up the actual
+      --  address Table.Productions.
+
+      Create (File, Out_File, File_Name);
+
+      --  First the discriminants
+      Put (File,
+           Trimmed_Image (Table.State_First) & State_Index'Image 
(Table.State_Last) &
+             Token_ID'Image (Table.First_Terminal) & Token_ID'Image 
(Table.Last_Terminal) &
+             Token_ID'Image (Table.First_Nonterminal) & Token_ID'Image 
(Table.Last_Nonterminal));
+      New_Line (File);
+
+      for State of Table.States loop
+         Put (File, Integer'Image (State.Productions.First_Index));
+         Put (File, Integer'Image (State.Productions.Last_Index));
+         for Prod of State.Productions loop
+            Put (File, Token_ID'Image (Prod.LHS) & Integer'Image (Prod.RHS));
+         end loop;
+         New_Line (File);
+
+         declare
+            Node_I : Action_Node_Ptr := State.Action_List;
+         begin
+            loop
+               exit when Node_I = null;
+               --  Action first, so we know if Symbol is present (not when 
Error)
+               declare
+                  Node_J     : Parse_Action_Node_Ptr := Node_I.Action;
+                  Put_Symbol : Boolean               := True;
+               begin
+                  loop
+                     Put (File, Parse_Action_Verbs'Image (Node_J.Item.Verb));
+
+                     case Node_J.Item.Verb is
+                     when Shift =>
+                        Put (File, State_Index'Image (Node_J.Item.State));
+
+                     when Reduce | Accept_It =>
+                        Put (File, Token_ID'Image (Node_J.Item.Production.LHS) 
&
+                               Integer'Image (Node_J.Item.Production.RHS));
+
+                        if Action_Names (Node_J.Item.Production.LHS) /= null 
and then
+                          Action_Names 
(Node_J.Item.Production.LHS)(Node_J.Item.Production.RHS) /= null
+                        then
+                           Put (File, " true");
+                        else
+                           Put (File, " false");
+                        end if;
+                        if Check_Names (Node_J.Item.Production.LHS) /= null 
and then
+                          Check_Names 
(Node_J.Item.Production.LHS)(Node_J.Item.Production.RHS) /= null
+                        then
+                           Put (File, " true");
+                        else
+                           Put (File, " false");
+                        end if;
+
+                        Put (File, Ada.Containers.Count_Type'Image 
(Node_J.Item.Token_Count));
+
+                     when Parse.LR.Error =>
+                        --  Error action terminates the action list
+                        Put_Symbol := False;
+                     end case;
+
+                     Node_J := Node_J.Next;
+                     exit when Node_J = null;
+                     Put (File, ' ');
+                  end loop;
+                  Put (File, ';');
+                  if Put_Symbol then
+                     Put (File, Token_ID'Image (Node_I.Symbol));
+                  end if;
+               end;
+               New_Line (File);
+
+               Node_I := Node_I.Next;
+            end loop;
+         end;
+
+         declare
+            Node_I : Goto_Node_Ptr := State.Goto_List;
+         begin
+            loop
+               exit when Node_I = null;
+               Put (File, Token_ID'Image (Symbol (Node_I)) & State_Index'Image 
(Parse.LR.State (Node_I)));
+               Node_I := Next (Node_I);
+            end loop;
+            Put (File, ';');
+            New_Line (File);
+         end;
+
+         declare
+            Action  : Minimal_Action renames State.Minimal_Complete_Action;
+         begin
+            case State.Minimal_Complete_Action.Verb is
+            when Pause =>
+               null;
+            when Shift =>
+               Put (File, Minimal_Verbs'Image (Action.Verb));
+               Put (File, Token_ID'Image (Action.ID) & State_Index'Image 
(Action.State));
+            when Reduce =>
+               Put (File, Minimal_Verbs'Image (Action.Verb));
+               Put (File, Token_ID'Image (Action.Nonterm) & 
Ada.Containers.Count_Type'Image (Action.Token_Count));
+            end case;
+         end;
+         Put (File, ';');
+         New_Line (File);
+      end loop;
+      Close (File);
+   end Put_Text_Rep;
+
+   procedure Put (Item : in Parse_Action_Rec; Descriptor : in 
WisiToken.Descriptor)
+   is
+      use Ada.Containers;
+      use Ada.Text_IO;
+   begin
+      case Item.Verb is
+      when Shift =>
+         Put ("shift and goto state" & State_Index'Image (Item.State));
+
+      when Reduce =>
+         Put
+           ("reduce" & Count_Type'Image (Item.Token_Count) & " tokens to " &
+              Image (Item.Production.LHS, Descriptor));
+      when Accept_It =>
+         Put ("accept it");
+      when Parse.LR.Error =>
+         Put ("ERROR");
+      end case;
+   end Put;
+
+   procedure Put (Item : in McKenzie_Param_Type; Descriptor : in 
WisiToken.Descriptor)
+   is
+      use Ada.Text_IO;
+   begin
+      Put_Line ("(Insert =>");
+      for I in Item.Insert'Range loop
+         Put (" " & Padded_Image (I, Descriptor) & " =>" & Natural'Image 
(Item.Insert (I)));
+         if I = Item.Insert'Last then
+            Put_Line (")");
+         else
+            Put_Line (",");
+         end if;
+      end loop;
+      Put_Line ("(Delete =>");
+      for I in Item.Delete'Range loop
+         Put (" " & Padded_Image (I, Descriptor) & " =>" & Natural'Image 
(Item.Delete (I)));
+         if I = Item.Delete'Last then
+            Put_Line (")");
+         else
+            Put_Line (",");
+         end if;
+      end loop;
+      Put_Line ("(Push_Back =>");
+      for I in Item.Delete'Range loop
+         Put (" " & Padded_Image (I, Descriptor) & " =>" & Natural'Image 
(Item.Delete (I)));
+         if I = Item.Delete'Last then
+            Put_Line (")");
+         else
+            Put_Line (",");
+         end if;
+      end loop;
+      Put_Line ("Ignore_Check_Fail =>" & Integer'Image 
(Item.Ignore_Check_Fail));
+      Put_Line ("Task_Count        =>" & 
System.Multiprocessors.CPU_Range'Image (Item.Task_Count));
+      Put_Line ("Cost_Limit        =>" & Integer'Image (Item.Cost_Limit));
+      Put_Line ("Check_Limit       =>" & Token_Index'Image (Item.Check_Limit));
+      Put_Line ("Check_Delta_Limit =>" & Integer'Image 
(Item.Check_Delta_Limit));
+      Put_Line ("Enqueue_Limit     =>" & Integer'Image (Item.Enqueue_Limit));
+   end Put;
+
+   procedure Put (Descriptor : in WisiToken.Descriptor; Item : in 
Parse_Action_Rec)
+   is
+      use Ada.Containers;
+      use Ada.Text_IO;
+   begin
+      case Item.Verb is
+      when Shift =>
+         Put ("shift and goto state" & State_Index'Image (Item.State));
+      when Reduce =>
+         Put
+           ("reduce" & Count_Type'Image (Item.Token_Count) & " tokens to " &
+              Image (Item.Production.LHS, Descriptor));
+         Put (" " & Trimmed_Image (Item.Production));
+      when Accept_It =>
+         Put ("accept it");
+         Put (" " & Trimmed_Image (Item.Production));
+      when Parse.LR.Error =>
+         Put ("ERROR");
+      end case;
+   end Put;
+
+   procedure Put (Descriptor : in WisiToken.Descriptor; Action : in 
Parse_Action_Node_Ptr)
+   is
+      use Ada.Text_IO;
+      Ptr    : Parse_Action_Node_Ptr   := Action;
+      Column : constant Positive_Count := Col;
+   begin
+      loop
+         Put (Descriptor, Ptr.Item);
+         Ptr := Ptr.Next;
+         exit when Ptr = null;
+         Put_Line (",");
+         Set_Col (Column);
+      end loop;
+   end Put;
+
+   procedure Put (Descriptor : in WisiToken.Descriptor; State : in Parse_State)
+   is
+      use Ada.Text_IO;
+      use Ada.Strings.Fixed;
+      Action_Ptr : Action_Node_Ptr := State.Action_List;
+      Goto_Ptr   : Goto_Node_Ptr   := State.Goto_List;
+   begin
+      while Action_Ptr /= null loop
+         Put ("   ");
+         if Action_Ptr.Next = null then
+            Put ("default" & (Descriptor.Image_Width - 7) * ' ' & " => ");
+
+         elsif Action_Ptr.Action.Item.Verb /= Parse.LR.Error then
+            Put (Image (Action_Ptr.Symbol, Descriptor) &
+                   (Descriptor.Image_Width - Image (Action_Ptr.Symbol, 
Descriptor)'Length) * ' '
+                   & " => ");
+         end if;
+         Put (Descriptor, Action_Ptr.Action);
+         New_Line;
+         Action_Ptr := Action_Ptr.Next;
+      end loop;
+
+      if Goto_Ptr /= null then
+         New_Line;
+      end if;
+
+      while Goto_Ptr /= null loop
+         Put_Line
+           ("   " & Image (Symbol (Goto_Ptr), Descriptor) &
+              (Descriptor.Image_Width - Image (Symbol (Goto_Ptr), 
Descriptor)'Length) * ' ' &
+              " goto state" & State_Index'Image (Parse.LR.State (Goto_Ptr)));
+         Goto_Ptr := Next (Goto_Ptr);
+      end loop;
+
+      New_Line;
+      Put ("   Minimal_Complete_Action => (");
+      case State.Minimal_Complete_Action.Verb is
+      when Pause =>
+         null;
+      when Shift =>
+         Put (Image (State.Minimal_Complete_Action.ID, Descriptor));
+      when Reduce =>
+         Put (Image (State.Minimal_Complete_Action.Nonterm, Descriptor));
+      end case;
+      Put_Line (")");
+   end Put;
+
+   procedure Put_Parse_Table
+     (Table      : in Parse_Table_Ptr;
+      Title      : in String;
+      Grammar    : in WisiToken.Productions.Prod_Arrays.Vector;
+      Kernels    : in LR1_Items.Item_Set_List;
+      Conflicts  : in Conflict_Lists.List;
+      Descriptor : in WisiToken.Descriptor)
+   is
+      use all type Ada.Containers.Count_Type;
+      use Ada.Text_IO;
+   begin
+      Put_Line ("Tokens:");
+      WisiToken.Put_Tokens (Descriptor);
+
+      New_Line;
+      Put_Line ("Productions:");
+      WisiToken.Productions.Put (Grammar, Descriptor);
+
+      if Table.McKenzie_Param.Cost_Limit /= Default_McKenzie_Param.Cost_Limit 
or
+          Table.McKenzie_Param.Check_Limit /= 
Default_McKenzie_Param.Check_Limit or
+          Table.McKenzie_Param.Check_Delta_Limit /= 
Default_McKenzie_Param.Check_Delta_Limit or
+          Table.McKenzie_Param.Enqueue_Limit /= 
Default_McKenzie_Param.Enqueue_Limit
+      then
+         New_Line;
+         Put_Line ("McKenzie:");
+         Put (Table.McKenzie_Param, Descriptor);
+      end if;
+
+      New_Line;
+      Put_Line (Title & " Parse Table:");
+
+      for State_Index in Table.States'Range loop
+         LR1_Items.Put (Grammar, Descriptor, Kernels (State_Index), 
Kernel_Only => True, Show_Lookaheads => True);
+         New_Line;
+         Put (Descriptor, Table.States (State_Index));
+
+         if State_Index /= Table.States'Last then
+            New_Line;
+         end if;
+      end loop;
+
+      if Conflicts.Length > 0 then
+         declare
+            use Ada.Strings.Unbounded;
+            Last_State : Unknown_State_Index := Unknown_State;
+            Line : Unbounded_String := +"States with conflicts:";
+         begin
+            for Conflict of Conflicts loop
+               if Conflict.State_Index /= Last_State then
+                  Append (Line, State_Index'Image (Conflict.State_Index));
+                  Last_State := Conflict.State_Index;
+               end if;
+            end loop;
+            Indent_Wrap (-Line);
+         end;
+      end if;
+   end Put_Parse_Table;
+
+end WisiToken.Generate.LR;
diff --git a/packages/wisi/wisitoken-generate-lr.ads 
b/packages/wisi/wisitoken-generate-lr.ads
index 4a57ff8..9cb22f2 100644
--- a/packages/wisi/wisitoken-generate-lr.ads
+++ b/packages/wisi/wisitoken-generate-lr.ads
@@ -2,7 +2,7 @@
 --
 --  Common utilities for LR parser table generators.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -117,33 +117,59 @@ package WisiToken.Generate.LR is
 
    function Match (Known : in Conflict; Item : in 
Conflict_Lists.Constant_Reference_Type) return Boolean;
 
-   procedure Compute_Minimal_Terminal_Sequences
-     (Grammar    : in     WisiToken.Productions.Prod_Arrays.Vector;
-      Descriptor : in     WisiToken.Descriptor;
-      Result     : in out Token_Sequence_Arrays.Vector);
+   type RHS_Sequence is
+   record
+      Left_Recursive : Boolean := False;
+      --  Direct or indirect; see comment in
+      --  Set_Minimal_Complete_Actions.Delete_Non_Minimal.
+
+      Sequence : Token_ID_Arrays.Vector;
+   end record;
+
+   package RHS_Sequence_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Natural, RHS_Sequence, Default_Element => (others => <>));
+
+   function Image (Item : in RHS_Sequence; Descriptor : in 
WisiToken.Descriptor) return String;
+   --  Positional Ada aggregate syntax.
+
+   function Image is new RHS_Sequence_Arrays.Gen_Image_Aux (Descriptor, Image);
+
+   function Min (Item : in RHS_Sequence_Arrays.Vector) return RHS_Sequence;
+   --  Return element of Item with minimum length;
+
+   type Minimal_Sequence_Array is array (Token_ID range <>) of 
RHS_Sequence_Arrays.Vector;
+
+   function Compute_Minimal_Terminal_Sequences
+     (Descriptor : in     WisiToken.Descriptor;
+      Grammar    : in     WisiToken.Productions.Prod_Arrays.Vector)
+     return Minimal_Sequence_Array;
    --  For each production in Grammar, compute the minimal sequence of
    --  terminals that will complete it. Result is an empty sequence if
-   --  the production may be empty.
+   --  the production may be empty, or Invalid_Token_ID if it is
+   --  recursive.
 
-   function Minimal_Terminal_First
-     (Grammar    : in     WisiToken.Productions.Prod_Arrays.Vector;
-      Descriptor : in     WisiToken.Descriptor)
+   function Compute_Minimal_Terminal_First
+     (Descriptor                 : in WisiToken.Descriptor;
+      Minimal_Terminal_Sequences : in Minimal_Sequence_Array)
       return Token_Array_Token_ID;
    --  For each nonterminal in Grammar, return the first of the minimal
    --  sequence of terminals that will complete it; Invalid_Token_ID if
    --  the minimal sequence is empty.
 
    procedure Set_Minimal_Complete_Actions
-     (State                  : in out Parse_State;
-      Kernel                 : in     LR1_Items.Item_Set;
-      Minimal_Terminal_First : in     Token_Array_Token_ID;
-      Ancestors              : in     Token_Array_Token_Set;
-      Descriptor             : in     WisiToken.Descriptor;
-      Grammar                : in     
WisiToken.Productions.Prod_Arrays.Vector);
-   --  Set State.Minimal_Terminal_First to the set of terminals that will
+     (State                      : in out Parse_State;
+      Kernel                     : in     LR1_Items.Item_Set;
+      Descriptor                 : in     WisiToken.Descriptor;
+      Grammar                    : in     
WisiToken.Productions.Prod_Arrays.Vector;
+      Minimal_Terminal_Sequences : in     Minimal_Sequence_Array;
+      Minimal_Terminal_First     : in     Token_Array_Token_ID);
+   --  Set State.Minimal_Complete_Actions to the set of actions that will
    --  most quickly complete the productions in Kernel (which must be for
    --  State). Useful in error correction when we know the next actual
    --  terminal is a block ending or statement start.
+   --
+   --  The Minimal_Complete_Actions will be empty in a state where there
+   --  is nothing useful to do.
 
    ----------
    --  Parse table output
@@ -169,7 +195,6 @@ package WisiToken.Generate.LR is
       Title      : in String;
       Grammar    : in WisiToken.Productions.Prod_Arrays.Vector;
       Kernels    : in LR1_Items.Item_Set_List;
-      Ancestors  : in Token_Array_Token_Set;
       Conflicts  : in Conflict_Lists.List;
       Descriptor : in WisiToken.Descriptor);
 
diff --git a/packages/wisi/wisitoken-generate-lr1_items.adb 
b/packages/wisi/wisitoken-generate-lr1_items.adb
index 05ad564..b6d14ca 100644
--- a/packages/wisi/wisitoken-generate-lr1_items.adb
+++ b/packages/wisi/wisitoken-generate-lr1_items.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2002, 2003, 2008, 2009, 2012 - 2015, 2017, 2018 Free 
Software Foundation, Inc.
+--  Copyright (C) 2002, 2003, 2008, 2009, 2012 - 2015, 2017 - 2019 Free 
Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -43,7 +43,7 @@ package body WisiToken.Generate.LR1_Items is
    begin
       for Item of Set loop
          if Item.Dot /= Token_ID_Arrays.No_Element then
-            if Element (Item.Dot) /= Descriptor.EOF_ID then
+            if Element (Item.Dot) /= Descriptor.EOI_ID then
                IDs (Element (Item.Dot)) := True;
             end if;
          end if;
@@ -536,6 +536,23 @@ package body WisiToken.Generate.LR1_Items is
    procedure Put
      (Grammar         : in WisiToken.Productions.Prod_Arrays.Vector;
       Descriptor      : in WisiToken.Descriptor;
+      Item            : in Item_Lists.List;
+      Show_Lookaheads : in Boolean := True;
+      Kernel_Only     : in Boolean := False)
+   is begin
+      for It of Item loop
+         if not Kernel_Only or else
+           In_Kernel (Grammar, Descriptor, It)
+         then
+            Ada.Text_IO.Put_Line
+              ("  " & Image (Grammar, Descriptor, It, Show_Lookaheads => 
Show_Lookaheads));
+         end if;
+      end loop;
+   end Put;
+
+   procedure Put
+     (Grammar         : in WisiToken.Productions.Prod_Arrays.Vector;
+      Descriptor      : in WisiToken.Descriptor;
       Item            : in Item_Set;
       Show_Lookaheads : in Boolean := True;
       Kernel_Only     : in Boolean := False;
@@ -547,14 +564,7 @@ package body WisiToken.Generate.LR1_Items is
          Put_Line ("State" & Unknown_State_Index'Image (Item.State) & ":");
       end if;
 
-      for It of Item.Set loop
-         if not Kernel_Only or else
-           In_Kernel (Grammar, Descriptor, It)
-         then
-            Put_Line
-              ("  " & Image (Grammar, Descriptor, It, Show_Lookaheads => 
Show_Lookaheads));
-         end if;
-      end loop;
+      Put (Grammar, Descriptor, Item.Set, Show_Lookaheads, Kernel_Only);
 
       if Show_Goto_List then
          Put (Descriptor, Item.Goto_List);
diff --git a/packages/wisi/wisitoken-generate-lr1_items.ads 
b/packages/wisi/wisitoken-generate-lr1_items.ads
index d776e4a..3ee55d8 100644
--- a/packages/wisi/wisitoken-generate-lr1_items.ads
+++ b/packages/wisi/wisitoken-generate-lr1_items.ads
@@ -2,7 +2,7 @@
 --
 --  Types and operatorion for LR(1) items.
 --
---  Copyright (C) 2003, 2008, 2013-2015, 2017, 2018 Free Software Foundation, 
Inc.
+--  Copyright (C) 2003, 2008, 2013 - 2015, 2017 - 2019 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -216,12 +216,12 @@ package WisiToken.Generate.LR1_Items is
    --  Not combined with non-Lookaheads version for speed; this is called
    --  a lot.
 
-   package Item_Set_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(State_Index, Item_Set);
+   package Item_Set_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (State_Index, Item_Set, Default_Element => (others => <>));
    subtype Item_Set_List is Item_Set_Arrays.Vector;
 
-   package State_Index_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(Positive, State_Index);
-
-   package Int_Arrays is new SAL.Gen_Unbounded_Definite_Vectors (Positive, 
Interfaces.Integer_16);
+   package Int_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Positive, Interfaces.Integer_16, Default_Element => 
Interfaces.Integer_16'Last);
    function Compare_Integer_16 (Left, Right : in Interfaces.Integer_16) return 
SAL.Compare_Result is
      (if Left > Right then SAL.Greater
       elsif Left < Right then SAL.Less
@@ -313,6 +313,13 @@ package WisiToken.Generate.LR1_Items is
    procedure Put
      (Grammar         : in WisiToken.Productions.Prod_Arrays.Vector;
       Descriptor      : in WisiToken.Descriptor;
+      Item            : in Item_Lists.List;
+      Show_Lookaheads : in Boolean := True;
+      Kernel_Only     : in Boolean := False);
+
+   procedure Put
+     (Grammar         : in WisiToken.Productions.Prod_Arrays.Vector;
+      Descriptor      : in WisiToken.Descriptor;
       Item            : in Item_Set;
       Show_Lookaheads : in Boolean := True;
       Kernel_Only     : in Boolean := False;
diff --git a/packages/wisi/wisitoken-generate.adb 
b/packages/wisi/wisitoken-generate.adb
index 81ae9da..9796b87 100644
--- a/packages/wisi/wisitoken-generate.adb
+++ b/packages/wisi/wisitoken-generate.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018, 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -358,67 +358,6 @@ package body WisiToken.Generate is
       return Result;
    end Follow;
 
-   function Ancestors
-     (Grammar    : in WisiToken.Productions.Prod_Arrays.Vector;
-      Descriptor : in WisiToken.Descriptor)
-     return Token_Array_Token_Set
-   is
-      use all type Ada.Containers.Count_Type;
-
-      Done : Boolean := False;
-   begin
-      return All_Ancestors : Token_Array_Token_Set
-          (Descriptor.First_Terminal .. Grammar.Last_Index,
-           Grammar.First_Index .. Grammar.Last_Index) :=
-             (others => (others => False))
-      do
-         loop
-            exit when Done;
-            Done := True;
-            for Prod of Grammar loop
-               for R of Prod.RHSs loop
-                  if R.Tokens.Length = 1 then
-                     declare
-                        ID : constant Token_ID := R.Tokens (1);
-                     begin
-                        if not All_Ancestors (ID, Prod.LHS) then
-                           Done := False;
-                        end if;
-                        All_Ancestors (ID, Prod.LHS) := True;
-                        for J in All_Ancestors'Range (2) loop
-                           if All_Ancestors (Prod.LHS, J) then
-                              if not All_Ancestors (ID, J) then
-                                 Done := False;
-                                 All_Ancestors (ID, J) := True;
-                              end if;
-                           end if;
-                        end loop;
-                     end;
-                  end if;
-               end loop;
-            end loop;
-         end loop;
-      end return;
-   end Ancestors;
-
-   function Descendants
-     (Ancestors : in Token_Array_Token_Set)
-     return Token_Sequence_Arrays.Vector
-   is
-      subtype Nonterminals is Token_ID range Ancestors'First (2) .. 
Ancestors'Last (2);
-   begin
-      return Result : Token_Sequence_Arrays.Vector do
-         Result.Set_First_Last (Ancestors'First (2), Ancestors'Last (2));
-         for I in Ancestors'Range (1) loop
-            for J in Ancestors'Range (2) loop
-               if I in Nonterminals and Ancestors (I, J) then
-                  Result (J).Append (I);
-               end if;
-            end loop;
-         end loop;
-      end return;
-   end Descendants;
-
    ----------
    --  Indented text output
 
diff --git a/packages/wisi/wisitoken-generate.ads 
b/packages/wisi/wisitoken-generate.ads
index 28636d4..01340eb 100644
--- a/packages/wisi/wisitoken-generate.ads
+++ b/packages/wisi/wisitoken-generate.ads
@@ -12,7 +12,7 @@
 --
 --  See wisitoken.ads
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018, 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -93,21 +93,6 @@ package WisiToken.Generate is
    --  tokens that can follow it. Implements algorithm FOLLOW from
    --  [dragon] pg 189.
 
-   function Ancestors
-     (Grammar    : in WisiToken.Productions.Prod_Arrays.Vector;
-      Descriptor : in WisiToken.Descriptor)
-     return Token_Array_Token_Set;
-   --  For each terminal and nonterm, record the nonterms it reduces to
-   --  via one token reductions, recursively. In other words, if there is
-   --  a production J <= I, then Ancestors (I, J) is True.
-
-   function Descendants
-     (Ancestors : in Token_Array_Token_Set)
-     return Token_Sequence_Arrays.Vector;
-   --  Inverse of Ancestors, excluding terminals. If there is a
-   --  production J <= I and I is a nonterminal, then I is present in
-   --  Descendants (J).
-
    ----------
    --  Indented text output. Mostly used for code generation in wisi,
    --  also used in outputing the parse_table and other debug stuff.
diff --git a/packages/wisi/wisitoken-lexer-re2c.adb 
b/packages/wisi/wisitoken-lexer-re2c.adb
index 5eae70d..10bbd16 100644
--- a/packages/wisi/wisitoken-lexer-re2c.adb
+++ b/packages/wisi/wisitoken-lexer-re2c.adb
@@ -2,7 +2,7 @@
 --
 --  see spec.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -47,22 +47,29 @@ package body WisiToken.Lexer.re2c is
    type Instance_Access is access Instance; --  silence compiler warning
 
    function New_Lexer
-     (Trace  : not null access WisiToken.Trace'Class)
+     (Descriptor  : not null access constant WisiToken.Descriptor)
      return Handle
    is begin
-      return Handle (Instance_Access'(new Instance (Trace)));
+      return Handle (Instance_Access'(new Instance (Descriptor)));
    end New_Lexer;
 
-   overriding procedure Reset_With_String (Lexer : in out Instance; Input : in 
String)
+   overriding procedure Reset_With_String
+     (Lexer      : in out Instance;
+      Input      : in     String;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First)
    is begin
       Finalize (Lexer);
 
       --  We assume Input is in UTF-8 encoding
       Lexer.Source :=
-        (Label       => String_Label,
-         File_Name   => +"",
-         Buffer      => new String'(Input),
-         User_Buffer => False);
+        (Label                     => String_Label,
+         File_Name                 => +"",
+         Buffer_Nominal_First_Byte => Base_Buffer_Pos (Input'First),
+         Buffer_Nominal_First_Char => Begin_Char,
+         Line_Nominal_First        => Begin_Line,
+         Buffer                    => new String'(Input),
+         User_Buffer               => False);
 
       Lexer.Lexer := New_Lexer
         (Buffer    => Lexer.Source.Buffer.all'Address,
@@ -73,9 +80,11 @@ package body WisiToken.Lexer.re2c is
    end Reset_With_String;
 
    overriding procedure Reset_With_String_Access
-     (Lexer     : in out Instance;
-      Input     : in     Ada.Strings.Unbounded.String_Access;
-      File_Name : in     Ada.Strings.Unbounded.Unbounded_String)
+     (Lexer      : in out Instance;
+      Input      : access String;
+      File_Name  : in     Ada.Strings.Unbounded.Unbounded_String;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First)
    is begin
       Finalize (Lexer);
 
@@ -85,8 +94,11 @@ package body WisiToken.Lexer.re2c is
          File_Name   =>
            +(if Ada.Strings.Unbounded.Length (File_Name) = 0 then ""
              else Ada.Directories.Simple_Name (-File_Name)),
-         Buffer      => Input,
-         User_Buffer => True);
+         Buffer_Nominal_First_Byte => Base_Buffer_Pos (Input'First),
+         Buffer_Nominal_First_Char => Begin_Char,
+         Line_Nominal_First        => Begin_Line,
+         Buffer                    => Input,
+         User_Buffer               => True);
 
       Lexer.Lexer := New_Lexer
         (Buffer    => Lexer.Source.Buffer.all'Address,
@@ -96,27 +108,49 @@ package body WisiToken.Lexer.re2c is
       Reset (Lexer);
    end Reset_With_String_Access;
 
-   overriding procedure Reset_With_File (Lexer : in out Instance; File_Name : 
in String)
+   overriding procedure Reset_With_File
+     (Lexer          : in out Instance;
+      File_Name      : in     String;
+      Begin_Byte_Pos : in     Buffer_Pos       := Invalid_Buffer_Pos;
+      End_Byte_Pos   : in     Buffer_Pos       := Invalid_Buffer_Pos;
+      Begin_Char     : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line     : in     Line_Number_Type := Line_Number_Type'First)
    is
       use GNATCOLL.Mmap;
+      Length : Buffer_Pos;
    begin
       Finalize (Lexer);
 
       --  We assume the file is in UTF-8 encoding
       Lexer.Source :=
-        (File_Label, +Ada.Directories.Simple_Name (File_Name), Open_Read 
(File_Name), Invalid_Mapped_Region, 1);
+        (File_Label, +Ada.Directories.Simple_Name (File_Name),
+         Buffer_Nominal_First_Byte => Buffer_Pos'First, -- overwritten below,
+         Buffer_Nominal_First_Char => Begin_Char,
+         Line_Nominal_First        => Line_Number_Type'First, -- overwritten 
below
+         File                      => Open_Read (File_Name),
+         Region                    => Invalid_Mapped_Region,
+         Buffer_Last               => 1);
+
+      if Begin_Byte_Pos = Invalid_Buffer_Pos then
+         Lexer.Source.Region := Read (Lexer.Source.File);
+         Length              := Buffer_Pos (Last (Lexer.Source.Region));
+      else
+         Length := End_Byte_Pos - Begin_Byte_Pos + 1;
+
+         Lexer.Source.Buffer_Nominal_First_Byte := Begin_Byte_Pos;
+         Lexer.Source.Line_Nominal_First        := Begin_Line;
+
+         Lexer.Source.Region := Read
+           (Lexer.Source.File,
+            Offset => File_Size (Begin_Byte_Pos - 1), -- Offset is 0 indexed, 
Begin_Byte_Pos is 1 indexed
+            Length => File_Size (Length));
+      end if;
 
-      Lexer.Source.Region      := Read (Lexer.Source.File);
       Lexer.Source.Buffer_Last := Last (Lexer.Source.Region);
 
-      if Integer (Length (Lexer.Source.File)) /= Lexer.Source.Buffer_Last then
-         raise SAL.Programmer_Error with "not all of file is mapped; file 
length" &
-           File_Size'Image (Length (Lexer.Source.File)) & " mapped:" & 
Integer'Image (Lexer.Source.Buffer_Last);
-      end if;
-
       Lexer.Lexer := New_Lexer
         (Buffer    => Data (Lexer.Source.Region).all'Address,
-         Length    => Interfaces.C.size_t (Last (Lexer.Source.Region)),
+         Length    => Interfaces.C.size_t (Length),
          Verbosity => Interfaces.C.int (if Trace_Parse > 3 then Trace_Parse - 
3 else 0));
 
       Reset (Lexer);
@@ -129,9 +163,10 @@ package body WisiToken.Lexer.re2c is
       Lexer.Char_Line_Start := 1;
       Lexer.ID :=
         --  First token is assumed to be first on a line.
-        (if Lexer.Trace.Descriptor.New_Line_ID = Invalid_Token_ID
+        (if Lexer.Descriptor.New_Line_ID = Invalid_Token_ID
          then Invalid_Token_ID
-         else Lexer.Trace.Descriptor.New_Line_ID);
+         else Lexer.Descriptor.New_Line_ID);
+      Lexer.Prev_ID := Invalid_Token_ID;
    end Reset;
 
    overriding function Find_Next
@@ -147,20 +182,33 @@ package body WisiToken.Lexer.re2c is
            (ID => Lexer.ID,
 
             Byte_Region =>
-              (Buffer_Pos (Lexer.Byte_Position),
-               Base_Buffer_Pos (Lexer.Byte_Position + Lexer.Byte_Length - 1)),
-
-            Line => Lexer.Line,
+              (if Lexer.ID = Lexer.Descriptor.EOI_ID and then 
Lexer.Byte_Position = Integer (Base_Buffer_Pos'First)
+               then
+                  --  EOF in empty buffer
+                 (Lexer.Source.Buffer_Nominal_First_Byte,
+                  Lexer.Source.Buffer_Nominal_First_Byte - 1)
+               else
+                 (Base_Buffer_Pos (Lexer.Byte_Position) + 
Lexer.Source.Buffer_Nominal_First_Byte - Buffer_Pos'First,
+                  Base_Buffer_Pos (Lexer.Byte_Position + Lexer.Byte_Length - 
1) +
+                    Lexer.Source.Buffer_Nominal_First_Byte - 
Buffer_Pos'First)),
+
+            Line => Lexer.Line + Lexer.Source.Line_Nominal_First - 
Line_Number_Type'First,
 
             Column =>
-              (if Lexer.ID = Lexer.Trace.Descriptor.New_Line_ID or
-                 Lexer.ID = Lexer.Trace.Descriptor.EOF_ID
+              (if Lexer.ID = Lexer.Descriptor.New_Line_ID or
+                 Lexer.ID = Lexer.Descriptor.EOI_ID
                then 0
                else Ada.Text_IO.Count (Lexer.Char_Position - 
Lexer.Char_Line_Start)),
 
             Char_Region =>
-              (Buffer_Pos (Lexer.Char_Position),
-               Base_Buffer_Pos (Lexer.Char_Position + Lexer.Char_Length - 1)));
+              (if Lexer.ID = Lexer.Descriptor.EOI_ID and then 
Lexer.Byte_Position = Integer (Base_Buffer_Pos'First)
+               then
+                  --  EOF in empty buffer
+                 (Lexer.Source.Buffer_Nominal_First_Byte,
+                  Lexer.Source.Buffer_Nominal_First_Byte - 1)
+               else
+                 (To_Char_Pos (Lexer.Source, Lexer.Char_Position),
+                  To_Char_Pos (Lexer.Source, Lexer.Char_Position + 
Lexer.Char_Length - 1))));
       end Build_Token;
 
    begin
@@ -177,7 +225,7 @@ package body WisiToken.Lexer.re2c is
          begin
             case Status is
             when 0 =>
-               if Lexer.ID = Lexer.Trace.Descriptor.New_Line_ID then
+               if Lexer.ID = Lexer.Descriptor.New_Line_ID then
                   Lexer.Char_Line_Start := Lexer.Char_Position + 1;
                end if;
 
@@ -191,13 +239,20 @@ package body WisiToken.Lexer.re2c is
                declare
                   Buffer : constant GNATCOLL.Mmap.Str_Access := 
WisiToken.Lexer.Buffer (Lexer.Source);
                begin
+                  if Trace_Parse > Lexer_Debug then
+                     --  We don't have a visible Trace object here.
+                     Ada.Text_IO.Put_Line ("lexer error char " & Buffer 
(Lexer.Byte_Position));
+                  end if;
+
                   if Buffer (Lexer.Byte_Position) = ''' then
                      --  Lexer has read to next new-line (or eof), then 
backtracked to next
                      --  char after '.
                      Lexer.Errors.Append
-                       ((Buffer_Pos (Lexer.Char_Position), 
Invalid_Token_Index, (1 => ''', others => ASCII.NUL)));
+                       ((To_Char_Pos (Lexer.Source, Lexer.Char_Position),
+                         Invalid_Token_Index,
+                         (1 => ''', others => ASCII.NUL)));
 
-                     Lexer.ID := Lexer.Trace.Descriptor.String_1_ID;
+                     Lexer.ID := Lexer.Descriptor.String_1_ID;
                      Build_Token;
                      return True;
 
@@ -205,16 +260,18 @@ package body WisiToken.Lexer.re2c is
                      --  Lexer has read to next new-line (or eof), then 
backtracked to next
                      --  char after ".
                      Lexer.Errors.Append
-                       ((Buffer_Pos (Lexer.Char_Position), 
Invalid_Token_Index, (1 => '"', others => ASCII.NUL)));
+                       ((To_Char_Pos (Lexer.Source, Lexer.Char_Position),
+                         Invalid_Token_Index,
+                         (1 => '"', others => ASCII.NUL)));
 
-                     Lexer.ID := Lexer.Trace.Descriptor.String_2_ID;
+                     Lexer.ID := Lexer.Descriptor.String_2_ID;
                      Build_Token;
                      return True;
 
                   else
                      --  Just skip the character; call Next_Token again.
                      Lexer.Errors.Append
-                       ((Buffer_Pos (Lexer.Char_Position), 
Invalid_Token_Index, (others => ASCII.NUL)));
+                       ((To_Char_Pos (Lexer.Source, Lexer.Char_Position), 
Invalid_Token_Index, (others => ASCII.NUL)));
                   end if;
                end;
 
@@ -227,13 +284,18 @@ package body WisiToken.Lexer.re2c is
 
    overriding function First (Lexer : in Instance) return Boolean
    is begin
-      return Lexer.Trace.Descriptor.New_Line_ID /= Invalid_Token_ID and then
-           Lexer.Prev_ID = Lexer.Trace.Descriptor.New_Line_ID;
+      return Lexer.Descriptor.New_Line_ID /= Invalid_Token_ID and then
+           Lexer.Prev_ID = Lexer.Descriptor.New_Line_ID;
    end First;
 
    overriding function Buffer_Text (Lexer : in Instance; Byte_Bounds : in 
Buffer_Region) return String
-   is begin
-      return String (Buffer (Lexer.Source) (Integer (Byte_Bounds.First) .. 
Integer (Byte_Bounds.Last)));
+   is
+      First : constant Integer := Integer
+        (Byte_Bounds.First - Lexer.Source.Buffer_Nominal_First_Byte + 
Buffer_Pos'First);
+      Last  : constant Integer := Integer
+        (Byte_Bounds.Last - Lexer.Source.Buffer_Nominal_First_Byte + 
Buffer_Pos'First);
+   begin
+      return String (Buffer (Lexer.Source) (First .. Last));
    end Buffer_Text;
 
    overriding function File_Name (Lexer : in Instance) return String
diff --git a/packages/wisi/wisitoken-lexer-re2c.ads 
b/packages/wisi/wisitoken-lexer-re2c.ads
index 0472908..b58c4ea 100644
--- a/packages/wisi/wisitoken-lexer-re2c.ads
+++ b/packages/wisi/wisitoken-lexer-re2c.ads
@@ -6,7 +6,7 @@
 --
 --  [1] http://re2c.org/
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -39,6 +39,9 @@ generic
      return System.Address;
    --  Create the re2c lexer object, passing it the full text to process.
    --  Length is buffer length in 8 bit bytes.
+   --
+   --  The C lexer does not know about Buffer_Nominal_First,
+   --  Line_Nominal_First; its buffer positions and lines start at 1.
 
    with procedure Free_Lexer (Lexer : in out System.Address);
    --  Destruct the re2c lexer object
@@ -75,20 +78,32 @@ package WisiToken.Lexer.re2c is
    overriding procedure Finalize (Object : in out Instance);
 
    function New_Lexer
-     (Trace  : not null access WisiToken.Trace'Class)
+     (Descriptor  : not null access constant WisiToken.Descriptor)
      return WisiToken.Lexer.Handle;
    --  If the tokens do not include a reporting New_Line token, set
    --  New_Line_ID to Invalid_Token_ID.
 
-   overriding procedure Reset_With_String (Lexer : in out Instance; Input : in 
String);
+   overriding procedure Reset_With_String
+     (Lexer      : in out Instance;
+      Input      : in     String;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First);
    --  Copies Input to internal buffer.
 
    overriding procedure Reset_With_String_Access
-     (Lexer     : in out Instance;
-      Input     : in     Ada.Strings.Unbounded.String_Access;
-      File_Name : in     Ada.Strings.Unbounded.Unbounded_String);
-
-   overriding procedure Reset_With_File (Lexer : in out Instance; File_Name : 
in String);
+     (Lexer      : in out Instance;
+      Input      : access String;
+      File_Name  : in     Ada.Strings.Unbounded.Unbounded_String;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First);
+
+   overriding procedure Reset_With_File
+     (Lexer          : in out Instance;
+      File_Name      : in     String;
+      Begin_Byte_Pos : in     Buffer_Pos       := Invalid_Buffer_Pos;
+      End_Byte_Pos   : in     Buffer_Pos       := Invalid_Buffer_Pos;
+      Begin_Char     : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line     : in     Line_Number_Type := Line_Number_Type'First);
    --  Uses memory mapped file; no copies.
 
    overriding procedure Discard_Rest_Of_Input (Lexer : in out Instance) is 
null;
@@ -114,7 +129,7 @@ private
       Lexer         : System.Address := System.Null_Address;
       Source        : WisiToken.Lexer.Source;
       ID            : Token_ID; --  Last token read by find_next
-      Byte_Position : Natural; -- We don't use Buffer_Pos here, because 
Source.Buffer is indexed by Integer
+      Byte_Position : Natural;  --  We don't use Buffer_Pos here, because 
Source.Buffer is indexed by Integer
       Byte_Length   : Natural;
       Char_Position : Natural;
       Char_Length   : Natural;
@@ -122,7 +137,7 @@ private
       --  start of Managed.Buffer, 1 indexed.
 
       Line            : Line_Number_Type; -- after last (or current) New_Line 
token
-      Char_Line_Start : Natural;          -- Character position after last 
New_Line token
+      Char_Line_Start : Natural;          -- Character position after last 
New_Line token, lexer origin.
       Prev_ID         : Token_ID;         -- previous token_id
    end record;
 
diff --git a/packages/wisi/wisitoken-lexer-regexp.adb 
b/packages/wisi/wisitoken-lexer-regexp.adb
index 8eb2242..1790b74 100644
--- a/packages/wisi/wisitoken-lexer-regexp.adb
+++ b/packages/wisi/wisitoken-lexer-regexp.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2015, 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2015, 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -50,7 +50,7 @@ package body WisiToken.Lexer.Regexp is
       --  We only support Reset_With_String.
 
       if Current_Char > Lexer.Source.Buffer'Last then
-         Lexer.ID := Lexer.Trace.Descriptor.EOF_ID;
+         Lexer.ID := Lexer.Descriptor.EOI_ID;
          Lexer.Lexeme_Head := Lexer.Buffer_Head;
          Lexer.Lexeme_Tail := Lexer.Buffer_Head - 1;
          return True;
@@ -116,7 +116,7 @@ package body WisiToken.Lexer.Regexp is
          return True;
 
       elsif Current_Char = Lexer.Source.Buffer'Last then
-         Lexer.ID := Lexer.Trace.Descriptor.EOF_ID;
+         Lexer.ID := Lexer.Descriptor.EOI_ID;
          Lexer.Buffer_Head := Lexer.Buffer_Head + 1;
          return True;
 
@@ -141,11 +141,11 @@ package body WisiToken.Lexer.Regexp is
    type Instance_Access is access Instance; --  silence compiler warning
 
    function New_Lexer
-     (Trace  : not null access WisiToken.Trace'Class;
-      Syntax : in              WisiToken.Lexer.Regexp.Syntax)
+     (Descriptor : not null access constant WisiToken.Descriptor;
+      Syntax     : in              WisiToken.Lexer.Regexp.Syntax)
      return WisiToken.Lexer.Handle
    is
-      New_Lexer : constant Instance_Access := new Instance (Trace, 
Syntax'Last);
+      New_Lexer : constant Instance_Access := new Instance (Descriptor, 
Syntax'Last);
    begin
       New_Lexer.Syntax := Syntax;
 
@@ -157,38 +157,56 @@ package body WisiToken.Lexer.Regexp is
       Finalize (Object.Source);
    end Finalize;
 
-   overriding procedure Reset_With_String (Lexer : in out Instance; Input : in 
String)
+   overriding procedure Reset_With_String
+     (Lexer      : in out Instance;
+      Input      : in     String;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First)
    is begin
       Finalize (Lexer);
 
       Lexer.Source :=
-        (Label       => String_Label,
-         File_Name   => +"",
-         Buffer      => new String'(Input),
-         User_Buffer => False);
+        (Label                     => String_Label,
+         File_Name                 => +"",
+         Buffer_Nominal_First_Byte => Base_Buffer_Pos (Input'First),
+         Buffer_Nominal_First_Char => Begin_Char,
+         Line_Nominal_First        => Begin_Line,
+         Buffer                    => new String'(Input),
+         User_Buffer               => False);
 
       Reset (Lexer);
    end Reset_With_String;
 
    overriding procedure Reset_With_String_Access
      (Lexer     : in out Instance;
-      Input     : in     Ada.Strings.Unbounded.String_Access;
-      File_Name : in     Ada.Strings.Unbounded.Unbounded_String)
+      Input     : access String;
+      File_Name : in     Ada.Strings.Unbounded.Unbounded_String;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First)
    is begin
       Finalize (Lexer);
 
       Lexer.Source :=
         (Label       => String_Label,
          File_Name   => File_Name,
+         Buffer_Nominal_First_Byte => Base_Buffer_Pos (Input'First),
+         Buffer_Nominal_First_Char => Begin_Char,
+         Line_Nominal_First        => Begin_Line,
          Buffer      => Input,
          User_Buffer => True);
 
       Reset (Lexer);
    end Reset_With_String_Access;
 
-   overriding procedure Reset_With_File (Lexer : in out Instance; File_Name : 
in String)
+   overriding procedure Reset_With_File
+     (Lexer          : in out Instance;
+      File_Name      : in     String;
+      Begin_Byte_Pos : in     Buffer_Pos       := Invalid_Buffer_Pos;
+      End_Byte_Pos   : in     Buffer_Pos       := Invalid_Buffer_Pos;
+      Begin_Char     : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line     : in     Line_Number_Type := Line_Number_Type'First)
    is
-      pragma Unreferenced (File_Name);
+      pragma Unreferenced (File_Name, Begin_Byte_Pos, End_Byte_Pos, 
Begin_Char, Begin_Line);
    begin
       Finalize (Lexer);
 
diff --git a/packages/wisi/wisitoken-lexer-regexp.ads 
b/packages/wisi/wisitoken-lexer-regexp.ads
index 8a94560..3a3d5f4 100644
--- a/packages/wisi/wisitoken-lexer-regexp.ads
+++ b/packages/wisi/wisitoken-lexer-regexp.ads
@@ -6,7 +6,7 @@
 --  used in most of the WisiToken unit tests. Since it uses regexp, it
 --  is easy to convert to an Aflex lexer.
 --
---  Copyright (C) 2015, 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2015, 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -50,22 +50,34 @@ package WisiToken.Lexer.Regexp is
    type Syntax is array (Token_ID range <>) of Syntax_Item;
 
    type Instance
-     (Trace         : not null access WisiToken.Trace'Class;
+     (Descriptor    : not null access constant WisiToken.Descriptor;
       Last_Terminal : Token_ID)
      is new WisiToken.Lexer.Instance with private;
 
    function New_Lexer
-     (Trace  : not null access WisiToken.Trace'Class;
-      Syntax : in              WisiToken.Lexer.Regexp.Syntax)
+     (Descriptor : not null access constant WisiToken.Descriptor;
+      Syntax     : in              WisiToken.Lexer.Regexp.Syntax)
      return WisiToken.Lexer.Handle;
 
    overriding procedure Finalize (Object : in out Instance);
-   overriding procedure Reset_With_String (Lexer : in out Instance; Input : in 
String);
+   overriding procedure Reset_With_String
+     (Lexer      : in out Instance;
+      Input      : in     String;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First);
    overriding procedure Reset_With_String_Access
-     (Lexer     : in out Instance;
-      Input     : in     Ada.Strings.Unbounded.String_Access;
-      File_Name : in     Ada.Strings.Unbounded.Unbounded_String);
-   overriding procedure Reset_With_File (Lexer : in out Instance; File_Name : 
in String);
+     (Lexer      : in out Instance;
+      Input      : access String;
+      File_Name  : in     Ada.Strings.Unbounded.Unbounded_String;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First);
+   overriding procedure Reset_With_File
+     (Lexer          : in out Instance;
+      File_Name      : in     String;
+      Begin_Byte_Pos : in     Buffer_Pos       := Invalid_Buffer_Pos;
+      End_Byte_Pos   : in     Buffer_Pos       := Invalid_Buffer_Pos;
+      Begin_Char     : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line     : in     Line_Number_Type := Line_Number_Type'First);
    overriding procedure Reset (Lexer : in out Instance);
 
    overriding procedure Discard_Rest_Of_Input (Lexer : in out Instance) is 
null;
@@ -87,9 +99,9 @@ private
    procedure Free is new Ada.Unchecked_Deallocation (String, String_Access);
 
    type Instance
-     (Trace         : not null access WisiToken.Trace'Class;
+     (Descriptor    : not null access constant WisiToken.Descriptor;
       Last_Terminal : Token_ID)
-     is new WisiToken.Lexer.Instance (Trace => Trace) with
+     is new WisiToken.Lexer.Instance (Descriptor => Descriptor) with
    record
       ID          : Token_ID; --  last token read by find_next
       Syntax      : WisiToken.Lexer.Regexp.Syntax (Token_ID'First .. 
Last_Terminal);
diff --git a/packages/wisi/wisitoken-lexer.adb 
b/packages/wisi/wisitoken-lexer.adb
index 8ceff80..f73d517 100644
--- a/packages/wisi/wisitoken-lexer.adb
+++ b/packages/wisi/wisitoken-lexer.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -53,4 +53,9 @@ package body WisiToken.Lexer is
       return -Source.File_Name;
    end File_Name;
 
+   function To_Char_Pos (Source : in Lexer.Source; Lexer_Char_Pos : in 
Integer) return Base_Buffer_Pos
+   is begin
+      return Base_Buffer_Pos (Lexer_Char_Pos) + 
Source.Buffer_Nominal_First_Char - Buffer_Pos'First;
+   end To_Char_Pos;
+
 end WisiToken.Lexer;
diff --git a/packages/wisi/wisitoken-lexer.ads 
b/packages/wisi/wisitoken-lexer.ads
index 0e9c6a1..7be10ed 100644
--- a/packages/wisi/wisitoken-lexer.ads
+++ b/packages/wisi/wisitoken-lexer.ads
@@ -2,7 +2,7 @@
 --
 --  An abstract lexer interface.
 --
---  Copyright (C) 2014 - 2015, 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2014 - 2015, 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -51,7 +51,7 @@ package WisiToken.Lexer is
 
    package Error_Lists is new Ada.Containers.Doubly_Linked_Lists (Error);
 
-   type Instance (Trace  : not null access WisiToken.Trace'Class)
+   type Instance (Descriptor  : not null access constant WisiToken.Descriptor)
    is abstract new Ada.Finalization.Limited_Controlled with record
       Errors : Error_Lists.List;
    end record;
@@ -60,19 +60,35 @@ package WisiToken.Lexer is
 
    type Handle is access all Class;
 
-   procedure Reset_With_String (Lexer : in out Instance; Input : in String) is 
abstract;
+   procedure Reset_With_String
+     (Lexer      : in out Instance;
+      Input      : in     String;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First)
+     is abstract;
    --  Reset Lexer to start a new parse, reading from Input.
 
    procedure Reset_With_String_Access
-     (Lexer     : in out Instance;
-      Input     : in     Ada.Strings.Unbounded.String_Access;
-      File_Name : in     Ada.Strings.Unbounded.Unbounded_String)
+     (Lexer      : in out Instance;
+      Input      : access String;
+      File_Name  : in     Ada.Strings.Unbounded.Unbounded_String;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First)
      is abstract;
-   --  Reset Lexer to start a new parse, reading from Input.
-   --  File_Name is used for error messages.
-
-   procedure Reset_With_File (Lexer : in out Instance; File_Name : in String) 
is abstract;
-   --  Reset Lexer to start a new parse, reading from File_Name.
+   --  Reset Lexer to start a new parse, reading from Input. File_Name is
+   --  used for error messages.
+
+   procedure Reset_With_File
+     (Lexer      : in out Instance;
+      File_Name  : in     String;
+      Begin_Pos  : in     Buffer_Pos       := Invalid_Buffer_Pos;
+      End_Pos    : in     Buffer_Pos       := Invalid_Buffer_Pos;
+      Begin_Char : in     Buffer_Pos       := Buffer_Pos'First;
+      Begin_Line : in     Line_Number_Type := Line_Number_Type'First)
+     is abstract;
+   --  Reset Lexer to start a new parse, reading from File_Name. If
+   --  Begin_Pos, End_Pos /= Invalid_Buffer_Pos, only parse that portion
+   --  of the file.
    --
    --  Raises Ada.IO_Exceptions.Name_Error if File_Name cannot be opened.
 
@@ -117,7 +133,7 @@ package WisiToken.Lexer is
    --  If the underlying text feeder does not support the notion of
    --  'line', returns Invalid_Line_Number.
    --
-   --  Token.Col is the column number of the start of the token, 1
+   --  Token.Column is the column number of the start of the token, 1
    --  indexed. If the underlying text feeder does not support the notion
    --  of 'line', returns byte position in internal buffer.
 
@@ -132,19 +148,28 @@ private
       File_Name : Ada.Strings.Unbounded.Unbounded_String;
       --  Not saved in Mapped_File, may be empty for String_Label
 
+      Buffer_Nominal_First_Byte : Buffer_Pos;
+      Buffer_Nominal_First_Char : Buffer_Pos;
+      Line_Nominal_First        : Line_Number_Type;
+
       case Label is
       when String_Label =>
-         Buffer      : Ada.Strings.Unbounded.String_Access;
+         Buffer      : access String;
          User_Buffer : Boolean := False;
          --  If User_Buffer is True, user provided buffer and will deallocate
          --  it. Otherwise we must deallocate it.
 
+         --  Buffer_Nominal_First, Line_Nominal_First are 1.
       when File_Label =>
 
          --  The input is memory mapped from the following, which must be 
closed:
          File        : GNATCOLL.Mmap.Mapped_File;
          Region      : GNATCOLL.Mmap.Mapped_Region;
          Buffer_Last : Positive;
+         --  Region always has first character at offset 0.
+
+         --  Buffer_Nominal_First is Begin_Pos. Line_Nominal_First is
+         --  Begin_Line.
       end case;
    end record;
 
@@ -157,5 +182,6 @@ private
    --  Source.Buffer_Last. Indexing is reliable.
 
    function File_Name (Source : in Lexer.Source) return String;
+   function To_Char_Pos (Source : in Lexer.Source; Lexer_Char_Pos : in 
Integer) return Base_Buffer_Pos;
 
 end WisiToken.Lexer;
diff --git a/packages/wisi/wisitoken-parse-lr-mckenzie_recover-base.ads 
b/packages/wisi/wisitoken-parse-lr-mckenzie_recover-base.ads
index e7592d4..c5d78ea 100644
--- a/packages/wisi/wisitoken-parse-lr-mckenzie_recover-base.ads
+++ b/packages/wisi/wisitoken-parse-lr-mckenzie_recover-base.ads
@@ -2,7 +2,7 @@
 --
 --  Base utilities for McKenzie_Recover
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -18,6 +18,7 @@
 pragma License (Modified_GPL);
 
 with Ada.Exceptions;
+with WisiToken.Parse.LR.Parser;
 with WisiToken.Parse.LR.Parser_Lists;
 private package WisiToken.Parse.LR.McKenzie_Recover.Base is
 
@@ -165,7 +166,7 @@ private package WisiToken.Parse.LR.McKenzie_Recover.Base is
    --  There is only one object of this type, declared in Recover. It
    --  provides appropriate access to Shared_Parser components.
    --
-   --  Since all the accesible objects are read-only (except Trace),
+   --  Since all the accessible objects are read-only (except Trace),
    --  there are no protected operations, and this is not a protected
    --  type.
 
diff --git a/packages/wisi/wisitoken-parse-lr-mckenzie_recover-explore.adb 
b/packages/wisi/wisitoken-parse-lr-mckenzie_recover-explore.adb
index f47ed68..56bd3fe 100644
--- a/packages/wisi/wisitoken-parse-lr-mckenzie_recover-explore.adb
+++ b/packages/wisi/wisitoken-parse-lr-mckenzie_recover-explore.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -18,6 +18,7 @@
 pragma License (Modified_GPL);
 
 with WisiToken.Parse.LR.McKenzie_Recover.Parse;
+with WisiToken.Parse.LR.Parser;
 package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
 
    procedure Do_Shift
@@ -28,13 +29,16 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
       Config            : in out          Configuration;
       State             : in              State_Index;
       ID                : in              Token_ID;
-      Cost_Delta        : in              Integer)
+      Cost_Delta        : in              Integer;
+      Strategy          : in              Strategies)
    is
       use all type SAL.Base_Peek_Type;
       McKenzie_Param : McKenzie_Param_Type renames Shared.Table.McKenzie_Param;
 
       Op : constant Config_Op := (Insert, ID, Config.Current_Shared_Token);
    begin
+      Config.Strategy_Counts (Strategy) := Config.Strategy_Counts (Strategy) + 
1;
+
       begin
          if Config.Current_Ops = No_Insert_Delete then
             Config.Ops.Append (Op);
@@ -60,6 +64,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
       end if;
 
       Config.Error_Token.ID := Invalid_Token_ID;
+      Config.Check_Status   := (Label => WisiToken.Semantic_Checks.Ok);
 
       Config.Stack.Push ((State, Syntax_Trees.Invalid_Node_Index, (ID, Virtual 
=> True, others => <>)));
       if Trace_McKenzie > Detail then
@@ -69,25 +74,26 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
       Local_Config_Heap.Add (Config);
    end Do_Shift;
 
-   function Do_Reduce_1
-     (Super             : not null access Base.Supervisor;
+   procedure Do_Reduce_1
+     (Label             : in              String;
+      Super             : not null access Base.Supervisor;
       Shared            : not null access Base.Shared;
       Parser_Index      : in              SAL.Peek_Type;
       Local_Config_Heap : in out          Config_Heaps.Heap_Type;
       Config            : in out          Configuration;
-      Action            : in              Reduce_Action_Rec)
-     return Non_Success_Status
+      Action            : in              Reduce_Action_Rec;
+      Do_Language_Fixes : in              Boolean := True)
    is
       use all type SAL.Base_Peek_Type;
-      --  Perform Action on Config, setting Config.Check_Status. If that is
-      --  not Ok, call Language_Fixes (which may enqueue configs),
-      --  return Abandon. Otherwise return Continue.
       use all type Semantic_Checks.Check_Status_Label;
       use all type WisiToken.Parse.LR.Parser.Language_Fixes_Access;
 
-      Table     : Parse_Table renames Shared.Table.all;
-      Nonterm   : Recover_Token;
-      New_State : Unknown_State_Index;
+      Prev_State : constant Unknown_State_Index := Config.Stack.Peek.State;
+
+      Descriptor : WisiToken.Descriptor renames Super.Trace.Descriptor.all;
+      Table      : Parse_Table renames Shared.Table.all;
+      Nonterm    : Recover_Token;
+      New_State  : Unknown_State_Index;
    begin
       Config.Check_Status := Parse.Reduce_Stack (Shared, Config.Stack, Action, 
Nonterm, Default_Virtual => True);
       case Config.Check_Status.Label is
@@ -98,11 +104,13 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
          Config.Error_Token       := Nonterm;
          Config.Check_Token_Count := Action.Token_Count;
 
-         if Shared.Language_Fixes /= null then
-            Shared.Language_Fixes
-              (Super.Trace.all, Shared.Lexer, Super.Label (Parser_Index), 
Shared.Table.all, Shared.Terminals.all,
-               Super.Parser_State (Parser_Index).Tree, Local_Config_Heap,
-               Config);
+         if Do_Language_Fixes then
+            if Shared.Language_Fixes /= null then
+               Shared.Language_Fixes
+                 (Super.Trace.all, Shared.Lexer, Super.Label (Parser_Index), 
Shared.Table.all, Shared.Terminals.all,
+                  Super.Parser_State (Parser_Index).Tree, Local_Config_Heap,
+                  Config);
+            end if;
          end if;
 
          --  Finish the reduce; ignore the check fail.
@@ -122,29 +130,36 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore 
is
       end if;
 
       Config.Stack.Push ((New_State, Syntax_Trees.Invalid_Node_Index, 
Nonterm));
-      return Continue;
+
+      if Trace_McKenzie > Extra and Label'Length > 0 then
+         Put_Line
+           (Super.Trace.all, Super.Label (Parser_Index), Label &
+              ": state" & State_Index'Image (Prev_State) & " reduce to " &
+              Image (Action.Production.LHS, Descriptor) & ", goto" &
+              State_Index'Image (New_State));
+      end if;
    end Do_Reduce_1;
 
    procedure Do_Reduce_2
-     (Super             : not null access Base.Supervisor;
+     (Label             : in              String;
+      Super             : not null access Base.Supervisor;
       Shared            : not null access Base.Shared;
       Parser_Index      : in              SAL.Peek_Type;
       Local_Config_Heap : in out          Config_Heaps.Heap_Type;
       Config            : in out          Configuration;
       Inserted_ID       : in              Token_ID;
-      Cost_Delta        : in              Integer)
+      Cost_Delta        : in              Integer;
+      Strategy          : in              Strategies)
    is
-      --  Perform reduce actions until shift Inserted_Token; if all succeed,
+      --  Perform reduce actions until shift Inserted_ID; if all succeed,
       --  add the final configuration to the heap. If a conflict is
       --  encountered, process the other action the same way. If a semantic
       --  check fails, enqueue possible solutions. For parse table error
       --  actions, or exception Bad_Config, just return.
 
       Table       : Parse_Table renames Shared.Table.all;
-      Next_Action : Parse_Action_Node_Ptr;
+      Next_Action : constant Parse_Action_Node_Ptr := Action_For (Table, 
Config.Stack (1).State, Inserted_ID);
    begin
-      Next_Action := Action_For (Table, Config.Stack (1).State, Inserted_ID);
-
       if Next_Action.Next /= null then
          --  There is a conflict; create a new config to shift or reduce.
          declare
@@ -154,15 +169,13 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore 
is
             case Action.Verb is
             when Shift =>
                Do_Shift
-                 (Super, Shared, Parser_Index, Local_Config_Heap, New_Config, 
Action.State, Inserted_ID, Cost_Delta);
+                 (Super, Shared, Parser_Index, Local_Config_Heap, New_Config, 
Action.State, Inserted_ID,
+                  Cost_Delta, Strategy);
 
             when Reduce =>
-               case Do_Reduce_1 (Super, Shared, Parser_Index, 
Local_Config_Heap, New_Config, Action) is
-               when Abandon =>
-                  null;
-               when Continue =>
-                  Do_Reduce_2 (Super, Shared, Parser_Index, Local_Config_Heap, 
New_Config, Inserted_ID, Cost_Delta);
-               end case;
+               Do_Reduce_1 (Label, Super, Shared, Parser_Index, 
Local_Config_Heap, New_Config, Action);
+               Do_Reduce_2 (Label, Super, Shared, Parser_Index, 
Local_Config_Heap, New_Config, Inserted_ID,
+                            Cost_Delta, Strategy);
 
             when Accept_It =>
                raise SAL.Programmer_Error with "found test case for Do_Reduce 
Accept_It conflict";
@@ -178,15 +191,12 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore 
is
       case Next_Action.Item.Verb is
       when Shift =>
          Do_Shift
-           (Super, Shared, Parser_Index, Local_Config_Heap, Config, 
Next_Action.Item.State, Inserted_ID, Cost_Delta);
+           (Super, Shared, Parser_Index, Local_Config_Heap, Config, 
Next_Action.Item.State, Inserted_ID,
+            Cost_Delta, Strategy);
 
       when Reduce =>
-         case Do_Reduce_1 (Super, Shared, Parser_Index, Local_Config_Heap, 
Config, Next_Action.Item) is
-         when Abandon =>
-            null;
-         when Continue =>
-            Do_Reduce_2 (Super, Shared, Parser_Index, Local_Config_Heap, 
Config, Inserted_ID, Cost_Delta);
-         end case;
+         Do_Reduce_1 (Label, Super, Shared, Parser_Index, Local_Config_Heap, 
Config, Next_Action.Item);
+         Do_Reduce_2 (Label, Super, Shared, Parser_Index, Local_Config_Heap, 
Config, Inserted_ID, Cost_Delta, Strategy);
 
       when Accept_It =>
          raise SAL.Programmer_Error with "found test case for Do_Reduce 
Accept_It";
@@ -416,6 +426,46 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
       return Abandon;
    end Check;
 
+   function Check_Reduce_To_Start
+     (Super        : not null access Base.Supervisor;
+      Shared       : not null access Base.Shared;
+      Parser_Index : in              SAL.Base_Peek_Type;
+      Orig_Config  : in              Configuration)
+     return Boolean
+      --  Returns True if Config reduces to the start nonterm.
+   is
+      Table : Parse_Table renames Shared.Table.all;
+
+      function To_Reduce_Action (Item : in Minimal_Action) return 
Reduce_Action_Rec
+      is begin
+         return (Reduce, (Item.Nonterm, 0), null, null, Item.Token_Count);
+      end To_Reduce_Action;
+
+      Local_Config_Heap : Config_Heaps.Heap_Type; -- never used, because 
Do_Language_Fixes is False.
+
+      Config : Configuration  := Orig_Config;
+      Action : Minimal_Action := Table.States 
(Config.Stack.Peek.State).Minimal_Complete_Action;
+   begin
+      loop
+         case Action.Verb is
+         when Pause =>
+            return True;
+
+         when Shift =>
+            return False;
+
+         when Reduce =>
+            Do_Reduce_1
+              ("", Super, Shared, Parser_Index, Local_Config_Heap, Config,
+               To_Reduce_Action (Action),
+               Do_Language_Fixes => False);
+
+            Action := Table.States 
(Config.Stack.Peek.State).Minimal_Complete_Action;
+         end case;
+         --  loop only exits via returns above
+      end loop;
+   end Check_Reduce_To_Start;
+
    procedure Try_Push_Back
      (Super             : not null access Base.Supervisor;
       Shared            : not null access Base.Shared;
@@ -482,7 +532,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
       use all type Ada.Containers.Count_Type;
 
       Table  : Parse_Table renames Shared.Table.all;
-      EOF_ID : Token_ID renames Super.Trace.Descriptor.EOF_ID;
+      EOF_ID : Token_ID renames Super.Trace.Descriptor.EOI_ID;
 
       --  Find terminal insertions from the current state's action_list to try.
       --
@@ -495,7 +545,6 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
 
       Cached_Config : Configuration;
       Cached_Action : Reduce_Action_Rec;
-      Cached_Status : Non_Success_Status;
       --  Most of the time, all the reductions in a state are the same. So
       --  we cache the first result. This includes one reduction; if an
       --  associated semantic check failed, this does not include the fixes.
@@ -509,8 +558,10 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
          begin
             if ID /= EOF_ID and then --  can't insert eof
               ID /= Invalid_Token_ID and then -- invalid when Verb = Error
-              (Config.Ops.Length = 0 or else -- don't insert an id we just 
pushed back; we know that failed.
-                 Config.Ops (Config.Ops.Last_Index) /= (Push_Back, ID, 
Config.Current_Shared_Token))
+              (Config.Ops.Length = 0 or else
+                 --  Don't insert an ID we just pushed back or deleted; we 
know that failed.
+                 (Config.Ops (Config.Ops.Last_Index) /= (Push_Back, ID, 
Config.Current_Shared_Token) and
+                    Config.Ops (Config.Ops.Last_Index) /= (Delete, ID, 
Config.Current_Shared_Token)))
             then
                case Action.Verb is
                when Shift =>
@@ -521,7 +572,9 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
                      New_Config.Check_Status   := (Label => 
WisiToken.Semantic_Checks.Ok);
 
                      Do_Shift
-                       (Super, Shared, Parser_Index, Local_Config_Heap, 
New_Config, Action.State, ID, Cost_Delta => 0);
+                       (Super, Shared, Parser_Index, Local_Config_Heap, 
New_Config, Action.State, ID,
+                        Cost_Delta => 0,
+                        Strategy   => Explore_Table);
                   end;
 
                when Reduce =>
@@ -532,26 +585,25 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore 
is
                         New_Config.Error_Token.ID := Invalid_Token_ID;
                         New_Config.Check_Status   := (Label => 
WisiToken.Semantic_Checks.Ok);
 
-                        Cached_Status := Do_Reduce_1
-                          (Super, Shared, Parser_Index, Local_Config_Heap, 
New_Config, Action);
+                        Do_Reduce_1 ("Insert", Super, Shared, Parser_Index, 
Local_Config_Heap, New_Config, Action);
                         Cached_Config := New_Config;
                         Cached_Action := Action;
 
-                        if Cached_Status = Continue then
-                           Do_Reduce_2
-                             (Super, Shared, Parser_Index, Local_Config_Heap, 
New_Config, ID, Cost_Delta => 0);
-                        end if;
+                        Do_Reduce_2
+                          ("Insert", Super, Shared, Parser_Index, 
Local_Config_Heap, New_Config, ID,
+                           Cost_Delta => 0,
+                           Strategy   => Explore_Table);
                      end;
 
                   else
-                     if Cached_Status = Continue then
-                        declare
-                           New_Config : Configuration := Cached_Config;
-                        begin
-                           Do_Reduce_2
-                             (Super, Shared, Parser_Index, Local_Config_Heap, 
New_Config, ID, Cost_Delta => 0);
-                        end;
-                     end if;
+                     declare
+                        New_Config : Configuration := Cached_Config;
+                     begin
+                        Do_Reduce_2
+                          ("Insert", Super, Shared, Parser_Index, 
Local_Config_Heap, New_Config, ID,
+                           Cost_Delta => 0,
+                           Strategy   => Explore_Table);
+                     end;
                   end if;
 
                when Accept_It =>
@@ -566,132 +618,171 @@ package body 
WisiToken.Parse.LR.McKenzie_Recover.Explore is
       end loop;
    end Insert_From_Action_List;
 
-   procedure Insert_Minimal_Complete_Actions
+   function Insert_Minimal_Complete_Actions
      (Super             : not null access Base.Supervisor;
       Shared            : not null access Base.Shared;
       Parser_Index      : in              SAL.Base_Peek_Type;
       Orig_Config       : in              Configuration;
       Local_Config_Heap : in out          Config_Heaps.Heap_Type)
+     return Integer
+      --  Returns count of terminals inserted; 0 if Orig_Config reduces to
+      --  the start nonterm.
    is
-      use all type SAL.Base_Peek_Type;
+      use all type Ada.Containers.Count_Type;
 
-      Table      : Parse_Table renames Shared.Table.all;
-      Descriptor : WisiToken.Descriptor renames Super.Trace.Descriptor.all;
+      Table        : Parse_Table renames Shared.Table.all;
+      Descriptor   : WisiToken.Descriptor renames Super.Trace.Descriptor.all;
+      Insert_Count : Integer := 0;
 
       Cost_Delta : constant Integer := -1;
 
-      type Work_Type is record
-         Config : Configuration;
-         Complete_Actions : Minimal_Action_Lists.List;
-      end record;
-
-      package Work_Queues is new SAL.Gen_Unbounded_Definite_Queues (Work_Type);
-
-      Work : Work_Queues.Queue;
-
-      function Reduce_Only (Item : in Minimal_Action_Lists.List) return 
Minimal_Action_Lists.List
-      is begin
-         return Result : Minimal_Action_Lists.List do
-            for Action of Item loop
-               if Action.Verb = Reduce then
-                  Result.Insert (Action);
-               end if;
-            end loop;
-         end return;
-      end Reduce_Only;
+      New_Config      : Configuration  := Orig_Config;
+      Complete_Action : Minimal_Action := Table.States 
(New_Config.Stack.Peek.State).Minimal_Complete_Action;
 
       function To_Reduce_Action (Item : in Minimal_Action) return 
Reduce_Action_Rec
       is begin
          return (Reduce, (Item.Nonterm, 0), null, null, Item.Token_Count);
       end To_Reduce_Action;
 
+      procedure Minimal_Do_Shift
+      is begin
+         if New_Config.Ops.Length > 0 and then
+           --  Don't insert an ID we just pushed back or deleted; we know that 
failed.
+           (New_Config.Ops (New_Config.Ops.Last_Index) =
+              (Push_Back, Complete_Action.ID, New_Config.Current_Shared_Token) 
or
+              New_Config.Ops (New_Config.Ops.Last_Index) =
+              (Delete, Complete_Action.ID, New_Config.Current_Shared_Token))
+         then
+            if Trace_McKenzie > Extra then
+               Put_Line
+                 (Super.Trace.all, Super.Label (Parser_Index), 
"Minimal_Complete_Actions abandoned " &
+                    Image (Complete_Action.ID, Descriptor));
+            end if;
+            pragma Assert (Insert_Count = 0);
+         else
+            if Trace_McKenzie > Extra then
+               Put_Line
+                 (Super.Trace.all, Super.Label (Parser_Index), 
"Minimal_Complete_Actions shift " &
+                    Image (Complete_Action.ID, Descriptor));
+            end if;
+            New_Config.Check_Status := (Label => WisiToken.Semantic_Checks.Ok);
+            Insert_Count            := Insert_Count + 1;
+
+            Do_Shift
+              (Super, Shared, Parser_Index, Local_Config_Heap, New_Config, 
Complete_Action.State, Complete_Action.ID,
+               Cost_Delta,
+               Strategy   => Minimal_Complete);
+         end if;
+      end Minimal_Do_Shift;
+
    begin
-      Work.Put ((Orig_Config, Table.States 
(Orig_Config.Stack.Peek.State).Minimal_Complete_Actions));
-      loop
-         exit when Work.Length = 0;
+      case Complete_Action.Verb is
+      when Pause =>
+         return 0;
+
+      when Reduce =>
+         --  Do a reduce, look at resulting state. Keep reducing until we can't
+         --  anymore.
          declare
-            Item : constant Work_Type := Work.Get;
+            Reduce_Action : Reduce_Action_Rec := To_Reduce_Action 
(Complete_Action);
          begin
-            for Action of Item.Complete_Actions loop
-               case Action.Verb is
-               when Reduce =>
-                  --  Do a reduce, look at resulting state. Keep reducing 
until we can't
-                  --  anymore (ignoring possible shifts along the way; we are 
looking
-                  --  for the _minimal_ terminals to insert).
-                  declare
-                     use all type Ada.Containers.Count_Type;
-                     New_Config    : Configuration     := Item.Config;
-                     Reduce_Action : Reduce_Action_Rec := To_Reduce_Action 
(Action);
+            loop
+               Do_Reduce_1
+                 ("Minimal_Complete_Actions", Super, Shared, Parser_Index, 
Local_Config_Heap, New_Config, Reduce_Action,
+                  Do_Language_Fixes => False);
 
-                     Temp_Actions : Minimal_Action_Lists.List;
-                  begin
-                     loop
-                        case Do_Reduce_1 (Super, Shared, Parser_Index, 
Local_Config_Heap, New_Config, Reduce_Action) is
-                        when Abandon =>
-                           goto Abandon_Reduce;
+               Complete_Action := Table.States 
(New_Config.Stack.Peek.State).Minimal_Complete_Action;
 
-                        when Continue =>
-                           if Trace_McKenzie > Extra then
-                              Put_Line
-                                (Super.Trace.all, Super.Label (Parser_Index), 
"Minimal_Complete_Actions reduce to" &
-                                   State_Index'Image 
(New_Config.Stack.Peek.State) & ", " &
-                                   Image (Reduce_Action.Production.LHS, 
Descriptor));
-                           end if;
+               case Complete_Action.Verb is
+               when Pause =>
+                  return 0;
+               when Shift =>
+                  Minimal_Do_Shift;
+                  return Insert_Count;
+               when Reduce =>
+                  null;
+               end case;
 
-                           Temp_Actions := Reduce_Only
-                             (Table.States 
(New_Config.Stack.Peek.State).Minimal_Complete_Actions);
+               Reduce_Action := To_Reduce_Action
+                 (Table.States 
(New_Config.Stack.Peek.State).Minimal_Complete_Action);
+            end loop;
+         end;
 
-                           exit when Temp_Actions.Length = 0;
+      when Shift =>
+         Minimal_Do_Shift;
+      end case;
+      return Insert_Count;
+   end Insert_Minimal_Complete_Actions;
 
-                           Reduce_Action := To_Reduce_Action 
(Temp_Actions.Pop);
+   procedure Insert_Matching_Begin
+     (Super                : not null access Base.Supervisor;
+      Shared               : not null access Base.Shared;
+      Parser_Index         : in              SAL.Base_Peek_Type;
+      Config               : in              Configuration;
+      Local_Config_Heap    : in out          Config_Heaps.Heap_Type;
+      Matching_Begin_Token : in              Token_ID)
+   is
+      Descriptor : WisiToken.Descriptor renames Super.Trace.Descriptor.all;
+      New_Config : Configuration                  := Config;
 
-                           if Temp_Actions.Length > 0 then
-                              if Trace_McKenzie > Extra then
-                                 Put_Line
-                                   (Super.Trace.all, Super.Label 
(Parser_Index),
-                                    "Minimal_Complete_Actions add work item");
-                              end if;
-                              Work.Put ((New_Config, Temp_Actions));
-                           end if;
-                        end case;
-                     end loop;
+      Action     : constant Parse_Action_Node_Ptr := Action_For
+        (Shared.Table.all, New_Config.Stack (1).State, Matching_Begin_Token);
+   begin
+      if Trace_McKenzie > Extra then
+         Put_Line
+           (Super.Trace.all, Super.Label (Parser_Index), "Matching_Begin 
insert " &
+              Image (Matching_Begin_Token, Descriptor));
+      end if;
 
-                     Insert_Minimal_Complete_Actions (Super, Shared, 
Parser_Index, New_Config, Local_Config_Heap);
+      case Action.Item.Verb is
+      when Shift =>
+         Do_Shift
+           (Super, Shared, Parser_Index, Local_Config_Heap, New_Config, 
Action.Item.State,
+            Matching_Begin_Token,
+            Cost_Delta => -1,
+            Strategy   => Matching_Begin);
 
-                     <<Abandon_Reduce>>
-                  end;
+      when Reduce =>
+         Do_Reduce_1
+           ("Matching_Begin", Super, Shared, Parser_Index, Local_Config_Heap, 
New_Config, Action.Item,
+            Do_Language_Fixes => False);
 
-               when Shift =>
-                  if Trace_McKenzie > Extra then
-                     Put_Line
-                       (Super.Trace.all, Super.Label (Parser_Index), 
"Minimal_Complete_Actions shift " &
-                          Image (Action.ID, Descriptor));
-                  end if;
-                  declare
-                     New_Config : Configuration := Item.Config;
-                  begin
-                     New_Config.Check_Status := (Label => 
WisiToken.Semantic_Checks.Ok);
+         Do_Reduce_2
+           ("Matching_Begin", Super, Shared, Parser_Index, Local_Config_Heap, 
New_Config, Matching_Begin_Token,
+            Cost_Delta => -1,
+            Strategy   => Matching_Begin);
 
-                     Do_Shift
-                       (Super, Shared, Parser_Index, Local_Config_Heap, 
New_Config, Action.State, Action.ID,
-                        Cost_Delta);
-                  end;
-               end case;
-            end loop;
-         end;
-      end loop;
-   end Insert_Minimal_Complete_Actions;
+      when Error | Accept_It =>
+         if Trace_McKenzie > Extra then
+            Put_Line
+              (Super.Trace.all, Super.Label (Parser_Index), "Matching_Begin 
abandoned " &
+                 Image (Matching_Begin_Token, Descriptor));
+         end if;
+      end case;
+   end Insert_Matching_Begin;
 
    procedure Try_Insert_Terminal
-     (Super                      : not null access Base.Supervisor;
-      Shared                     : not null access Base.Shared;
-      Parser_Index               : in              SAL.Base_Peek_Type;
-      Config                     : in              Configuration;
-      Local_Config_Heap          : in out          Config_Heaps.Heap_Type;
-      Use_Minimal_Complete_Actions : in              Boolean)
+     (Super                        : not null access Base.Supervisor;
+      Shared                       : not null access Base.Shared;
+      Parser_Index                 : in              SAL.Base_Peek_Type;
+      Config                       : in              Configuration;
+      Local_Config_Heap            : in out          Config_Heaps.Heap_Type;
+      Use_Minimal_Complete_Actions : in              Boolean;
+      Matching_Begin_Token         : in              Token_ID)
    is begin
       if Use_Minimal_Complete_Actions then
-         Insert_Minimal_Complete_Actions (Super, Shared, Parser_Index, Config, 
Local_Config_Heap);
+         if 0 = Insert_Minimal_Complete_Actions (Super, Shared, Parser_Index, 
Config, Local_Config_Heap) then
+            if Matching_Begin_Token /= Invalid_Token_ID then
+               Insert_Matching_Begin (Super, Shared, Parser_Index, Config, 
Local_Config_Heap, Matching_Begin_Token);
+            else
+               Insert_From_Action_List (Super, Shared, Parser_Index, Config, 
Local_Config_Heap);
+            end if;
+         else
+            --  We _do not_ do Insert_From_Action_list when
+            --  Insert_Minimal_Complete inserted something; let it try again 
next
+            --  cycle.
+            null;
+         end if;
       else
          Insert_From_Action_List (Super, Shared, Parser_Index, Config, 
Local_Config_Heap);
       end if;
@@ -714,7 +805,6 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
       Local_Config_Heap : in out          Config_Heaps.Heap_Type)
    is
       use all type Parser.Language_String_ID_Set_Access;
-      use all type Lexer.Error_Lists.Cursor;
 
       Descriptor  : WisiToken.Descriptor renames Shared.Trace.Descriptor.all;
       Check_Limit : Token_Index renames 
Shared.Table.McKenzie_Param.Check_Limit;
@@ -724,10 +814,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
       Lexer_Error_Token       : Base_Token;
 
       function Recovered_Lexer_Error (Line : in Line_Number_Type) return 
Base_Token_Index
-      is
-         use WisiToken.Lexer;
-         use WisiToken.Lexer.Error_Lists;
-      begin
+      is begin
          --  We are assuming the list of lexer errors is short, so binary
          --  search would not be significantly faster.
          for Err of reverse Shared.Lexer.Errors loop
@@ -842,6 +929,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore is
             end if;
          end if;
 
+         Config.Strategy_Counts (String_Quote) := Config.Strategy_Counts 
(String_Quote) + 1;
+
          if Trace_McKenzie > Detail then
             Base.Put ("insert missing quote " & Label & " ", Super, Shared, 
Parser_Index, New_Config);
          end if;
@@ -1034,7 +1123,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore 
is
    is
       --  Try deleting (= skipping) the current shared input token.
       Trace       : WisiToken.Trace'Class renames Super.Trace.all;
-      EOF_ID      : Token_ID renames Trace.Descriptor.EOF_ID;
+      EOF_ID      : Token_ID renames Trace.Descriptor.EOI_ID;
       Check_Limit : Token_Index renames 
Shared.Table.McKenzie_Param.Check_Limit;
 
       McKenzie_Param : McKenzie_Param_Type renames Shared.Table.McKenzie_Param;
@@ -1060,6 +1149,10 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore 
is
 
             New_Config.Ops.Append ((Delete, ID, Config.Current_Shared_Token));
             New_Config.Current_Shared_Token := New_Config.Current_Shared_Token 
+ 1;
+            loop
+               exit when not Super.Parser_State 
(Parser_Index).Prev_Deleted.Contains (New_Config.Current_Shared_Token);
+               New_Config.Current_Shared_Token := 
New_Config.Current_Shared_Token + 1;
+            end loop;
 
             if New_Config.Resume_Token_Goal - Check_Limit < 
New_Config.Current_Shared_Token then
                New_Config.Resume_Token_Goal := New_Config.Current_Shared_Token 
+ Check_Limit;
@@ -1092,6 +1185,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore 
is
       use all type Parser.Language_Fixes_Access;
       use all type SAL.Base_Peek_Type;
       use all type Semantic_Checks.Check_Status_Label;
+      use all type 
WisiToken.Parse.LR.Parser.Language_Use_Minimal_Complete_Actions_Access;
 
       Trace      : WisiToken.Trace'Class renames Super.Trace.all;
       Descriptor : WisiToken.Descriptor renames Super.Trace.Descriptor.all;
@@ -1104,24 +1198,13 @@ package body 
WisiToken.Parse.LR.McKenzie_Recover.Explore is
       --  We collect all the variants to enqueue, then deliver them all at
       --  once to Super, to minimizes task interactions.
 
-      Use_Minimal_Complete_Actions : Boolean := False;
+      Use_Minimal_Complete_Actions : Boolean  := False;
+      Matching_Begin_Token         : Token_ID := Invalid_Token_ID;
 
       function Allow_Insert_Terminal (Config : in Configuration) return Boolean
-      is
-         use all type Ada.Containers.Count_Type;
-         use all type 
WisiToken.Parse.LR.Parser.Language_Use_Minimal_Complete_Actions_Access;
-      begin
-         if Shared.Language_Use_Minimal_Complete_Actions = null then
-            return None_Since_FF (Config.Ops, Delete);
-         end if;
-
-         Use_Minimal_Complete_Actions := 
Shared.Language_Use_Minimal_Complete_Actions
-           (Current_Token_ID_Peek
-              (Shared.Terminals.all, Config.Current_Shared_Token, 
Config.Insert_Delete, Config.Current_Insert_Delete),
-            Config);
-
+      is begin
          if Use_Minimal_Complete_Actions then
-            if Table.States 
(Config.Stack.Peek.State).Minimal_Complete_Actions.Length = 0 then
+            if Table.States 
(Config.Stack.Peek.State).Minimal_Complete_Action.Verb = Pause then
                --  This happens when there is an extra token after an 
acceptable
                --  grammar statement. There is no production to complete, so 
try
                --  other things.
@@ -1180,7 +1263,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Explore 
is
             if Config.Check_Status.Label = Ok then
                --  Parse table Error action.
                --
-               --  We don't clear Config.Error_Token here, because Try_Insert 
calls
+               --  We don't clear Config.Error_Token here, because 
Try_Insert_Terminal calls
                --  Language_Use_Minimal_Complete_Actions, which needs it. We 
only clear it
                --  when a parse results in no error (or a different error), or 
a
                --  push_back moves the Current_Token.
@@ -1262,15 +1345,37 @@ package body 
WisiToken.Parse.LR.McKenzie_Recover.Explore is
       --
       --  All possible permutations will be explored.
 
-      if None_Since_FF (Config.Ops, Delete) and
-        None_Since_FF (Config.Ops, Insert) and
-        Config.Stack.Depth > 1 -- can't delete the first state
+      if Shared.Language_Use_Minimal_Complete_Actions = null then
+         Use_Minimal_Complete_Actions := False;
+         Matching_Begin_Token         := Invalid_Token_ID;
+      else
+         declare
+            Current_Token : Token_ID;
+            Next_Token : Token_ID;
+         begin
+            Current_Token_ID_Peek_2
+              (Shared.Terminals.all, Config.Current_Shared_Token, 
Config.Insert_Delete, Config.Current_Insert_Delete,
+               Super.Parser_State (Parser_Index).Prev_Deleted, Current_Token, 
Next_Token);
+
+            Shared.Language_Use_Minimal_Complete_Actions
+              (Current_Token, Next_Token, Config,
+               Use_Complete         => Use_Minimal_Complete_Actions,
+               Matching_Begin_Token => Matching_Begin_Token);
+         end;
+      end if;
+
+      if None_Since_FF (Config.Ops, Delete) and then
+        None_Since_FF (Config.Ops, Insert) and then
+        Config.Stack.Depth > 1 and then -- can't delete the first state
+        (not (Use_Minimal_Complete_Actions and then Check_Reduce_To_Start 
(Super, Shared, Parser_Index, Config)))
+        --  If Config reduces to the start nonterm, there's no point in 
push_back.
       then
          Try_Push_Back (Super, Shared, Parser_Index, Config, 
Local_Config_Heap);
       end if;
 
       if Allow_Insert_Terminal (Config) then
-         Try_Insert_Terminal (Super, Shared, Parser_Index, Config, 
Local_Config_Heap, Use_Minimal_Complete_Actions);
+         Try_Insert_Terminal
+           (Super, Shared, Parser_Index, Config, Local_Config_Heap, 
Use_Minimal_Complete_Actions, Matching_Begin_Token);
       end if;
 
       if Config.Current_Insert_Delete = No_Insert_Delete then
diff --git a/packages/wisi/wisitoken-parse-lr-mckenzie_recover-parse.adb 
b/packages/wisi/wisitoken-parse-lr-mckenzie_recover-parse.adb
index c9a7475..52ee7f1 100644
--- a/packages/wisi/wisitoken-parse-lr-mckenzie_recover-parse.adb
+++ b/packages/wisi/wisitoken-parse-lr-mckenzie_recover-parse.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -82,7 +82,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Parse is
          return (Label => Ok);
       else
          return Status : constant Semantic_Checks.Check_Status :=
-           Action.Check (Shared.Lexer, Nonterm, Tokens)
+           Action.Check (Shared.Lexer, Nonterm, Tokens, Recover_Active => True)
          do
             if Status.Label = Ok then
                Stack.Pop (SAL.Base_Peek_Type (Action.Token_Count));
@@ -129,7 +129,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Parse is
          Terminals_Current         => Config.Current_Shared_Token,
          Restore_Terminals_Current => Restore_Terminals_Current,
          Insert_Delete             => Config.Insert_Delete,
-         Current_Insert_Delete     => Config.Current_Insert_Delete);
+         Current_Insert_Delete     => Config.Current_Insert_Delete,
+         Prev_Deleted              => Super.Parser_State 
(Parser_Index).Prev_Deleted);
 
       New_State : Unknown_State_Index;
       Success   : Boolean := True;
@@ -171,7 +172,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Parse is
             Put_Line
               (Trace, Super.Label (Parser_Index), Trace_Prefix & ":" & 
State_Index'Image (Config.Stack.Peek.State) &
                  " :" & Token_Index'Image (Config.Current_Shared_Token) &
-                 " : " & Image (Current_Token, Descriptor) &
+                 ":" & Image (Current_Token, Descriptor) &
                  " : " & Image (Action.Item, Descriptor));
          end if;
 
@@ -196,7 +197,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover.Parse is
                Terminals_Current         => Config.Current_Shared_Token,
                Restore_Terminals_Current => Restore_Terminals_Current,
                Insert_Delete             => Config.Insert_Delete,
-               Current_Insert_Delete     => Config.Current_Insert_Delete);
+               Current_Insert_Delete     => Config.Current_Insert_Delete,
+               Prev_Deleted              => Super.Parser_State 
(Parser_Index).Prev_Deleted);
 
          when Reduce =>
             declare
diff --git a/packages/wisi/wisitoken-parse-lr-mckenzie_recover.adb 
b/packages/wisi/wisitoken-parse-lr-mckenzie_recover.adb
index c92e2ed..31c6285 100644
--- a/packages/wisi/wisitoken-parse-lr-mckenzie_recover.adb
+++ b/packages/wisi/wisitoken-parse-lr-mckenzie_recover.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2017 - 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -20,44 +20,79 @@ pragma License (Modified_GPL);
 with Ada.Characters.Handling;
 with Ada.Exceptions;
 with Ada.Task_Identification;
+with Ada.Unchecked_Deallocation;
+with GNAT.Traceback.Symbolic;
 with System.Multiprocessors;
 with WisiToken.Parse.LR.McKenzie_Recover.Base;
 with WisiToken.Parse.LR.McKenzie_Recover.Explore;
 with WisiToken.Parse.LR.Parser_Lists;
 package body WisiToken.Parse.LR.McKenzie_Recover is
+   use all type System.Multiprocessors.CPU_Range;
 
-   task type Worker_Task
-     (Super  : not null access Base.Supervisor;
-      Shared : not null access Base.Shared)
-   is
-      entry Start;
-      --  Start getting parser/configs to check from Config_Store.
+   type Supervisor_Access is access all Base.Supervisor;
+   type Shared_Access is access all Base.Shared;
 
-      entry Done;
-      --  Available when task is ready to terminate; after this rendezvous,
-      --  task discriminants may be freed.
+   task type Worker_Task is
+      entry Start
+        (Super  : in Supervisor_Access;
+         Shared : in Shared_Access);
+      --  Start getting parser/configs to check from Config_Store. Stop when
+      --  Super reports All_Done;
 
+      entry Done;
+      --  Available after Super has reported All_Done.
    end Worker_Task;
 
+   type Worker_Access is access Worker_Task;
+   procedure Free is new Ada.Unchecked_Deallocation (Worker_Task, 
Worker_Access);
+
    task body Worker_Task
    is
       use all type Base.Config_Status;
-      Status : Base.Config_Status;
-   begin
-      accept Start;
+      Super  : Supervisor_Access;
+      Shared : Shared_Access;
 
+      Status : Base.Config_Status := Valid;
+   begin
       loop
-         Explore.Process_One (Super, Shared, Status);
+         select
+            accept Start
+              (Super  : in Supervisor_Access;
+               Shared : in Shared_Access)
+
+            do
+               Worker_Task.Super  := Super;
+               Worker_Task.Shared := Shared;
+            end Start;
+         or
+            terminate;
+         end select;
 
-         exit when Status = All_Done;
+         loop
+            Explore.Process_One (Super, Shared, Status);
+            exit when Status = All_Done;
+         end loop;
+
+         accept Done;
+
+         Super  := null;
+         Shared := null;
       end loop;
 
-      accept Done;
    exception
    when E : others =>
       Super.Fatal (E);
+      if Debug_Mode then
+         Shared.Trace.Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback 
(E));
+      end if;
    end Worker_Task;
 
+   Worker_Tasks : array (1 .. System.Multiprocessors.CPU_Range'Max (1, 
System.Multiprocessors.Number_Of_CPUs - 1)) of
+     Worker_Access;
+   --  Declaring an array of tasks directly causes a circular elaboration
+   --  problem, and would mean a task that terminates due to an exception
+   --  is never restarted.
+
    function To_Recover
      (Parser_Stack : in Parser_Lists.Parser_Stacks.Stack;
       Tree         : in Syntax_Trees.Tree)
@@ -165,7 +200,6 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
    is
       use all type Parser.Post_Recover_Access;
       use all type SAL.Base_Peek_Type;
-      use all type System.Multiprocessors.CPU_Range;
       Trace : WisiToken.Trace'Class renames Shared_Parser.Trace.all;
 
       Parsers : Parser_Lists.List renames Shared_Parser.Parsers;
@@ -191,21 +225,10 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
 
       Task_Count : constant System.Multiprocessors.CPU_Range :=
         (if Shared_Parser.Table.McKenzie_Param.Task_Count = 0
-         then System.Multiprocessors.CPU_Range'Max (1, 
System.Multiprocessors.Number_Of_CPUs - 1)
+         then Worker_Tasks'Last
          --  Keep one CPU free for this main task, and the user.
          else Shared_Parser.Table.McKenzie_Param.Task_Count);
 
-      Worker_Tasks : array (1 .. Task_Count) of Worker_Task (Super'Access, 
Shared'Access);
-
-      procedure Cleanup
-      is begin
-         for I in Worker_Tasks'Range loop
-            if Worker_Tasks (I)'Callable then
-               abort Worker_Tasks (I);
-            end if;
-         end loop;
-      end Cleanup;
-
    begin
       if Trace_McKenzie > Outline then
          Trace.New_Line;
@@ -223,29 +246,45 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
          Trace.Put_Line (System.Multiprocessors.CPU_Range'Image 
(Worker_Tasks'Last) & " parallel tasks");
       end if;
 
-      for I in Worker_Tasks'Range loop
-         Worker_Tasks (I).Start;
+      for I in Worker_Tasks'First .. Task_Count loop
+         if Worker_Tasks (I) = null then
+            Worker_Tasks (I) := new Worker_Task;
+            if Debug_Mode then
+               Trace.Put_Line ("new Worker_Task" & 
System.Multiprocessors.CPU_Range'Image (I));
+            end if;
+
+         elsif Worker_Tasks (I)'Terminated then
+            Free (Worker_Tasks (I));
+            Worker_Tasks (I) := new Worker_Task;
+            if Debug_Mode then
+               Trace.Put_Line ("recreated Worker_Task" & 
System.Multiprocessors.CPU_Range'Image (I));
+            end if;
+         end if;
+
+         Worker_Tasks (I).Start (Super'Unchecked_Access, 
Shared'Unchecked_Access);
       end loop;
 
       declare
          use Ada.Exceptions;
-         ID : Exception_Id;
+         ID      : Exception_Id;
          Message : Ada.Strings.Unbounded.Unbounded_String;
       begin
          Super.Done (ID, Message); -- Wait for all parsers to fail or succeed
+
+         --  Ensure all worker tasks stop getting configs before proceeding;
+         --  otherwise local variables disappear while the task is still trying
+         --  to access them.
+         for I in Worker_Tasks'First .. Task_Count loop
+            if not Worker_Tasks (I)'Terminated then
+               Worker_Tasks (I).Done;
+            end if;
+         end loop;
+
          if ID /= Null_Id then
             Raise_Exception (ID, -Message);
          end if;
       end;
 
-      --  Ensure all tasks terminate before proceeding; otherwise local
-      --  variables disappear while task is still trying to access them.
-      for I in Worker_Tasks'Range loop
-         if Worker_Tasks (I)'Callable then
-            Worker_Tasks (I).Done;
-         end if;
-      end loop;
-
       --  Adjust parser state for each successful recovery.
       --
       --  One option here would be to keep only the parser with the least
@@ -354,7 +393,20 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
                   Current_Token_Virtual : Boolean := False;
 
                   Sorted_Insert_Delete : Sorted_Insert_Delete_Arrays.Vector;
+
+                  procedure Apply_Prev_Token
+                  is begin
+                     loop
+                        exit when not Parser_State.Prev_Deleted.Contains 
(Parser_State.Shared_Token);
+                        Parser_State.Shared_Token := Parser_State.Shared_Token 
+ 1;
+                     end loop;
+                  end Apply_Prev_Token;
+
                begin
+                  --  The verb will be reset by the main parser; just indicate 
the
+                  --  parser recovered from the error.
+                  Parser_State.Set_Verb (Shift);
+
                   Parser_State.Errors (Parser_State.Errors.Last).Recover := 
Result;
 
                   Parser_State.Resume_Token_Goal := Result.Resume_Token_Goal;
@@ -393,6 +445,10 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
                   --  a Push_Back. See test_mckenzie_recover.adb 
Out_Of_Order_Ops for an
                   --  example.
                   --
+                  --  Push_Back can also go back past a previous error 
recovery; we must
+                  --  apply Parser_State.Prev_Deleted here as well, when 
computing
+                  --  Shared_Token.
+                  --
                   --  So first we go thru Ops to find the earliest Push_Back. 
Then we
                   --  apply ops that are before that point, up to the first 
Insert or
                   --  Fast_Forward. After that, we enqueue Insert and Delete 
ops on
@@ -510,6 +566,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
                         if Stack_Matches_Ops and Op.Token_Index = 
Parser_State.Shared_Token then
                            --  We can apply multiple deletes.
                            Parser_State.Shared_Token := Op.Token_Index + 1;
+                           Apply_Prev_Token;
                            Shared_Token_Changed      := True;
                         else
                            Sorted_Insert_Delete.Insert (Op);
@@ -528,6 +585,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
 
                         when Delete =>
                            Parser_State.Shared_Token := Op.Token_Index + 1;
+                           Apply_Prev_Token;
                            Shared_Token_Changed      := True;
                         end case;
                      else
@@ -536,46 +594,25 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
                   end loop;
 
                   --  If not Shared_Token_Changed, Shared_Token is the error 
token,
-                  --  which is the next token to read. If 
Shared_Token_Changed, we
-                  --  have set Shared_Token consistent with that; it is the 
next token to
-                  --  read.
+                  --  which is the next token to read. If 
Shared_Token_Changed, we have
+                  --  set Shared_Token consistent with that; it is the next 
token to
+                  --  read. If Current_Token_Virtual, then after all the 
virtual tokens
+                  --  are inserted, the main parser would normally increment
+                  --  Parser_State.Shared_Token to get the next token, but we 
don't want
+                  --  that now. We could set Shared_Token to 1 less, but this 
way the
+                  --  debug messages all show the expected Shared_Terminal.
+
+                  Parser_State.Inc_Shared_Token := not Current_Token_Virtual;
+
+                  --  The main parser always sets Current_Token to be the 
syntax tree
+                  --  node containing Shared_Token; ensure that is true here 
(virtual
+                  --  tokens where handled above).
 
                   if (not Current_Token_Virtual) and Shared_Token_Changed then
                      Parser_State.Current_Token := 
Parser_State.Tree.Add_Terminal
                        (Parser_State.Shared_Token, Shared_Parser.Terminals);
                   end if;
 
-                  --  Parser_State.Verb is the action that produced the 
current stack
-                  --  top. Parser_State.Inc_Shared_Token determines how to get 
the next
-                  --  token from Shared_Parser.Terminals.
-                  --
-                  --  If the stack top or Current_Token is virtual, then after 
all
-                  --  virtuals are inserted, the main parser would normally 
increment
-                  --  Parser_State.Shared_Token to get the next token. 
However, we have
-                  --  set Shared_Token to the next token, so we don't want it 
to
-                  --  increment. We could set Shared_Token to 1 less, but this 
way the
-                  --  debug messages all show the expected Shared_Terminal.
-
-                  if Parser_State.Stack (1).Token = 
Syntax_Trees.Invalid_Node_Index then
-                     --  a virtual token from a previous recover
-                     Parser_State.Set_Verb (Shift_Recover);
-                     Parser_State.Inc_Shared_Token := False;
-                  else
-                     case Tree.Label (Parser_State.Stack (1).Token) is
-                     when Syntax_Trees.Shared_Terminal =>
-                        Parser_State.Set_Verb (Shift_Recover);
-                        Parser_State.Inc_Shared_Token := not 
Current_Token_Virtual;
-
-                     when Syntax_Trees.Virtual_Terminal =>
-                        Parser_State.Set_Verb (Shift_Recover);
-                        Parser_State.Inc_Shared_Token := False;
-
-                     when Syntax_Trees.Nonterm =>
-                        Parser_State.Set_Verb (Reduce);
-                        Parser_State.Inc_Shared_Token := not 
Current_Token_Virtual;
-                     end case;
-                  end if;
-
                   if Trace_McKenzie > Extra then
                      Put_Line (Trace, Parser_State.Label, "after Ops 
applied:", Task_ID => False);
                      Put_Line
@@ -595,12 +632,6 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
                        (Trace, Parser_State.Label, "inc_shared_token " & 
Boolean'Image (Parser_State.Inc_Shared_Token) &
                           " parser verb " & All_Parse_Action_Verbs'Image 
(Parser_State.Verb),
                         Task_ID => False);
-
-                  elsif Trace_McKenzie > Outline then
-                     Put_Line
-                       (Trace, Parser_State.Label, "inc_shared_token " & 
Boolean'Image (Parser_State.Inc_Shared_Token) &
-                          " parser verb " & All_Parse_Action_Verbs'Image 
(Parser_State.Verb),
-                        Task_ID => False);
                   end if;
                end;
             exception
@@ -609,7 +640,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
                   --  Oops. just give up
                   return Fail_Programmer_Error;
                end if;
-               Parsers.Terminate_Parser (Current_Parser, "bad config in 
recover", Trace);
+               Parsers.Terminate_Parser (Current_Parser, "bad config in 
recover", Trace, Shared_Parser.Terminals);
             end;
          end if;
          Current_Parser.Next;
@@ -623,7 +654,6 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
 
    exception
    when others =>
-      Cleanup;
       return Fail_Programmer_Error;
    end Recover;
 
@@ -641,7 +671,8 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
       Terminals_Current         : in out WisiToken.Base_Token_Index;
       Restore_Terminals_Current :    out WisiToken.Base_Token_Index;
       Insert_Delete             : in out Sorted_Insert_Delete_Arrays.Vector;
-      Current_Insert_Delete     : in out SAL.Base_Peek_Type)
+      Current_Insert_Delete     : in out SAL.Base_Peek_Type;
+      Prev_Deleted              : in     Recover_Token_Index_Arrays.Vector)
      return Base_Token
    is
       use all type SAL.Base_Peek_Type;
@@ -656,7 +687,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
       end Inc_I_D;
 
    begin
-      if Terminals_Current = Base_Token_Index'First then
+      if Terminals_Current = Invalid_Token_Index then
          --  Happens with really bad syntax; see test_mckenzie_recover.adb 
Error_4.
          raise Bad_Config;
       end if;
@@ -679,7 +710,11 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
                   return (ID => Op.ID, others => <>);
 
                when Delete =>
-                  Terminals_Current         := Terminals_Current + 1;
+                  Terminals_Current    := Terminals_Current + 1;
+                  loop
+                     exit when not Prev_Deleted.Contains (Terminals_Current);
+                     Terminals_Current := Terminals_Current + 1;
+                  end loop;
                   Restore_Terminals_Current := Terminals_Current;
                   Inc_I_D;
                end case;
@@ -690,22 +725,35 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
       end loop;
    end Current_Token;
 
-   function Current_Token_ID_Peek
-     (Terminals             : in Base_Token_Arrays.Vector;
-      Terminals_Current     : in Base_Token_Index;
-      Insert_Delete         : in Sorted_Insert_Delete_Arrays.Vector;
-      Current_Insert_Delete : in SAL.Base_Peek_Type)
-     return Token_ID
+   procedure Current_Token_ID_Peek_2
+     (Terminals             : in     Base_Token_Arrays.Vector;
+      Terminals_Current     : in     Base_Token_Index;
+      Insert_Delete         : in     Sorted_Insert_Delete_Arrays.Vector;
+      Current_Insert_Delete : in     SAL.Base_Peek_Type;
+      Prev_Deleted          : in     Recover_Token_Index_Arrays.Vector;
+      Current_Token         :    out Token_ID;
+      Next_Token            :    out Token_ID)
    is
       use all type SAL.Base_Peek_Type;
+      Terminals_Next : Token_Index := Terminals_Current + 1;
    begin
       if Terminals_Current = Base_Token_Index'First then
          --  Happens with really bad syntax; see test_mckenzie_recover.adb 
Error_4.
          raise Bad_Config;
       end if;
 
+      loop
+         exit when not Prev_Deleted.Contains (Terminals_Next);
+         Terminals_Next := Terminals_Next + 1;
+      end loop;
+      if Terminals_Next <= Terminals.Last_Index then
+         Next_Token := Terminals (Terminals_Next).ID;
+      else
+         Next_Token := Invalid_Token_ID;
+      end if;
+
       if Current_Insert_Delete = No_Insert_Delete then
-         return Terminals (Terminals_Current).ID;
+         Current_Token := Terminals (Terminals_Current).ID;
 
       elsif Insert_Delete (Current_Insert_Delete).Token_Index = 
Terminals_Current then
          declare
@@ -713,7 +761,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
          begin
             case Insert_Delete_Op_Label (Op.Op) is
             when Insert =>
-               return Op.ID;
+               Current_Token := Op.ID;
 
             when Delete =>
                --  This should have been handled in Check
@@ -721,9 +769,27 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
             end case;
          end;
       else
-         return Terminals (Terminals_Current).ID;
+         Current_Token := Terminals (Terminals_Current).ID;
+      end if;
+
+      if Current_Insert_Delete = Insert_Delete.Last_Index then
+         null;
+
+      elsif Insert_Delete (Current_Insert_Delete + 1).Token_Index = 
Terminals_Current then
+         declare
+            Op : Insert_Delete_Op renames Insert_Delete (Current_Insert_Delete 
+ 1);
+         begin
+            case Insert_Delete_Op_Label (Op.Op) is
+            when Insert =>
+               Next_Token := Op.ID;
+
+            when Delete =>
+               --  This should have been handled in Check
+               raise SAL.Programmer_Error;
+            end case;
+         end;
       end if;
-   end Current_Token_ID_Peek;
+   end Current_Token_ID_Peek_2;
 
    procedure Delete (Config : in out Configuration; ID : in Token_ID)
    is
@@ -785,9 +851,10 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
    begin
       loop
          exit when Matching_Index = Config.Stack.Depth; -- Depth has 
Invalid_Token_ID
-         exit when ID_Set (Config.Stack (Matching_Index).Token.ID) and
-           (Config.Stack (Matching_Index).Tree_Index /= Invalid_Node_Index and 
then
-              Tree.Find_Descendant (Config.Stack (Matching_Index).Tree_Index, 
ID) /= Invalid_Node_Index);
+         exit when Config.Stack (Matching_Index).Token.ID in ID_Set'Range and 
then
+           (ID_Set (Config.Stack (Matching_Index).Token.ID) and
+              (Config.Stack (Matching_Index).Tree_Index /= Invalid_Node_Index 
and then
+                 Tree.Find_Descendant (Config.Stack 
(Matching_Index).Tree_Index, ID) /= Invalid_Node_Index));
 
          Matching_Index := Matching_Index + 1;
       end loop;
@@ -887,23 +954,33 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
       Terminals_Current         : in out Base_Token_Index;
       Restore_Terminals_Current : in out WisiToken.Base_Token_Index;
       Insert_Delete             : in out Sorted_Insert_Delete_Arrays.Vector;
-      Current_Insert_Delete     : in out SAL.Base_Peek_Type)
+      Current_Insert_Delete     : in out SAL.Base_Peek_Type;
+      Prev_Deleted              : in     Recover_Token_Index_Arrays.Vector)
      return Base_Token
    is
       use all type SAL.Base_Peek_Type;
+
+      function Next_Terminal return Base_Token
+      is begin
+         Terminals_Current    := Terminals_Current + 1;
+         loop
+            exit when not Prev_Deleted.Contains (Terminals_Current);
+            Terminals_Current := Terminals_Current + 1;
+         end loop;
+
+         Restore_Terminals_Current := Terminals_Current;
+         return Terminals (Terminals_Current);
+      end Next_Terminal;
+
    begin
       loop
          if Insert_Delete.Last_Index > 0 and then Current_Insert_Delete = 
Insert_Delete.Last_Index then
             Current_Insert_Delete     := No_Insert_Delete;
             Insert_Delete.Clear;
-            Terminals_Current         := Terminals_Current + 1;
-            Restore_Terminals_Current := Terminals_Current;
-            return Terminals (Terminals_Current);
+            return Next_Terminal;
 
          elsif Current_Insert_Delete = No_Insert_Delete then
-            Terminals_Current         := Terminals_Current + 1;
-            Restore_Terminals_Current := Terminals_Current;
-            return Terminals (Terminals_Current);
+            return Next_Terminal;
 
          elsif Insert_Delete (Current_Insert_Delete + 1).Token_Index = 
Terminals_Current + 1 then
             Current_Insert_Delete := Current_Insert_Delete + 1;
@@ -921,9 +998,7 @@ package body WisiToken.Parse.LR.McKenzie_Recover is
             end;
 
          else
-            Terminals_Current         := Terminals_Current + 1;
-            Restore_Terminals_Current := Terminals_Current;
-            return Terminals (Terminals_Current);
+            return Next_Terminal;
          end if;
       end loop;
    end Next_Token;
diff --git a/packages/wisi/wisitoken-parse-lr-mckenzie_recover.ads 
b/packages/wisi/wisitoken-parse-lr-mckenzie_recover.ads
index f92897b..eba872a 100644
--- a/packages/wisi/wisitoken-parse-lr-mckenzie_recover.ads
+++ b/packages/wisi/wisitoken-parse-lr-mckenzie_recover.ads
@@ -11,7 +11,7 @@
 --  [Grune 2008] Parsing Techniques, A Practical Guide, Second
 --  Edition. Dick Grune, Ceriel J.H. Jacobs.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -66,19 +66,22 @@ private
       Terminals_Current         : in out Base_Token_Index;
       Restore_Terminals_Current :    out WisiToken.Base_Token_Index;
       Insert_Delete             : in out Sorted_Insert_Delete_Arrays.Vector;
-      Current_Insert_Delete     : in out SAL.Base_Peek_Type)
+      Current_Insert_Delete     : in out SAL.Base_Peek_Type;
+      Prev_Deleted              : in     Recover_Token_Index_Arrays.Vector)
      return Base_Token;
    --  Return the current token, from either Terminals or Insert_Delete;
    --  set up for Next_Token.
    --
    --  See Next_Token for more info.
 
-   function Current_Token_ID_Peek
-     (Terminals             : in Base_Token_Arrays.Vector;
-      Terminals_Current     : in Base_Token_Index;
-      Insert_Delete         : in Sorted_Insert_Delete_Arrays.Vector;
-      Current_Insert_Delete : in SAL.Base_Peek_Type)
-     return Token_ID;
+   procedure Current_Token_ID_Peek_2
+     (Terminals             : in     Base_Token_Arrays.Vector;
+      Terminals_Current     : in     Base_Token_Index;
+      Insert_Delete         : in     Sorted_Insert_Delete_Arrays.Vector;
+      Current_Insert_Delete : in     SAL.Base_Peek_Type;
+      Prev_Deleted          : in     Recover_Token_Index_Arrays.Vector;
+      Current_Token         :    out Token_ID;
+      Next_Token            :    out Token_ID);
    --  Return the current token, from either Terminals or Insert_Delete,
    --  without setting up for Next_Token.
 
@@ -149,7 +152,8 @@ private
       Terminals_Current         : in out Base_Token_Index;
       Restore_Terminals_Current : in out WisiToken.Base_Token_Index;
       Insert_Delete             : in out Sorted_Insert_Delete_Arrays.Vector;
-      Current_Insert_Delete     : in out SAL.Base_Peek_Type)
+      Current_Insert_Delete     : in out SAL.Base_Peek_Type;
+      Prev_Deleted              : in     Recover_Token_Index_Arrays.Vector)
      return Base_Token;
    --  Return the next token, from either Terminals or Insert_Delete;
    --  update Terminals_Current or Current_Insert_Delete.
@@ -164,6 +168,9 @@ private
    --  Insert_Delete contains only Insert and Delete ops, in token_index
    --  order. Those ops are applied when Terminals_Current =
    --  op.token_index.
+   --
+   --  Prev_Deleted contains tokens deleted in previous recover
+   --  operations; those are skipped.
 
    procedure Push_Back (Config : in out Configuration);
    --  Pop the top Config.Stack item, set Config.Current_Shared_Token to
diff --git a/packages/wisi/wisitoken-parse-lr-parser.adb 
b/packages/wisi/wisitoken-parse-lr-parser.adb
index 9f8aa66..09df9ed 100644
--- a/packages/wisi/wisitoken-parse-lr-parser.adb
+++ b/packages/wisi/wisitoken-parse-lr-parser.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2002 - 2005, 2008 - 2015, 2017, 2018 Free Software 
Foundation, Inc.
+--  Copyright (C) 2002 - 2005, 2008 - 2015, 2017 - 2019 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -29,6 +29,7 @@ pragma License (Modified_GPL);
 
 with Ada.Calendar.Formatting;
 with Ada.Exceptions;
+with GNAT.Traceback.Symbolic;
 with WisiToken.Parse.LR.McKenzie_Recover;
 package body WisiToken.Parse.LR.Parser is
 
@@ -69,11 +70,12 @@ package body WisiToken.Parse.LR.Parser is
 
       else
          declare
-            Nonterm_Token  : Recover_Token := Parser_State.Tree.Recover_Token 
(Nonterm);
+            Nonterm_Token  : Recover_Token                := 
Parser_State.Tree.Recover_Token (Nonterm);
             Children_Token : constant Recover_Token_Array := 
Parser_State.Tree.Recover_Token_Array (Children_Tree);
-            Status : constant Semantic_Checks.Check_Status := Action.Check
-              (Lexer, Nonterm_Token, Children_Token);
+            Status         : Semantic_Checks.Check_Status;
          begin
+            Status := Action.Check (Lexer, Nonterm_Token, Children_Token, 
Recover_Active => False);
+
             Parser_State.Tree.Set_Name_Region (Nonterm, Nonterm_Token.Name);
 
             if Trace_Parse > Detail then
@@ -99,6 +101,11 @@ package body WisiToken.Parse.LR.Parser is
                   return Status.Label;
                end if;
             end case;
+         exception
+         when Partial_Parse =>
+            --  From Action.Check
+            Parser_State.Tree.Set_Root (Nonterm);
+            raise;
          end;
       end if;
    end Reduce_Stack_1;
@@ -180,7 +187,7 @@ package body WisiToken.Parse.LR.Parser is
 
          declare
             Expecting : constant Token_ID_Set := LR.Expecting
-              (Shared_Parser.Table.all, 
Current_Parser.State_Ref.Stack.Peek.State);
+              (Shared_Parser.Table.all, Parser_State.Stack.Peek.State);
          begin
             Parser_State.Errors.Append
               ((Label          => LR.Action,
@@ -193,7 +200,8 @@ package body WisiToken.Parse.LR.Parser is
             if Trace_Parse > Outline then
                Put
                  (Trace,
-                  Integer'Image (Current_Parser.Label) & ": expecting: " &
+                  Integer'Image (Current_Parser.Label) & ":" &
+                    Unknown_State_Index'Image (Parser_State.Stack.Peek.State) 
& ": expecting: " &
                     Image (Expecting, Trace.Descriptor.all));
                Trace.New_Line;
             end if;
@@ -209,7 +217,9 @@ package body WisiToken.Parse.LR.Parser is
    begin
       if Trace_Parse > Extra then
          Shared_Parser.Trace.Put_Line
-           (Integer'Image (Parser_State.Label) & ": recover_insert_delete: " &
+           (Integer'Image (Parser_State.Label) & ": shared_token:" & 
Token_Index'Image (Parser_State.Shared_Token) &
+              " inc_shared_token: " & Boolean'Image 
(Parser_State.Inc_Shared_Token) &
+              " recover_insert_delete: " &
               Image (Parser_State.Recover_Insert_Delete, 
Shared_Parser.Trace.Descriptor.all));
       end if;
 
@@ -221,8 +231,19 @@ package body WisiToken.Parse.LR.Parser is
             then Parser_State.Shared_Token + 1
             else Parser_State.Shared_Token)
          then
-            Parser_State.Shared_Token := Parser_State.Shared_Token + 1;
+            Parser_State.Shared_Token     := Parser_State.Shared_Token + 1;
+            --  We don't reset Inc_Shared_Token here; only after the next 
token is
+            --  actually used.
+            Parser_State.Prev_Deleted.Append 
(Parser_State.Recover_Insert_Delete.Peek.Token_Index);
             Parser_State.Recover_Insert_Delete.Drop;
+
+         elsif Parser_State.Prev_Deleted.Contains
+           ((if Parser_State.Inc_Shared_Token
+             then Parser_State.Shared_Token + 1
+             else Parser_State.Shared_Token))
+         then
+            Parser_State.Shared_Token := Parser_State.Shared_Token + 1;
+
          else
             exit;
          end if;
@@ -236,9 +257,6 @@ package body WisiToken.Parse.LR.Parser is
    --  Shift : some Parsers.Verb return Shift, all with the same current
    --  token in Shared_Parser.Terminals.
    --
-   --  Shift_Recover : some Parsers.Verb return Shift, with current
-   --  tokens virtual (inserted by error recovery).
-   --
    --  Pause : Resume is active, and this parser has reached Resume_Goal,
    --  so it is waiting for the others to catch up.
    --
@@ -254,36 +272,20 @@ package body WisiToken.Parse.LR.Parser is
    is
       use all type SAL.Base_Peek_Type;
 
-      Shift_Count         : SAL.Base_Peek_Type := 0;
-      Shift_Recover_Count : SAL.Base_Peek_Type := 0;
-      Shift_Virtual_Count : SAL.Base_Peek_Type := 0;
-      Accept_Count        : SAL.Base_Peek_Type := 0;
-      Error_Count         : SAL.Base_Peek_Type := 0;
-      Resume_Active       : Boolean            := False;
+      Shift_Count   : SAL.Base_Peek_Type := 0;
+      Accept_Count  : SAL.Base_Peek_Type := 0;
+      Error_Count   : SAL.Base_Peek_Type := 0;
+      Resume_Active : Boolean            := False;
    begin
       Zombie_Count := 0;
 
       for Parser_State of Shared_Parser.Parsers loop
          case Parser_State.Verb is
-         when Pause | Shift_Recover | Shift =>
+         when Pause | Shift =>
             Do_Deletes (Shared_Parser, Parser_State);
 
-            if Parser_State.Recover_Insert_Delete.Length > 0 and then
-              Parser_State.Recover_Insert_Delete.Peek.Op = Insert and then
-              Parser_State.Recover_Insert_Delete.Peek.Token_Index =
-              (if Parser_State.Inc_Shared_Token
-               then Parser_State.Shared_Token + 1
-               else Parser_State.Shared_Token)
-            then
-               --  Shifting a virtual token.
-               Shift_Virtual_Count := Shift_Virtual_Count + 1;
-               Shift_Recover_Count := Shift_Recover_Count + 1;
-               Parser_State.Set_Verb (Shift_Recover);
-
-            else
-               Shift_Count := Shift_Count + 1;
-               Parser_State.Set_Verb (Shift);
-            end if;
+            Shift_Count := Shift_Count + 1;
+            Parser_State.Set_Verb (Shift);
 
             if Parser_State.Resume_Active then
                if Parser_State.Resume_Token_Goal <= Parser_State.Shared_Token 
then
@@ -320,9 +322,6 @@ package body WisiToken.Parse.LR.Parser is
       elsif Shared_Parser.Parsers.Count = Error_Count + Zombie_Count then
          Verb := Error;
 
-      elsif Shift_Recover_Count > 0 then
-         Verb := Shift_Recover;
-
       elsif Shift_Count > 0 then
          Verb := Shift;
 
@@ -332,7 +331,7 @@ package body WisiToken.Parse.LR.Parser is
 
       if Resume_Active then
          for Parser_State of Shared_Parser.Parsers loop
-            if Parser_State.Verb in Shift | Shift_Recover and not 
Parser_State.Resume_Active then
+            if Parser_State.Verb = Shift and not Parser_State.Resume_Active 
then
                Parser_State.Set_Verb (Pause);
             end if;
          end loop;
@@ -397,10 +396,11 @@ package body WisiToken.Parse.LR.Parser is
 
       Trace : WisiToken.Trace'Class renames Shared_Parser.Trace.all;
 
-      Current_Verb   : All_Parse_Action_Verbs;
-      Current_Parser : Parser_Lists.Cursor;
-      Action         : Parse_Action_Node_Ptr;
-      Zombie_Count   : SAL.Base_Peek_Type;
+      Current_Verb    : All_Parse_Action_Verbs;
+      Error_Recovered : Boolean := False;
+      Current_Parser  : Parser_Lists.Cursor;
+      Action          : Parse_Action_Node_Ptr;
+      Zombie_Count    : SAL.Base_Peek_Type;
 
       procedure Check_Error (Check_Parser : in out Parser_Lists.Cursor)
       is begin
@@ -439,7 +439,8 @@ package body WisiToken.Parse.LR.Parser is
                   --  programmer error.
                   if Check_Parser.State_Ref.Conflict_During_Resume then
                      Shared_Parser.Parsers.Terminate_Parser
-                       (Check_Parser, "error in conflict during resume", 
Shared_Parser.Trace.all);
+                       (Check_Parser, "error in conflict during resume", 
Shared_Parser.Trace.all,
+                        Shared_Parser.Terminals);
                   else
                      raise SAL.Programmer_Error with "error during resume";
                   end if;
@@ -451,6 +452,10 @@ package body WisiToken.Parse.LR.Parser is
       end Check_Error;
 
    begin
+      if Debug_Mode then
+         Trace.Put_Clock ("start");
+      end if;
+
       if Shared_Parser.User_Data /= null then
          Shared_Parser.User_Data.Reset;
       end if;
@@ -496,34 +501,6 @@ package body WisiToken.Parse.LR.Parser is
                   end if;
 
                elsif Parser_State.Verb = Shift then
-                  if Parser_State.Inc_Shared_Token then
-                     --  Inc_Shared_Token is only set False by 
McKenzie_Recover; see there
-                     --  for when/why.
-                     Parser_State.Shared_Token := Parser_State.Shared_Token + 
1;
-                  else
-                     Parser_State.Inc_Shared_Token := True;
-                  end if;
-
-                  Parser_State.Current_Token := Parser_State.Tree.Add_Terminal
-                    (Parser_State.Shared_Token, Shared_Parser.Terminals);
-
-                  if Trace_Parse > Extra then
-                     Trace.Put_Line
-                       (Integer'Image (Parser_State.Label) & ": current_token" 
& Parser_State.Tree.Image
-                          (Parser_State.Current_Token, Trace.Descriptor.all));
-                  end if;
-               end if;
-            end loop;
-
-         when Shift_Recover =>
-            --  Same as Shift, except input a token inserted by error 
recovery, or
-            --  input from Shared_Parser.Terminals during error recovery.
-
-            for Parser_State of Shared_Parser.Parsers loop
-               --  We don't check for Verb = Error; during recovery, errors 
cause
-               --  parsers to terminate immediately.
-
-               if Parser_State.Verb = Shift_Recover then
                   if Parser_State.Recover_Insert_Delete.Length > 0 and then
                     Parser_State.Recover_Insert_Delete.Peek.Op = Insert and 
then
                     Parser_State.Recover_Insert_Delete.Peek.Token_Index =
@@ -534,19 +511,14 @@ package body WisiToken.Parse.LR.Parser is
                      Parser_State.Current_Token := 
Parser_State.Tree.Add_Terminal
                        (Parser_State.Recover_Insert_Delete.Get.ID);
 
-                     if Trace_Parse > Extra then
-                        Trace.Put_Line
-                          (Integer'Image (Parser_State.Label) & ": 
current_token" & Parser_State.Tree.Image
-                             (Parser_State.Current_Token, 
Trace.Descriptor.all));
-                     end if;
-
                   elsif (if Parser_State.Inc_Shared_Token
                          then Parser_State.Shared_Token + 1
                          else Parser_State.Shared_Token) <= 
Shared_Parser.Terminals.Last_Index
                   then
                      if Parser_State.Inc_Shared_Token then
-                        --  Inc_Shared_Token is only set False by 
McKenzie_Recover, see there
-                        --  for when/why.
+                        --  Inc_Shared_Token is only set False by 
McKenzie_Recover; see there
+                        --  for when/why. Don't increment past wisi_eoi 
(happens when input
+                        --  buffer is empty; test_mckenzie_recover.adb 
Empty_Comments).
                         Parser_State.Shared_Token := Parser_State.Shared_Token 
+ 1;
                      else
                         Parser_State.Inc_Shared_Token := True;
@@ -555,15 +527,12 @@ package body WisiToken.Parse.LR.Parser is
                      Parser_State.Current_Token := 
Parser_State.Tree.Add_Terminal
                        (Parser_State.Shared_Token, Shared_Parser.Terminals);
 
-                     if Trace_Parse > Extra then
-                        Trace.Put_Line
-                          (Integer'Image (Parser_State.Label) & ": 
current_token" & Parser_State.Tree.Image
-                             (Parser_State.Current_Token, 
Trace.Descriptor.all));
-                     end if;
+                  end if;
 
-                  else
-                     --  Set_Verb set the wrong verb.
-                     raise SAL.Programmer_Error;
+                  if Trace_Parse > Extra then
+                     Trace.Put_Line
+                       (Integer'Image (Parser_State.Label) & ": current_token" 
& Parser_State.Tree.Image
+                          (Parser_State.Current_Token, Trace.Descriptor.all));
                   end if;
                end if;
             end loop;
@@ -593,7 +562,8 @@ package body WisiToken.Parse.LR.Parser is
                      else
                         Temp := Current_Parser;
                         Current_Parser.Next;
-                        Shared_Parser.Parsers.Terminate_Parser (Temp, 
"zombie", Shared_Parser.Trace.all);
+                        Shared_Parser.Parsers.Terminate_Parser
+                          (Temp, "zombie", Shared_Parser.Trace.all, 
Shared_Parser.Terminals);
                      end if;
                      exit when Current_Parser.Is_Done;
                   end loop;
@@ -619,7 +589,8 @@ package body WisiToken.Parse.LR.Parser is
                         else
                            Temp := Current_Parser;
                            Current_Parser.Next;
-                           Shared_Parser.Parsers.Terminate_Parser (Temp, 
"zombie", Shared_Parser.Trace.all);
+                           Shared_Parser.Parsers.Terminate_Parser
+                             (Temp, "zombie", Shared_Parser.Trace.all, 
Shared_Parser.Terminals);
                         end if;
                         exit when Current_Parser.Is_Done;
                      end loop;
@@ -650,15 +621,12 @@ package body WisiToken.Parse.LR.Parser is
                            else
                               Temp := Current_Parser;
                               Current_Parser.Next;
-                              Shared_Parser.Parsers.Terminate_Parser (Temp, 
"errors", Shared_Parser.Trace.all);
+                              Shared_Parser.Parsers.Terminate_Parser
+                                (Temp, "errors", Shared_Parser.Trace.all, 
Shared_Parser.Terminals);
                            end if;
                            exit when Current_Parser.Is_Done;
                         end loop;
 
-                        if Trace_Parse > Outline then
-                           Trace.Put_Line ("ambiguous with error");
-                        end if;
-
                         exit Main_Loop;
 
                      else
@@ -684,7 +652,10 @@ package body WisiToken.Parse.LR.Parser is
             --  All parsers errored; attempt recovery
             declare
                use all type McKenzie_Recover.Recover_Status;
+
                Recover_Result : McKenzie_Recover.Recover_Status := 
McKenzie_Recover.Recover_Status'First;
+
+               Pre_Recover_Parser_Count : constant SAL.Base_Peek_Type := 
Shared_Parser.Parsers.Count;
             begin
                --  Recover algorithms expect current token at
                --  Parsers(*).Current_Token, will set
@@ -696,7 +667,13 @@ package body WisiToken.Parse.LR.Parser is
                   if Trace_Parse > Outline then
                      Trace.Put_Line ("recover");
                   end if;
+                  if Debug_Mode then
+                     Trace.Put_Clock ("pre-recover" & 
Shared_Parser.Parsers.Count'Img & " active");
+                  end if;
                   Recover_Result := McKenzie_Recover.Recover (Shared_Parser);
+                  if Debug_Mode then
+                     Trace.Put_Clock ("post-recover" & 
Shared_Parser.Parsers.Count'Img & " active");
+                  end if;
 
                   if Trace_Parse > Outline then
                      if Recover_Result = Success  then
@@ -712,84 +689,75 @@ package body WisiToken.Parse.LR.Parser is
                   if Ada.Text_IO.Is_Open (Shared_Parser.Recover_Log_File) then
                      declare
                         use Ada.Text_IO;
+                        Strategy_Counts : LR.Strategy_Counts := (others => 0);
                      begin
                         Put
                           (Shared_Parser.Recover_Log_File,
                            Ada.Calendar.Formatting.Image (Ada.Calendar.Clock) 
& " " &
                              McKenzie_Recover.Recover_Status'Image 
(Recover_Result) & " " &
-                             SAL.Base_Peek_Type'Image 
(Shared_Parser.Parsers.Count) & " '" &
+                             SAL.Base_Peek_Type'Image 
(Pre_Recover_Parser_Count) & " '" &
                              Shared_Parser.Lexer.File_Name & "'");
 
+                        Put (Shared_Parser.Recover_Log_File, '(');
                         for Parser of Shared_Parser.Parsers loop
+                           Accumulate (Parser.Recover, Strategy_Counts);
                            Put
                              (Shared_Parser.Recover_Log_File,
                               Integer'Image (Parser.Recover.Enqueue_Count) &
                                 Integer'Image (Parser.Recover.Check_Count) & " 
" &
                                 Boolean'Image (Parser.Recover.Success));
                         end loop;
+                        Put (Shared_Parser.Recover_Log_File, ')');
+
+                        Put (Shared_Parser.Recover_Log_File, Image 
(Strategy_Counts));
                         New_Line (Shared_Parser.Recover_Log_File);
                         Flush (Shared_Parser.Recover_Log_File);
                      end;
                   end if;
                else
                   if Trace_Parse > Outline then
-                     Trace.Put_Line ("recover disabled or not defined");
+                     Trace.Put_Line ("recover disabled");
                   end if;
                end if;
 
                if Recover_Result = Success then
-                  declare
-                     Shift_Recover_Count : Integer := 0;
-                  begin
-                     for Parser_State of Shared_Parser.Parsers loop
-                        Parser_State.Resume_Active          := True;
-                        Parser_State.Conflict_During_Resume := False;
+                  for Parser_State of Shared_Parser.Parsers loop
+                     Parser_State.Resume_Active          := True;
+                     Parser_State.Conflict_During_Resume := False;
 
-                        if Trace_Parse > Outline then
-                           Trace.Put_Line
-                             (Integer'Image (Parser_State.Label) & ": 
Current_Token " &
-                                Parser_State.Tree.Image 
(Parser_State.Current_Token, Trace.Descriptor.all) &
-                                " Shared_Token " & Image
-                                  (Parser_State.Shared_Token, 
Shared_Parser.Terminals, Trace.Descriptor.all));
-
-                           if Trace_Parse > Detail then
-                              Shared_Parser.Trace.Put_Line
-                                (Integer'Image (Parser_State.Label) & ": 
resume_active: True, token goal" &
-                                   Token_Index'Image 
(Parser_State.Resume_Token_Goal));
-                           end if;
+                     if Trace_Parse > Outline then
+                        Trace.Put_Line
+                          (Integer'Image (Parser_State.Label) & ": 
Current_Token " &
+                             Parser_State.Tree.Image 
(Parser_State.Current_Token, Trace.Descriptor.all) &
+                             " Shared_Token " & Image
+                               (Parser_State.Shared_Token, 
Shared_Parser.Terminals, Trace.Descriptor.all));
+
+                        if Trace_Parse > Detail then
+                           Shared_Parser.Trace.Put_Line
+                             (Integer'Image (Parser_State.Label) & ": 
resume_active: True, token goal" &
+                                Token_Index'Image 
(Parser_State.Resume_Token_Goal));
                         end if;
+                     end if;
 
-                        case Parser_State.Verb is
-                        when Shift_Recover =>
-                           Shift_Recover_Count := Shift_Recover_Count + 1;
-
-                           Parser_State.Zombie_Token_Count := 0;
-
-                        when Reduce =>
-                           Current_Verb := Reduce;
-
-                           Parser_State.Zombie_Token_Count := 0;
+                     Parser_State.Zombie_Token_Count := 0;
 
-                        when Error =>
-                           --  Force this parser to be terminated.
-                           if Shared_Parser.Enable_McKenzie_Recover then
-                              Parser_State.Zombie_Token_Count := 
Shared_Parser.Table.McKenzie_Param.Check_Limit + 1;
-                           end if;
+                     case Parser_State.Verb is
+                     when Reduce =>
+                        null;
 
-                        when Shift =>
-                           if Current_Verb /= Reduce then
-                              Current_Verb := Shift;
-                           end if;
+                     when Error =>
+                        --  Force this parser to be terminated.
+                        if Shared_Parser.Enable_McKenzie_Recover then
+                           Parser_State.Zombie_Token_Count := 
Shared_Parser.Table.McKenzie_Param.Check_Limit + 1;
+                        end if;
 
-                        when Pause | Accept_It =>
-                           raise SAL.Programmer_Error;
-                        end case;
-                     end loop;
+                     when Shift =>
+                        null;
 
-                     if Shift_Recover_Count > 0 then
-                        Current_Verb := Shift_Recover;
-                     end if;
-                  end;
+                     when Pause | Accept_It =>
+                        raise SAL.Programmer_Error;
+                     end case;
+                  end loop;
 
                else
                   --  Terminate with error. Parser_State has all the required 
info on
@@ -805,6 +773,12 @@ package body WisiToken.Parse.LR.Parser is
                   end loop;
                   raise WisiToken.Syntax_Error;
                end if;
+
+               --  Immediately execute Do_Action for Current_Token, since it 
changed
+               --  in error recovery; this sets Parser.Verb. This replaces the
+               --  execution of Do_Action that resulted in Error.
+               Error_Recovered := True;
+
             end;
          end case;
 
@@ -816,11 +790,16 @@ package body WisiToken.Parse.LR.Parser is
          loop
             exit Action_Loop when Current_Parser.Is_Done;
 
-            if Shared_Parser.Terminate_Same_State and
-              Current_Verb in Shift | Shift_Recover and
+            --  We don't check duplicate state during resume, because the 
tokens
+            --  inserted/deleted by error recover may cause initially duplicate
+            --  states to diverge.
+            if not Current_Parser.State_Ref.Resume_Active and
+              Shared_Parser.Terminate_Same_State and
+              Current_Verb = Shift and
               (for all Parser of Shared_Parser.Parsers => 
Parser.Recover_Insert_Delete.Count = 0)
             then
-               Shared_Parser.Parsers.Duplicate_State (Current_Parser, 
Shared_Parser.Trace.all);
+               Shared_Parser.Parsers.Duplicate_State
+                 (Current_Parser, Shared_Parser.Trace.all, 
Shared_Parser.Terminals);
                --  If Duplicate_State terminated Current_Parser, 
Current_Parser now
                --  points to the next parser. Otherwise it is unchanged.
             end if;
@@ -828,10 +807,14 @@ package body WisiToken.Parse.LR.Parser is
             exit Action_Loop when Current_Parser.Is_Done;
 
             if Trace_Parse > Extra then
-               Trace.Put_Line
-                 ("current_verb: " & Parse_Action_Verbs'Image (Current_Verb) &
-                    "," & Integer'Image (Current_Parser.Label) &
-                    ".verb: " & Parse_Action_Verbs'Image 
(Current_Parser.Verb));
+               if Error_Recovered then
+                  Trace.Put_Line (Integer'Image (Current_Parser.Label) & 
".error_recovered");
+               else
+                  Trace.Put_Line
+                    ("current_verb: " & Parse_Action_Verbs'Image 
(Current_Verb) &
+                       "," & Integer'Image (Current_Parser.Label) &
+                       ".verb: " & Parse_Action_Verbs'Image 
(Current_Parser.Verb));
+               end if;
             end if;
 
             --  Each branch of the following 'if' calls either 
Current_Parser.Free
@@ -850,10 +833,12 @@ package body WisiToken.Parse.LR.Parser is
 
                   Current_Parser.Next;
                else
-                  Shared_Parser.Parsers.Terminate_Parser (Current_Parser, 
"zombie", Shared_Parser.Trace.all);
+                  Shared_Parser.Parsers.Terminate_Parser
+                    (Current_Parser, "zombie", Shared_Parser.Trace.all, 
Shared_Parser.Terminals);
                end if;
 
-            elsif Current_Parser.Verb = Current_Verb then
+            elsif Current_Parser.Verb = Current_Verb or Error_Recovered then
+
                if Trace_Parse > Extra then
                   Parser_Lists.Put_Top_10 (Trace, Current_Parser);
                end if;
@@ -895,11 +880,13 @@ package body WisiToken.Parse.LR.Parser is
                            if Max_Parser = Current_Parser then
                               Current_Parser.Next;
                               Shared_Parser.Parsers.Terminate_Parser
-                                (Current_Parser, "too many parsers; max error 
repair cost", Trace);
+                                (Current_Parser, "too many parsers; max error 
repair cost", Trace,
+                                 Shared_Parser.Terminals);
                               exit Action_Loop;
                            else
                               Shared_Parser.Parsers.Terminate_Parser
-                                (Max_Parser, "too many parsers; max error 
repair cost", Trace);
+                                (Max_Parser, "too many parsers; max error 
repair cost", Trace,
+                                 Shared_Parser.Terminals);
                            end if;
                         end if;
                      end;
@@ -920,10 +907,16 @@ package body WisiToken.Parse.LR.Parser is
 
                   else
                      if Trace_Parse > Outline then
-                        Trace.Put_Line
-                          (Integer'Image (Current_Parser.Label) & ": spawn" &
-                             Integer'Image (Shared_Parser.Parsers.Last_Label + 
1) & ", (" &
-                             Trimmed_Image (1 + Integer 
(Shared_Parser.Parsers.Count)) & " active)");
+                        declare
+                           Parser_State : Parser_Lists.Parser_State renames 
Current_Parser.State_Ref;
+                        begin
+                           Trace.Put_Line
+                             (Integer'Image (Current_Parser.Label) & ": " &
+                                Trimmed_Image (Parser_State.Stack.Peek.State) 
& ": " &
+                                Parser_State.Tree.Image 
(Parser_State.Current_Token, Trace.Descriptor.all) & " : " &
+                                "spawn" & Integer'Image 
(Shared_Parser.Parsers.Last_Label + 1) & ", (" &
+                                Trimmed_Image (1 + Integer 
(Shared_Parser.Parsers.Count)) & " active)");
+                        end;
                      end if;
 
                      Shared_Parser.Parsers.Prepend_Copy (Current_Parser);
@@ -947,37 +940,62 @@ package body WisiToken.Parse.LR.Parser is
                Current_Parser.Next;
             end if;
          end loop Action_Loop;
+         Error_Recovered := False;
       end loop Main_Loop;
+      if Debug_Mode then
+         Trace.Put_Clock ("finish");
+      end if;
 
       --  We don't raise Syntax_Error for lexer errors, since they are all
       --  recovered, either by inserting a quote, or by ignoring the
       --  character.
    exception
-   when Syntax_Error | WisiToken.Parse_Error =>
+   when Syntax_Error | WisiToken.Parse_Error | Partial_Parse =>
+      if Debug_Mode then
+         Trace.Put_Clock ("finish - error");
+      end if;
       raise;
 
    when E : others =>
       declare
          Msg : constant String := Ada.Exceptions.Exception_Name (E) & ": " & 
Ada.Exceptions.Exception_Message (E);
       begin
-         --  Emacs displays errors in the *syntax-errors* buffer
-         Shared_Parser.Parsers.First_State_Ref.Errors.Append
-           ((Label          => LR.Message,
-             First_Terminal => Trace.Descriptor.First_Terminal,
-             Last_Terminal  => Trace.Descriptor.Last_Terminal,
-             Recover        => <>,
-             Msg            => +Msg));
+         if Shared_Parser.Parsers.Count > 0 then
+            --  Emacs displays errors in the *syntax-errors* buffer
+            Shared_Parser.Parsers.First_State_Ref.Errors.Append
+              ((Label          => LR.Message,
+                First_Terminal => Trace.Descriptor.First_Terminal,
+                Last_Terminal  => Trace.Descriptor.Last_Terminal,
+                Recover        => <>,
+                Msg            => +Msg));
+         end if;
+
+         if Debug_Mode then
+            Ada.Text_IO.Put_Line (GNAT.Traceback.Symbolic.Symbolic_Traceback 
(E));
+         end if;
 
          --  Emacs displays the exception message in the echo area; easy to 
miss
          raise WisiToken.Parse_Error with Msg;
       end;
    end Parse;
 
+   overriding function Tree (Shared_Parser : in Parser) return 
Syntax_Trees.Tree
+   is
+      use all type SAL.Base_Peek_Type;
+   begin
+      if Shared_Parser.Parsers.Count > 1 then
+         raise WisiToken.Parse_Error with "ambigous parse";
+      else
+         return Shared_Parser.Parsers.First_State_Ref.Tree;
+      end if;
+   end Tree;
+
    overriding
    procedure Execute_Actions (Parser : in out LR.Parser.Parser)
    is
       use all type SAL.Base_Peek_Type;
       use all type Syntax_Trees.User_Data_Access;
+      use all type WisiToken.Syntax_Trees.Semantic_Action;
 
       Descriptor : WisiToken.Descriptor renames Parser.Trace.Descriptor.all;
 
@@ -992,11 +1010,9 @@ package body WisiToken.Parse.LR.Parser is
          end if;
 
          declare
-            use all type Syntax_Trees.Semantic_Action;
             Tree_Children : constant Syntax_Trees.Valid_Node_Index_Array := 
Tree.Children (Node);
          begin
             Parser.User_Data.Reduce (Tree, Node, Tree_Children);
-
             if Tree.Action (Node) /= null then
                Tree.Action (Node) (Parser.User_Data.all, Tree, Node, 
Tree_Children);
             end if;
@@ -1005,33 +1021,34 @@ package body WisiToken.Parse.LR.Parser is
 
    begin
       if Parser.User_Data /= null then
-         if (for some Par of Parser.Parsers =>
-               (for some Err of Par.Errors => Any (Err.Recover.Ops, Delete)))
-         then
-            if Parser.Parsers.Count > 1 then
-               raise Syntax_Error with "ambiguous parse with deleted tokens; 
can't execute actions";
-            end if;
-            for Err of Parser.Parsers.First_State_Ref.Errors loop
-               for Op of Err.Recover.Ops loop
-                  case Op.Op is
-                  when Delete =>
-                     Parser.User_Data.Delete_Token (Op.Token_Index);
-                  when others =>
-                     null;
-                  end case;
-               end loop;
-            end loop;
+         if Parser.Parsers.Count > 1 then
+            raise Syntax_Error with "ambiguous parse; can't execute actions";
          end if;
 
-         for Parser_State of Parser.Parsers loop
+         declare
+            Parser_State : Parser_Lists.Parser_State renames 
Parser.Parsers.First_State_Ref.Element.all;
+         begin
             if Trace_Action > Outline then
                Parser.Trace.Put_Line
                  (Integer'Image (Parser_State.Label) & ": root node: " & 
Parser_State.Tree.Image
-                    (Parser_State.Tree.Root, Descriptor));
+                 (Parser_State.Tree.Root, Descriptor));
+            end if;
+
+            if (for some Err of Parser_State.Errors => Any (Err.Recover.Ops, 
Delete)) then
+               for Err of Parser_State.Errors loop
+                  for Op of Err.Recover.Ops loop
+                     case Op.Op is
+                     when Delete =>
+                        Parser.User_Data.Delete_Token (Op.Token_Index);
+                     when others =>
+                        null;
+                     end case;
+                  end loop;
+               end loop;
             end if;
 
             Parser_State.Tree.Process_Tree (Process_Node'Access);
-         end loop;
+         end;
       end if;
    end Execute_Actions;
 
diff --git a/packages/wisi/wisitoken-parse-lr-parser.ads 
b/packages/wisi/wisitoken-parse-lr-parser.ads
index f5b7405..3324165 100644
--- a/packages/wisi/wisitoken-parse-lr-parser.ads
+++ b/packages/wisi/wisitoken-parse-lr-parser.ads
@@ -5,7 +5,7 @@
 --  In a child package of Parser.LR partly for historical reasons,
 --  partly to allow McKenzie_Recover to be in a sibling package.
 --
---  Copyright (C) 2002, 2003, 2009, 2010, 2013-2015, 2017, 2018 Free Software 
Foundation, Inc.
+--  Copyright (C) 2002, 2003, 2009, 2010, 2013-2015, 2017 - 2019 Free Software 
Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -53,14 +53,19 @@ package WisiToken.Parse.LR.Parser is
    --  For an Error action, Config.Error_Token gives the terminal that
    --  caused the error.
 
-   type Language_Use_Minimal_Complete_Actions_Access is access function
-     (Next_Token : in Token_ID;
-      Config     : in Configuration)
-     return Boolean;
-   --  Return True if using Minimal_Complete_Actions is appropriate.
+   type Language_Use_Minimal_Complete_Actions_Access is access procedure
+     (Current_Token        : in     Token_ID;
+      Next_Token           : in     Token_ID;
+      Config               : in     Configuration;
+      Use_Complete         :    out Boolean;
+      Matching_Begin_Token :    out Token_ID);
+   --  Set Use_Complete True if using Minimal_Complete_Actions is
+   --  appropriate. Set Matching_Begin_Token to token that starts a production
+   --  matching Next_Token (and following tokens, if any).
    --
    --  For example, if Next_Token is a block end, return True to complete
-   --  the current statement/declaration as quickly as possible..
+   --  the current statement/declaration as quickly as possible, and
+   --  Matching_Begin_Token to the corresponding block begin.
 
    type Language_String_ID_Set_Access is access function
      (Descriptor        : in WisiToken.Descriptor;
@@ -131,8 +136,14 @@ package WisiToken.Parse.LR.Parser is
    --  For errors where no recovery is possible, raises Parse_Error with
    --  an appropriate error message.
 
+   overriding function Tree (Shared_Parser : in Parser) return 
Syntax_Trees.Tree;
+   --  If there is one parser in Parsers, return its tree. Otherwise,
+   --  raise Parse_Error for an ambiguous parse.
+
    overriding procedure Execute_Actions (Parser : in out LR.Parser.Parser);
-   --  Execute the grammar actions in Parser.
+   --  Call User_Data.Reduce on all nonterms in the syntax tree, then
+   --  User_Data.Delete_Token on any tokens deleted by error recovery,
+   --  then the grammar semantic actions.
 
    overriding function Any_Errors (Parser : in LR.Parser.Parser) return 
Boolean;
    --  Return True if any errors where encountered, recovered or not.
diff --git a/packages/wisi/wisitoken-parse-lr-parser_lists.adb 
b/packages/wisi/wisitoken-parse-lr-parser_lists.adb
index b2ba8be..590af07 100644
--- a/packages/wisi/wisitoken-parse-lr-parser_lists.adb
+++ b/packages/wisi/wisitoken-parse-lr-parser_lists.adb
@@ -2,7 +2,7 @@
 --
 --  see spec
 --
---  Copyright (C) 2014-2018  All Rights Reserved.
+--  Copyright (C) 2014 - 2019  All Rights Reserved.
 --
 --  The WisiToken package is free software; you can redistribute it
 --  and/or modify it under terms of the GNU General Public License as
@@ -140,19 +140,24 @@ package body WisiToken.Parse.LR.Parser_Lists is
    is begin
       return Parser_State_Lists.Constant_Reference (Cursor.Ptr).Verb;
    end Verb;
+
    procedure Terminate_Parser
-     (Parsers : in out List;
-      Current : in out Cursor'Class;
-      Message : in     String;
-      Trace   : in out WisiToken.Trace'Class)
+     (Parsers   : in out List;
+      Current   : in out Cursor'Class;
+      Message   : in     String;
+      Trace     : in out WisiToken.Trace'Class;
+      Terminals : in     Base_Token_Arrays.Vector)
    is
       use all type SAL.Base_Peek_Type;
+      State : Parser_State renames Parser_State_Lists.Constant_Reference 
(Current.Ptr).Element.all;
    begin
       if Trace_Parse > Outline then
          Trace.Put_Line
            (Integer'Image (Current.Label) & ": terminate (" &
               Trimmed_Image (Integer (Parsers.Count) - 1) & " active)" &
-              (if Message'Length > 0 then ": " & Message else ""));
+              ": " & Message & Image
+                (State.Tree.Min_Terminal_Index (State.Current_Token),
+                 Terminals, Trace.Descriptor.all));
       end if;
 
       Current.Free;
@@ -163,9 +168,10 @@ package body WisiToken.Parse.LR.Parser_Lists is
    end Terminate_Parser;
 
    procedure Duplicate_State
-     (Parsers : in out List;
-      Current : in out Cursor'Class;
-      Trace   : in out WisiToken.Trace'Class)
+     (Parsers   : in out List;
+      Current   : in out Cursor'Class;
+      Trace     : in out WisiToken.Trace'Class;
+      Terminals : in     Base_Token_Arrays.Vector)
    is
       use all type SAL.Base_Peek_Type;
       use all type Ada.Containers.Count_Type;
@@ -225,7 +231,7 @@ package body WisiToken.Parse.LR.Parser_Lists is
          --  terminated earlier.
          if Other.Total_Recover_Cost = Current.Total_Recover_Cost then
             if Other.Max_Recover_Ops_Length = Current.Max_Recover_Ops_Length 
then
-               Parsers.Terminate_Parser (Other, "duplicate state: random", 
Trace);
+               Parsers.Terminate_Parser (Other, "duplicate state: random", 
Trace, Terminals);
             else
                if Other.Max_Recover_Ops_Length > 
Current.Max_Recover_Ops_Length then
                   null;
@@ -233,7 +239,7 @@ package body WisiToken.Parse.LR.Parser_Lists is
                   Other := Cursor (Current);
                   Current.Next;
                end if;
-               Parsers.Terminate_Parser (Other, "duplicate state: ops length", 
Trace);
+               Parsers.Terminate_Parser (Other, "duplicate state: ops length", 
Trace, Terminals);
             end if;
          else
             if Other.Total_Recover_Cost > Current.Total_Recover_Cost then
@@ -242,7 +248,7 @@ package body WisiToken.Parse.LR.Parser_Lists is
                Other := Cursor (Current);
                Current.Next;
             end if;
-            Parsers.Terminate_Parser (Other, "duplicate state: cost", Trace);
+            Parsers.Terminate_Parser (Other, "duplicate state: cost", Trace, 
Terminals);
          end if;
       end if;
    end Duplicate_State;
@@ -290,6 +296,7 @@ package body WisiToken.Parse.LR.Parser_Lists is
          New_Item :=
            (Shared_Token           => Item.Shared_Token,
             Recover_Insert_Delete  => Item.Recover_Insert_Delete,
+            Prev_Deleted           => Item.Prev_Deleted,
             Current_Token          => Item.Current_Token,
             Inc_Shared_Token       => Item.Inc_Shared_Token,
             Stack                  => Item.Stack,
diff --git a/packages/wisi/wisitoken-parse-lr-parser_lists.ads 
b/packages/wisi/wisitoken-parse-lr-parser_lists.ads
index dcaa268..0dae578 100644
--- a/packages/wisi/wisitoken-parse-lr-parser_lists.ads
+++ b/packages/wisi/wisitoken-parse-lr-parser_lists.ads
@@ -2,7 +2,7 @@
 --
 --  Generalized LR parser state.
 --
---  Copyright (C) 2014-2015, 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2014-2015, 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -60,6 +60,11 @@ package WisiToken.Parse.LR.Parser_Lists is
       Recover_Insert_Delete : Config_Op_Queues.Queue;
       --  Tokens in that were inserted during error recovery, or should be
       --  deleted/skipped when read. Contains only Insert and Delete ops.
+      --  Used/emptied by main parse.
+
+      Prev_Deleted : Recover_Token_Index_Arrays.Vector;
+      --  Tokens deleted by previous error recovery; don't process in new
+      --  error recovery.
 
       Current_Token : Syntax_Trees.Node_Index := 
Syntax_Trees.Invalid_Node_Index;
       --  Current terminal, in Tree
@@ -131,19 +136,25 @@ package WisiToken.Parse.LR.Parser_Lists is
    function Verb (Cursor : in Parser_Lists.Cursor) return 
All_Parse_Action_Verbs;
 
    procedure Terminate_Parser
-     (Parsers : in out List;
-      Current : in out Cursor'Class;
-      Message : in     String;
-      Trace   : in out WisiToken.Trace'Class);
+     (Parsers   : in out List;
+      Current   : in out Cursor'Class;
+      Message   : in     String;
+      Trace     : in out WisiToken.Trace'Class;
+      Terminals : in     Base_Token_Arrays.Vector);
    --  Terminate Current. Current is set to no element.
+   --
+   --  Terminals is used to report the current token in the message.
 
    procedure Duplicate_State
-     (Parsers : in out List;
-      Current : in out Cursor'Class;
-      Trace   : in out WisiToken.Trace'Class);
+     (Parsers   : in out List;
+      Current   : in out Cursor'Class;
+      Trace     : in out WisiToken.Trace'Class;
+      Terminals : in     Base_Token_Arrays.Vector);
    --  If any other parser in Parsers has a stack equivalent to Current,
    --  Terminate one of them. Current is either unchanged, or advanced to
    --  the next parser.
+   --
+   --  Terminals is used to report the current token in the message.
 
    type State_Reference (Element : not null access Parser_State) is null record
    with Implicit_Dereference => Element;
@@ -212,11 +223,13 @@ package WisiToken.Parse.LR.Parser_Lists is
      (Container : aliased in List'Class;
       Position  :         in Parser_Node_Access)
      return Constant_Reference_Type;
+   pragma Inline (Constant_Reference);
 
    function Reference
      (Container : aliased in out List'Class;
       Position  :         in     Parser_Node_Access)
      return State_Reference;
+   pragma Inline (Reference);
 
    function Persistent_State_Ref (Position : in Parser_Node_Access) return 
State_Access;
 
diff --git a/packages/wisi/wisitoken-parse-lr-parser_no_recover.adb 
b/packages/wisi/wisitoken-parse-lr-parser_no_recover.adb
index 48d9e4f..d8ce31e 100644
--- a/packages/wisi/wisitoken-parse-lr-parser_no_recover.adb
+++ b/packages/wisi/wisitoken-parse-lr-parser_no_recover.adb
@@ -1,491 +1,511 @@
---  Abstract :
---
---  See spec.
---
---  Copyright (C) 2002 - 2005, 2008 - 2015, 2017, 2018 Free Software 
Foundation, Inc.
---
---  This file is part of the WisiToken package.
---
---  The WisiToken package is free software; you can redistribute it
---  and/or modify it under the terms of the GNU General Public License
---  as published by the Free Software Foundation; either version 3, or
---  (at your option) any later version. The WisiToken package is
---  distributed in the hope that it will be useful, but WITHOUT ANY
---  WARRANTY; without even the implied warranty of MERCHANTABILITY or
---  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
---  License for more details. You should have received a copy of the
---  GNU General Public License distributed with the WisiToken package;
---  see file GPL.txt. If not, write to the Free Software Foundation,
---  59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
---
---  As a special exception, if other files instantiate generics from
---  this unit, or you link this unit with other files to produce an
---  executable, this unit does not by itself cause the resulting
---  executable to be covered by the GNU General Public License. This
---  exception does not however invalidate any other reasons why the
---  executable file might be covered by the GNU Public License.
-
-pragma License (Modified_GPL);
-
-package body WisiToken.Parse.LR.Parser_No_Recover is
-
-   procedure Reduce_Stack_1
-     (Current_Parser : in     Parser_Lists.Cursor;
-      Action         : in     Reduce_Action_Rec;
-      Nonterm        :    out WisiToken.Syntax_Trees.Valid_Node_Index;
-      Trace          : in out WisiToken.Trace'Class)
-   is
-      use all type SAL.Base_Peek_Type;
-
-      Parser_State  : Parser_Lists.Parser_State renames 
Current_Parser.State_Ref.Element.all;
-      Children_Tree : Syntax_Trees.Valid_Node_Index_Array (1 .. 
SAL.Base_Peek_Type (Action.Token_Count));
-      --  for Set_Children.
-   begin
-      for I in reverse Children_Tree'Range loop
-         Children_Tree (I) := Parser_State.Stack.Pop.Token;
-      end loop;
-
-      Nonterm := Parser_State.Tree.Add_Nonterm
-        (Action.Production, Children_Tree, Action.Action, Default_Virtual => 
False);
-      --  Computes Nonterm.Byte_Region
-
-      if Trace_Parse > Detail then
-         Trace.Put_Line (Parser_State.Tree.Image (Nonterm, 
Trace.Descriptor.all, Include_Children => True));
-      end if;
-   end Reduce_Stack_1;
-
-   procedure Do_Action
-     (Action         : in Parse_Action_Rec;
-      Current_Parser : in Parser_Lists.Cursor;
-      Shared_Parser  : in Parser)
-   is
-      Parser_State : Parser_Lists.Parser_State renames 
Current_Parser.State_Ref;
-      Trace        : WisiToken.Trace'Class renames Shared_Parser.Trace.all;
-      Nonterm      : WisiToken.Syntax_Trees.Valid_Node_Index;
-   begin
-      if Trace_Parse > Detail then
-         Trace.Put
-           (Integer'Image (Current_Parser.Label) & ": " &
-              Trimmed_Image (Parser_State.Stack.Peek.State) & ": " &
-              Parser_State.Tree.Image (Parser_State.Current_Token, 
Trace.Descriptor.all) & " : ");
-         Put (Trace, Action);
-         Trace.New_Line;
-      end if;
-
-      case Action.Verb is
-      when Shift =>
-         Current_Parser.Set_Verb (Shift);
-         Parser_State.Stack.Push ((Action.State, Parser_State.Current_Token));
-         Parser_State.Tree.Set_State (Parser_State.Current_Token, 
Action.State);
-
-      when Reduce =>
-         Current_Parser.Set_Verb (Reduce);
-
-         Reduce_Stack_1 (Current_Parser, Action, Nonterm, Trace);
-
-         Parser_State.Stack.Push
-           ((State    => Goto_For
-               (Table => Shared_Parser.Table.all,
-                State => Parser_State.Stack (1).State,
-                ID    => Action.Production.LHS),
-             Token    => Nonterm));
-
-         Parser_State.Tree.Set_State (Nonterm, Parser_State.Stack (1).State);
-
-         if Trace_Parse > Detail then
-            Trace.Put_Line (" ... goto state " & Trimmed_Image 
(Parser_State.Stack.Peek.State));
-         end if;
-
-      when Accept_It =>
-         Current_Parser.Set_Verb (Accept_It);
-         Reduce_Stack_1
-           (Current_Parser,
-            (Reduce, Action.Production, Action.Action, Action.Check, 
Action.Token_Count),
-            Nonterm, Trace);
-
-         Parser_State.Tree.Set_Root (Nonterm);
-
-      when Error =>
-         Current_Parser.Set_Verb (Action.Verb);
-
-         --  We don't raise Syntax_Error here; another parser may be able to
-         --  continue.
-
-         declare
-            Expecting : constant Token_ID_Set := LR.Expecting
-              (Shared_Parser.Table.all, 
Current_Parser.State_Ref.Stack.Peek.State);
-         begin
-            Parser_State.Errors.Append
-              ((Label          => LR.Action,
-                First_Terminal => Trace.Descriptor.First_Terminal,
-                Last_Terminal  => Trace.Descriptor.Last_Terminal,
-                Error_Token    => Parser_State.Current_Token,
-                Expecting      => Expecting,
-                Recover        => (others => <>)));
-
-            if Trace_Parse > Outline then
-               Put
-                 (Trace,
-                  Integer'Image (Current_Parser.Label) & ": expecting: " &
-                    Image (Expecting, Trace.Descriptor.all));
-               Trace.New_Line;
-            end if;
-         end;
-      end case;
-   end Do_Action;
-
-   --  Return the type of parser cycle to execute.
-   --
-   --  Accept : all Parsers.Verb return Accept - done parsing.
-   --
-   --  Shift : some Parsers.Verb return Shift.
-   --
-   --  Reduce : some Parsers.Verb return Reduce.
-   --
-   --  Error : all Parsers.Verb return Error.
-   procedure Parse_Verb
-     (Shared_Parser : in out Parser;
-      Verb          :    out All_Parse_Action_Verbs)
-   is
-      use all type SAL.Base_Peek_Type;
-
-      Shift_Count  : SAL.Base_Peek_Type := 0;
-      Accept_Count : SAL.Base_Peek_Type := 0;
-      Error_Count  : SAL.Base_Peek_Type := 0;
-   begin
-      for Parser_State of Shared_Parser.Parsers loop
-         case Parser_State.Verb is
-         when Shift =>
-            Shift_Count := Shift_Count + 1;
-
-         when Reduce =>
-            Verb := Reduce;
-            return;
-
-         when Accept_It =>
-            Accept_Count := Accept_Count + 1;
-
-         when Error =>
-            Error_Count := Error_Count + 1;
-
-         when Pause | Shift_Recover =>
-            --  This is parser_no_recover
-            raise SAL.Programmer_Error;
-         end case;
-      end loop;
-
-      if Shared_Parser.Parsers.Count = Accept_Count then
-         Verb := Accept_It;
-
-      elsif Shared_Parser.Parsers.Count = Error_Count then
-         Verb := Error;
-
-      elsif Shift_Count > 0 then
-         Verb := Shift;
-
-      else
-         raise SAL.Programmer_Error;
-      end if;
-   end Parse_Verb;
-
-   ----------
-   --  Public subprograms, declaration order
-
-   overriding procedure Finalize (Object : in out Parser)
-   is begin
-      Free_Table (Object.Table);
-   end Finalize;
-
-   procedure New_Parser
-     (Parser               :    out          LR.Parser_No_Recover.Parser;
-      Trace                : not null access WisiToken.Trace'Class;
-      Lexer                : in              WisiToken.Lexer.Handle;
-      Table                : in              Parse_Table_Ptr;
-      User_Data            : in              
WisiToken.Syntax_Trees.User_Data_Access;
-      Max_Parallel         : in              SAL.Base_Peek_Type := 
Default_Max_Parallel;
-      First_Parser_Label   : in              Integer            := 1;
-      Terminate_Same_State : in              Boolean            := True)
-   is
-      use all type Syntax_Trees.User_Data_Access;
-   begin
-      Parser.Lexer                := Lexer;
-      Parser.Trace                := Trace;
-      Parser.Table                := Table;
-      Parser.User_Data            := User_Data;
-      Parser.Max_Parallel         := Max_Parallel;
-      Parser.First_Parser_Label   := First_Parser_Label;
-      Parser.Terminate_Same_State := Terminate_Same_State;
-
-      if User_Data /= null then
-         User_Data.Set_Lexer_Terminals (Lexer, 
Parser.Terminals'Unchecked_Access);
-      end if;
-   end New_Parser;
-
-   overriding procedure Parse (Shared_Parser : aliased in out Parser)
-   is
-      use all type Syntax_Trees.User_Data_Access;
-      use all type SAL.Base_Peek_Type;
-
-      Trace : WisiToken.Trace'Class renames Shared_Parser.Trace.all;
-
-      Current_Verb   : All_Parse_Action_Verbs;
-      Current_Parser : Parser_Lists.Cursor;
-      Action         : Parse_Action_Node_Ptr;
-
-      procedure Check_Error (Check_Parser : in out Parser_Lists.Cursor)
-      is begin
-         if Check_Parser.Verb = Error then
-            --  This parser errored on last input. This is how grammar 
conflicts
-            --  are resolved when the input text is valid, so we terminate this
-            --  parser.
-
-            if Shared_Parser.Parsers.Count = 1 then
-               raise Syntax_Error;
-            else
-               Shared_Parser.Parsers.Terminate_Parser (Check_Parser, "", 
Shared_Parser.Trace.all);
-            end if;
-         else
-            Check_Parser.Next;
-         end if;
-      end Check_Error;
-
-   begin
-      --  The user must call Lexer.Reset_* to set the input text.
-      Shared_Parser.Lex_All;
-
-      if Shared_Parser.User_Data /= null then
-         Shared_Parser.User_Data.Reset;
-      end if;
-      Shared_Parser.Shared_Tree.Clear;
-
-      Shared_Parser.Parsers := Parser_Lists.New_List
-        (Shared_Tree => Shared_Parser.Shared_Tree'Unchecked_Access);
-
-      Shared_Parser.Parsers.First.State_Ref.Stack.Push 
((Shared_Parser.Table.State_First, others => <>));
-
-      Main_Loop :
-      loop
-         --  exit on Accept_It action or syntax error.
-
-         Parse_Verb (Shared_Parser, Current_Verb);
-
-         case Current_Verb is
-         when Shift =>
-            --  All parsers just shifted a token; get the next token
-
-            for Parser_State of Shared_Parser.Parsers loop
-               Parser_State.Shared_Token  := Parser_State.Shared_Token + 1;
-               Parser_State.Current_Token := Parser_State.Tree.Add_Terminal
-                 (Parser_State.Shared_Token, Shared_Parser.Terminals);
-            end loop;
-
-         when Accept_It =>
-            --  All parsers accepted.
-            declare
-               Count : constant SAL.Base_Peek_Type := 
Shared_Parser.Parsers.Count;
-            begin
-               if Count = 1 then
-                  --  Nothing more to do
-                  if Trace_Parse > Outline then
-                     Trace.Put_Line (Integer'Image 
(Shared_Parser.Parsers.First.Label) & ": succeed");
-                  end if;
-                  exit Main_Loop;
-
-               else
-                  --  More than one parser is active; ambiguous parse.
-                  declare
-                     Token : Base_Token renames Shared_Parser.Terminals 
(Shared_Parser.Terminals.Last_Index);
-                  begin
-                     raise WisiToken.Parse_Error with Error_Message
-                       (Shared_Parser.Lexer.File_Name, Token.Line, 
Token.Column,
-                        "Ambiguous parse:" & SAL.Base_Peek_Type'Image (Count) 
& " parsers active.");
-                  end;
-               end if;
-            end;
-
-         when Reduce =>
-            null;
-
-         when Error =>
-            --  All parsers errored; terminate with error. Semantic_State has 
all
-            --  the required info (recorded by Error in Do_Action), so we just
-            --  raise the exception.
-            raise Syntax_Error;
-
-         when Pause | Shift_Recover =>
-            --  This is parser_no_recover
-            raise SAL.Programmer_Error;
-         end case;
-
-         --  We don't use 'for Parser_State of Parsers loop' here,
-         --  because terminate on error and spawn on conflict require
-         --  changing the parser list.
-         Current_Parser := Shared_Parser.Parsers.First;
-         loop
-            exit when Current_Parser.Is_Done;
-
-            if Shared_Parser.Terminate_Same_State and
-              Current_Verb = Shift
-            then
-               Shared_Parser.Parsers.Duplicate_State (Current_Parser, 
Shared_Parser.Trace.all);
-               --  If Duplicate_State terminated Current_Parser, 
Current_Parser now
-               --  points to the next parser. Otherwise it is unchanged.
-            end if;
-
-            exit when Current_Parser.Is_Done;
-
-            if Trace_Parse > Extra then
-               Trace.Put_Line
-                 ("current_verb: " & Parse_Action_Verbs'Image (Current_Verb) &
-                    "," & Integer'Image (Current_Parser.Label) &
-                    ".verb: " & Parse_Action_Verbs'Image 
(Current_Parser.Verb));
-            end if;
-
-            --  Each branch of the following 'if' calls either 
Current_Parser.Free
-            --  (which advances to the next parser) or Current_Parser.Next.
-
-            if Current_Parser.Verb = Current_Verb then
-               if Trace_Parse > Extra then
-                  Parser_Lists.Put_Top_10 (Trace, Current_Parser);
-               end if;
-
-               declare
-                  State : Parser_Lists.Parser_State renames 
Current_Parser.State_Ref.Element.all;
-               begin
-                  Action := Action_For
-                    (Table => Shared_Parser.Table.all,
-                     State => State.Stack.Peek.State,
-                     ID    => State.Tree.ID (State.Current_Token));
-               end;
-
-               if Action.Next /= null then
-                  --  Conflict; spawn a new parser (before modifying 
Current_Parser
-                  --  stack).
-
-                  if Shared_Parser.Parsers.Count = Shared_Parser.Max_Parallel 
then
-                     declare
-                        Parser_State : Parser_Lists.Parser_State renames 
Current_Parser.State_Ref;
-                        Token : Base_Token renames Shared_Parser.Terminals 
(Parser_State.Shared_Token);
-                     begin
-                        raise WisiToken.Parse_Error with Error_Message
-                          (Shared_Parser.Lexer.File_Name, Token.Line, 
Token.Column,
-                           ": too many parallel parsers required in grammar 
state" &
-                             State_Index'Image (Parser_State.Stack.Peek.State) 
&
-                             "; simplify grammar, or increase max-parallel (" &
-                             SAL.Base_Peek_Type'Image 
(Shared_Parser.Max_Parallel) & ")");
-                     end;
-                  else
-                     if Trace_Parse > Outline then
-                        Trace.Put_Line
-                          ("spawn parser from " & Trimmed_Image 
(Current_Parser.Label) &
-                             " (" & Trimmed_Image (1 + Integer 
(Shared_Parser.Parsers.Count)) & " active)");
-                     end if;
-
-                     Shared_Parser.Parsers.Prepend_Copy (Current_Parser);
-                     Do_Action (Action.Next.Item, Shared_Parser.Parsers.First, 
Shared_Parser);
-
-                     declare
-                        Temp : Parser_Lists.Cursor := 
Shared_Parser.Parsers.First;
-                     begin
-                        Check_Error (Temp);
-                     end;
-                  end if;
-               end if;
-
-               Do_Action (Action.Item, Current_Parser, Shared_Parser);
-               Check_Error (Current_Parser);
-
-            else
-               --  Current parser is waiting for others to catch up
-               Current_Parser.Next;
-            end if;
-         end loop;
-      end loop Main_Loop;
-
-      --  We don't raise Syntax_Error for lexer errors, since they are all
-      --  recovered, either by inserting a quote, or by ignoring the
-      --  character.
-   end Parse;
-
-   overriding procedure Execute_Actions (Parser : in out 
LR.Parser_No_Recover.Parser)
-   is
-      use all type Syntax_Trees.User_Data_Access;
-
-      procedure Process_Node
-        (Tree : in out Syntax_Trees.Tree;
-         Node : in     Syntax_Trees.Valid_Node_Index)
-      is
-         use all type Syntax_Trees.Node_Label;
-      begin
-         if Tree.Label (Node) /= Nonterm then
-            return;
-         end if;
-
-         declare
-            use all type Syntax_Trees.Semantic_Action;
-            Tree_Children : constant Syntax_Trees.Valid_Node_Index_Array := 
Tree.Children (Node);
-         begin
-            Parser.User_Data.Reduce (Tree, Node, Tree_Children);
-
-            if Tree.Action (Node) /= null then
-               Tree.Action (Node) (Parser.User_Data.all, Tree, Node, 
Tree_Children);
-            end if;
-         end;
-      end Process_Node;
-
-   begin
-      if Parser.User_Data /= null then
-         for Parser_State of Parser.Parsers loop
-            Parser_State.Tree.Process_Tree (Process_Node'Access);
-         end loop;
-      end if;
-   end Execute_Actions;
-
-   overriding function Any_Errors (Parser : in LR.Parser_No_Recover.Parser) 
return Boolean
-   is
-      use all type SAL.Base_Peek_Type;
-      use all type Ada.Containers.Count_Type;
-      Parser_State : Parser_Lists.Parser_State renames 
Parser.Parsers.First_Constant_State_Ref;
-   begin
-      pragma Assert (Parser_State.Tree.Flushed);
-      return Parser.Parsers.Count > 1 or Parser_State.Errors.Length > 0 or 
Parser.Lexer.Errors.Length > 0;
-   end Any_Errors;
-
-   overriding procedure Put_Errors (Parser : in LR.Parser_No_Recover.Parser)
-   is
-      use Ada.Text_IO;
-
-      Parser_State : Parser_Lists.Parser_State renames 
Parser.Parsers.First_Constant_State_Ref;
-      Descriptor   : WisiToken.Descriptor renames Parser.Trace.Descriptor.all;
-   begin
-      for Item of Parser.Lexer.Errors loop
-         Put_Line
-           (Current_Error,
-            Parser.Lexer.File_Name & ":0:0: lexer unrecognized character at" & 
Buffer_Pos'Image (Item.Char_Pos));
-      end loop;
-
-      for Item of Parser_State.Errors loop
-         case Item.Label is
-         when Action =>
-            declare
-               Token : Base_Token renames Parser.Terminals 
(Parser_State.Tree.Min_Terminal_Index (Item.Error_Token));
-            begin
-               Put_Line
-                 (Current_Error,
-                  Error_Message
-                    (Parser.Lexer.File_Name, Token.Line, Token.Column,
-                     "syntax error: expecting " & Image (Item.Expecting, 
Descriptor) &
-                       ", found '" & Parser.Lexer.Buffer_Text 
(Token.Byte_Region) & "'"));
-            end;
-
-         when Check =>
-            null;
-
-         when Message =>
-            Put_Line (Current_Error, -Item.Msg);
-         end case;
-
-      end loop;
-   end Put_Errors;
-
-end WisiToken.Parse.LR.Parser_No_Recover;
+--  Abstract :
+--
+--  See spec.
+--
+--  Copyright (C) 2002 - 2005, 2008 - 2015, 2017 - 2019 Free Software 
Foundation, Inc.
+--
+--  This file is part of the WisiToken package.
+--
+--  The WisiToken package is free software; you can redistribute it
+--  and/or modify it under the terms of the GNU General Public License
+--  as published by the Free Software Foundation; either version 3, or
+--  (at your option) any later version. The WisiToken package is
+--  distributed in the hope that it will be useful, but WITHOUT ANY
+--  WARRANTY; without even the implied warranty of MERCHANTABILITY or
+--  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+--  License for more details. You should have received a copy of the
+--  GNU General Public License distributed with the WisiToken package;
+--  see file GPL.txt. If not, write to the Free Software Foundation,
+--  59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+--
+--  As a special exception, if other files instantiate generics from
+--  this unit, or you link this unit with other files to produce an
+--  executable, this unit does not by itself cause the resulting
+--  executable to be covered by the GNU General Public License. This
+--  exception does not however invalidate any other reasons why the
+--  executable file might be covered by the GNU Public License.
+
+pragma License (Modified_GPL);
+
+package body WisiToken.Parse.LR.Parser_No_Recover is
+
+   procedure Reduce_Stack_1
+     (Current_Parser : in     Parser_Lists.Cursor;
+      Action         : in     Reduce_Action_Rec;
+      Nonterm        :    out WisiToken.Syntax_Trees.Valid_Node_Index;
+      Trace          : in out WisiToken.Trace'Class)
+   is
+      use all type SAL.Base_Peek_Type;
+
+      Parser_State  : Parser_Lists.Parser_State renames 
Current_Parser.State_Ref.Element.all;
+      Children_Tree : Syntax_Trees.Valid_Node_Index_Array (1 .. 
SAL.Base_Peek_Type (Action.Token_Count));
+      --  for Set_Children.
+   begin
+      for I in reverse Children_Tree'Range loop
+         Children_Tree (I) := Parser_State.Stack.Pop.Token;
+      end loop;
+
+      Nonterm := Parser_State.Tree.Add_Nonterm
+        (Action.Production, Children_Tree, Action.Action, Default_Virtual => 
False);
+      --  Computes Nonterm.Byte_Region
+
+      if Trace_Parse > Detail then
+         Trace.Put_Line (Parser_State.Tree.Image (Nonterm, 
Trace.Descriptor.all, Include_Children => True));
+      end if;
+   end Reduce_Stack_1;
+
+   procedure Do_Action
+     (Action         : in Parse_Action_Rec;
+      Current_Parser : in Parser_Lists.Cursor;
+      Shared_Parser  : in Parser)
+   is
+      Parser_State : Parser_Lists.Parser_State renames 
Current_Parser.State_Ref;
+      Trace        : WisiToken.Trace'Class renames Shared_Parser.Trace.all;
+      Nonterm      : WisiToken.Syntax_Trees.Valid_Node_Index;
+   begin
+      if Trace_Parse > Detail then
+         Trace.Put
+           (Integer'Image (Current_Parser.Label) & ": " &
+              Trimmed_Image (Parser_State.Stack.Peek.State) & ": " &
+              Parser_State.Tree.Image (Parser_State.Current_Token, 
Trace.Descriptor.all) & " : ");
+         Put (Trace, Action);
+         Trace.New_Line;
+      end if;
+
+      case Action.Verb is
+      when Shift =>
+         Current_Parser.Set_Verb (Shift);
+         Parser_State.Stack.Push ((Action.State, Parser_State.Current_Token));
+         Parser_State.Tree.Set_State (Parser_State.Current_Token, 
Action.State);
+
+      when Reduce =>
+         Current_Parser.Set_Verb (Reduce);
+
+         Reduce_Stack_1 (Current_Parser, Action, Nonterm, Trace);
+
+         Parser_State.Stack.Push
+           ((State    => Goto_For
+               (Table => Shared_Parser.Table.all,
+                State => Parser_State.Stack (1).State,
+                ID    => Action.Production.LHS),
+             Token    => Nonterm));
+
+         Parser_State.Tree.Set_State (Nonterm, Parser_State.Stack (1).State);
+
+         if Trace_Parse > Detail then
+            Trace.Put_Line (" ... goto state " & Trimmed_Image 
(Parser_State.Stack.Peek.State));
+         end if;
+
+      when Accept_It =>
+         Current_Parser.Set_Verb (Accept_It);
+         Reduce_Stack_1
+           (Current_Parser,
+            (Reduce, Action.Production, Action.Action, Action.Check, 
Action.Token_Count),
+            Nonterm, Trace);
+
+         Parser_State.Tree.Set_Root (Nonterm);
+
+      when Error =>
+         Current_Parser.Set_Verb (Action.Verb);
+
+         --  We don't raise Syntax_Error here; another parser may be able to
+         --  continue.
+
+         declare
+            Expecting : constant Token_ID_Set := LR.Expecting
+              (Shared_Parser.Table.all, 
Current_Parser.State_Ref.Stack.Peek.State);
+         begin
+            Parser_State.Errors.Append
+              ((Label          => LR.Action,
+                First_Terminal => Trace.Descriptor.First_Terminal,
+                Last_Terminal  => Trace.Descriptor.Last_Terminal,
+                Error_Token    => Parser_State.Current_Token,
+                Expecting      => Expecting,
+                Recover        => (others => <>)));
+
+            if Trace_Parse > Outline then
+               Put
+                 (Trace,
+                  Integer'Image (Current_Parser.Label) & ": expecting: " &
+                    Image (Expecting, Trace.Descriptor.all));
+               Trace.New_Line;
+            end if;
+         end;
+      end case;
+   end Do_Action;
+
+   --  Return the type of parser cycle to execute.
+   --
+   --  Accept : all Parsers.Verb return Accept - done parsing.
+   --
+   --  Shift : some Parsers.Verb return Shift.
+   --
+   --  Reduce : some Parsers.Verb return Reduce.
+   --
+   --  Error : all Parsers.Verb return Error.
+   procedure Parse_Verb
+     (Shared_Parser : in out Parser;
+      Verb          :    out All_Parse_Action_Verbs)
+   is
+      use all type SAL.Base_Peek_Type;
+
+      Shift_Count  : SAL.Base_Peek_Type := 0;
+      Accept_Count : SAL.Base_Peek_Type := 0;
+      Error_Count  : SAL.Base_Peek_Type := 0;
+   begin
+      for Parser_State of Shared_Parser.Parsers loop
+         case Parser_State.Verb is
+         when Shift =>
+            Shift_Count := Shift_Count + 1;
+
+         when Reduce =>
+            Verb := Reduce;
+            return;
+
+         when Accept_It =>
+            Accept_Count := Accept_Count + 1;
+
+         when Error =>
+            Error_Count := Error_Count + 1;
+
+         when Pause =>
+            --  This is parser_no_recover
+            raise SAL.Programmer_Error;
+         end case;
+      end loop;
+
+      if Shared_Parser.Parsers.Count = Accept_Count then
+         Verb := Accept_It;
+
+      elsif Shared_Parser.Parsers.Count = Error_Count then
+         Verb := Error;
+
+      elsif Shift_Count > 0 then
+         Verb := Shift;
+
+      else
+         raise SAL.Programmer_Error;
+      end if;
+   end Parse_Verb;
+
+   ----------
+   --  Public subprograms, declaration order
+
+   overriding procedure Finalize (Object : in out Parser)
+   is begin
+      Free_Table (Object.Table);
+   end Finalize;
+
+   procedure New_Parser
+     (Parser               :    out          LR.Parser_No_Recover.Parser;
+      Trace                : not null access WisiToken.Trace'Class;
+      Lexer                : in              WisiToken.Lexer.Handle;
+      Table                : in              Parse_Table_Ptr;
+      User_Data            : in              
WisiToken.Syntax_Trees.User_Data_Access;
+      Max_Parallel         : in              SAL.Base_Peek_Type := 
Default_Max_Parallel;
+      First_Parser_Label   : in              Integer            := 1;
+      Terminate_Same_State : in              Boolean            := True)
+   is
+      use all type Syntax_Trees.User_Data_Access;
+   begin
+      Parser.Lexer                := Lexer;
+      Parser.Trace                := Trace;
+      Parser.Table                := Table;
+      Parser.User_Data            := User_Data;
+      Parser.Max_Parallel         := Max_Parallel;
+      Parser.First_Parser_Label   := First_Parser_Label;
+      Parser.Terminate_Same_State := Terminate_Same_State;
+
+      if User_Data /= null then
+         User_Data.Set_Lexer_Terminals (Lexer, 
Parser.Terminals'Unchecked_Access);
+      end if;
+   end New_Parser;
+
+   overriding procedure Parse (Shared_Parser : aliased in out Parser)
+   is
+      use all type Syntax_Trees.User_Data_Access;
+      use all type SAL.Base_Peek_Type;
+
+      Trace : WisiToken.Trace'Class renames Shared_Parser.Trace.all;
+
+      Current_Verb   : All_Parse_Action_Verbs;
+      Current_Parser : Parser_Lists.Cursor;
+      Action         : Parse_Action_Node_Ptr;
+
+      procedure Check_Error (Check_Parser : in out Parser_Lists.Cursor)
+      is begin
+         if Check_Parser.Verb = Error then
+            --  This parser errored on last input. This is how grammar 
conflicts
+            --  are resolved when the input text is valid, so we terminate this
+            --  parser.
+
+            if Shared_Parser.Parsers.Count = 1 then
+               raise Syntax_Error;
+            else
+               Shared_Parser.Parsers.Terminate_Parser
+                 (Check_Parser, "", Shared_Parser.Trace.all, 
Shared_Parser.Terminals);
+            end if;
+         else
+            Check_Parser.Next;
+         end if;
+      end Check_Error;
+
+   begin
+      if Shared_Parser.User_Data /= null then
+         Shared_Parser.User_Data.Reset;
+      end if;
+
+      Shared_Parser.Lex_All;
+
+      Shared_Parser.Shared_Tree.Clear;
+
+      Shared_Parser.Parsers := Parser_Lists.New_List
+        (Shared_Tree => Shared_Parser.Shared_Tree'Unchecked_Access);
+
+      Shared_Parser.Parsers.First.State_Ref.Stack.Push 
((Shared_Parser.Table.State_First, others => <>));
+
+      Main_Loop :
+      loop
+         --  exit on Accept_It action or syntax error.
+
+         Parse_Verb (Shared_Parser, Current_Verb);
+
+         case Current_Verb is
+         when Shift =>
+            --  All parsers just shifted a token; get the next token
+
+            for Parser_State of Shared_Parser.Parsers loop
+               Parser_State.Shared_Token  := Parser_State.Shared_Token + 1;
+               Parser_State.Current_Token := Parser_State.Tree.Add_Terminal
+                 (Parser_State.Shared_Token, Shared_Parser.Terminals);
+            end loop;
+
+         when Accept_It =>
+            --  All parsers accepted.
+            declare
+               Count : constant SAL.Base_Peek_Type := 
Shared_Parser.Parsers.Count;
+            begin
+               if Count = 1 then
+                  --  Nothing more to do
+                  if Trace_Parse > Outline then
+                     Trace.Put_Line (Integer'Image 
(Shared_Parser.Parsers.First.Label) & ": succeed");
+                  end if;
+                  exit Main_Loop;
+
+               else
+                  --  More than one parser is active; ambiguous parse.
+                  declare
+                     Token : Base_Token renames Shared_Parser.Terminals 
(Shared_Parser.Terminals.Last_Index);
+                  begin
+                     raise WisiToken.Parse_Error with Error_Message
+                       (Shared_Parser.Lexer.File_Name, Token.Line, 
Token.Column,
+                        "Ambiguous parse:" & SAL.Base_Peek_Type'Image (Count) 
& " parsers active.");
+                  end;
+               end if;
+            end;
+
+         when Reduce =>
+            null;
+
+         when Error =>
+            --  All parsers errored; terminate with error. Semantic_State has 
all
+            --  the required info (recorded by Error in Do_Action), so we just
+            --  raise the exception.
+            raise Syntax_Error;
+
+         when Pause =>
+            --  This is parser_no_recover
+            raise SAL.Programmer_Error;
+         end case;
+
+         --  We don't use 'for Parser_State of Parsers loop' here,
+         --  because terminate on error and spawn on conflict require
+         --  changing the parser list.
+         Current_Parser := Shared_Parser.Parsers.First;
+         loop
+            exit when Current_Parser.Is_Done;
+
+            if Shared_Parser.Terminate_Same_State and
+              Current_Verb = Shift
+            then
+               Shared_Parser.Parsers.Duplicate_State
+                 (Current_Parser, Shared_Parser.Trace.all, 
Shared_Parser.Terminals);
+               --  If Duplicate_State terminated Current_Parser, 
Current_Parser now
+               --  points to the next parser. Otherwise it is unchanged.
+            end if;
+
+            exit when Current_Parser.Is_Done;
+
+            if Trace_Parse > Extra then
+               Trace.Put_Line
+                 ("current_verb: " & Parse_Action_Verbs'Image (Current_Verb) &
+                    "," & Integer'Image (Current_Parser.Label) &
+                    ".verb: " & Parse_Action_Verbs'Image 
(Current_Parser.Verb));
+            end if;
+
+            --  Each branch of the following 'if' calls either 
Current_Parser.Free
+            --  (which advances to the next parser) or Current_Parser.Next.
+
+            if Current_Parser.Verb = Current_Verb then
+               if Trace_Parse > Extra then
+                  Parser_Lists.Put_Top_10 (Trace, Current_Parser);
+               end if;
+
+               declare
+                  State : Parser_Lists.Parser_State renames 
Current_Parser.State_Ref.Element.all;
+               begin
+                  Action := Action_For
+                    (Table => Shared_Parser.Table.all,
+                     State => State.Stack.Peek.State,
+                     ID    => State.Tree.ID (State.Current_Token));
+               end;
+
+               if Action.Next /= null then
+                  --  Conflict; spawn a new parser (before modifying 
Current_Parser
+                  --  stack).
+
+                  if Shared_Parser.Parsers.Count = Shared_Parser.Max_Parallel 
then
+                     declare
+                        Parser_State : Parser_Lists.Parser_State renames 
Current_Parser.State_Ref;
+                        Token : Base_Token renames Shared_Parser.Terminals 
(Parser_State.Shared_Token);
+                     begin
+                        raise WisiToken.Parse_Error with Error_Message
+                          (Shared_Parser.Lexer.File_Name, Token.Line, 
Token.Column,
+                           ": too many parallel parsers required in grammar 
state" &
+                             State_Index'Image (Parser_State.Stack.Peek.State) 
&
+                             "; simplify grammar, or increase max-parallel (" &
+                             SAL.Base_Peek_Type'Image 
(Shared_Parser.Max_Parallel) & ")");
+                     end;
+                  else
+                     if Trace_Parse > Outline then
+                        Trace.Put_Line
+                          ("spawn parser from " & Trimmed_Image 
(Current_Parser.Label) &
+                             " (" & Trimmed_Image (1 + Integer 
(Shared_Parser.Parsers.Count)) & " active)");
+                     end if;
+
+                     Shared_Parser.Parsers.Prepend_Copy (Current_Parser);
+                     Do_Action (Action.Next.Item, Shared_Parser.Parsers.First, 
Shared_Parser);
+
+                     declare
+                        Temp : Parser_Lists.Cursor := 
Shared_Parser.Parsers.First;
+                     begin
+                        Check_Error (Temp);
+                     end;
+                  end if;
+               end if;
+
+               Do_Action (Action.Item, Current_Parser, Shared_Parser);
+               Check_Error (Current_Parser);
+
+            else
+               --  Current parser is waiting for others to catch up
+               Current_Parser.Next;
+            end if;
+         end loop;
+      end loop Main_Loop;
+
+      --  We don't raise Syntax_Error for lexer errors, since they are all
+      --  recovered, either by inserting a quote, or by ignoring the
+      --  character.
+   end Parse;
+
+   overriding procedure Execute_Actions (Parser : in out 
LR.Parser_No_Recover.Parser)
+   is
+      use all type SAL.Base_Peek_Type;
+      use all type Syntax_Trees.User_Data_Access;
+
+      procedure Process_Node
+        (Tree : in out Syntax_Trees.Tree;
+         Node : in     Syntax_Trees.Valid_Node_Index)
+      is
+         use all type Syntax_Trees.Node_Label;
+      begin
+         if Tree.Label (Node) /= Nonterm then
+            return;
+         end if;
+
+         declare
+            use all type Syntax_Trees.Semantic_Action;
+            Tree_Children : constant Syntax_Trees.Valid_Node_Index_Array := 
Tree.Children (Node);
+         begin
+            Parser.User_Data.Reduce (Tree, Node, Tree_Children);
+
+            if Tree.Action (Node) /= null then
+               Tree.Action (Node) (Parser.User_Data.all, Tree, Node, 
Tree_Children);
+            end if;
+         end;
+      end Process_Node;
+
+   begin
+      if Parser.User_Data /= null then
+         if Parser.Parsers.Count > 1 then
+            raise Syntax_Error with "ambiguous parse; can't execute actions";
+         end if;
+
+         declare
+            Parser_State : Parser_Lists.Parser_State renames 
Parser.Parsers.First_State_Ref.Element.all;
+         begin
+            Parser_State.Tree.Process_Tree (Process_Node'Access);
+         end;
+      end if;
+   end Execute_Actions;
+
+   overriding function Tree (Parser : in LR.Parser_No_Recover.Parser) return 
Syntax_Trees.Tree
+   is
+      use all type SAL.Base_Peek_Type;
+   begin
+      if Parser.Parsers.Count > 1 then
+         raise WisiToken.Parse_Error with "ambigous parse";
+      else
+         return Parser.Parsers.First_State_Ref.Tree;
+      end if;
+   end Tree;
+
+   overriding function Any_Errors (Parser : in LR.Parser_No_Recover.Parser) 
return Boolean
+   is
+      use all type SAL.Base_Peek_Type;
+      use all type Ada.Containers.Count_Type;
+      Parser_State : Parser_Lists.Parser_State renames 
Parser.Parsers.First_Constant_State_Ref;
+   begin
+      pragma Assert (Parser_State.Tree.Flushed);
+      return Parser.Parsers.Count > 1 or Parser_State.Errors.Length > 0 or 
Parser.Lexer.Errors.Length > 0;
+   end Any_Errors;
+
+   overriding procedure Put_Errors (Parser : in LR.Parser_No_Recover.Parser)
+   is
+      use Ada.Text_IO;
+
+      Parser_State : Parser_Lists.Parser_State renames 
Parser.Parsers.First_Constant_State_Ref;
+      Descriptor   : WisiToken.Descriptor renames Parser.Trace.Descriptor.all;
+   begin
+      for Item of Parser.Lexer.Errors loop
+         Put_Line
+           (Current_Error,
+            Parser.Lexer.File_Name & ":0:0: lexer unrecognized character at" & 
Buffer_Pos'Image (Item.Char_Pos));
+      end loop;
+
+      for Item of Parser_State.Errors loop
+         case Item.Label is
+         when Action =>
+            declare
+               Token : Base_Token renames Parser.Terminals 
(Parser_State.Tree.Min_Terminal_Index (Item.Error_Token));
+            begin
+               Put_Line
+                 (Current_Error,
+                  Error_Message
+                    (Parser.Lexer.File_Name, Token.Line, Token.Column,
+                     "syntax error: expecting " & Image (Item.Expecting, 
Descriptor) &
+                       ", found '" & Parser.Lexer.Buffer_Text 
(Token.Byte_Region) & "'"));
+            end;
+
+         when Check =>
+            null;
+
+         when Message =>
+            Put_Line (Current_Error, -Item.Msg);
+         end case;
+
+      end loop;
+   end Put_Errors;
+
+end WisiToken.Parse.LR.Parser_No_Recover;
diff --git a/packages/wisi/wisitoken-parse-lr-parser_no_recover.ads 
b/packages/wisi/wisitoken-parse-lr-parser_no_recover.ads
index 1f91e3d..33665d7 100644
--- a/packages/wisi/wisitoken-parse-lr-parser_no_recover.ads
+++ b/packages/wisi/wisitoken-parse-lr-parser_no_recover.ads
@@ -6,7 +6,7 @@
 --  to not depend on wisitoken-lr-mckenzie_recover, so editing that
 --  does not cause everything to be regenerated/compiled.
 --
---  Copyright (C) 2002, 2003, 2009, 2010, 2013-2015, 2017, 2018 Free Software 
Foundation, Inc.
+--  Copyright (C) 2002, 2003, 2009, 2010, 2013 - 2015, 2017 - 2019 Free 
Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -71,6 +71,8 @@ package WisiToken.Parse.LR.Parser_No_Recover is
    --  For other errors, raises Parse_Error with an appropriate error
    --  message.
 
+   overriding function Tree (Parser : in LR.Parser_No_Recover.Parser) return 
Syntax_Trees.Tree;
+
    overriding function Any_Errors (Parser : in LR.Parser_No_Recover.Parser) 
return Boolean;
 
    overriding procedure Put_Errors (Parser : in LR.Parser_No_Recover.Parser);
diff --git a/packages/wisi/wisitoken-parse-lr.adb 
b/packages/wisi/wisitoken-parse-lr.adb
index 74dcb98..79f4f2e 100644
--- a/packages/wisi/wisitoken-parse-lr.adb
+++ b/packages/wisi/wisitoken-parse-lr.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2013-2015, 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2013-2015, 2017, 2018, 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -29,7 +29,9 @@ pragma License (GPL);
 
 with Ada.Exceptions;
 with Ada.Strings.Maps;
+with Ada.Strings.Fixed;
 with Ada.Text_IO;
+with GNATCOLL.Mmap;
 package body WisiToken.Parse.LR is
 
    ----------
@@ -59,16 +61,17 @@ package body WisiToken.Parse.LR is
    begin
       case Item.Verb is
       when Shift =>
-         Trace.Put ("shift and goto state" & State_Index'Image (Item.State));
+         Trace.Put ("shift and goto state" & State_Index'Image (Item.State), 
Prefix => False);
 
       when Reduce =>
          Trace.Put
            ("reduce" & Count_Type'Image (Item.Token_Count) & " tokens to " &
-              Image (Item.Production.LHS, Trace.Descriptor.all));
+              Image (Item.Production.LHS, Trace.Descriptor.all),
+            Prefix => False);
       when Accept_It =>
-         Trace.Put ("accept it");
+         Trace.Put ("accept it", Prefix => False);
       when Error =>
-         Trace.Put ("ERROR");
+         Trace.Put ("ERROR", Prefix => False);
       end case;
    end Put;
 
@@ -137,37 +140,11 @@ package body WisiToken.Parse.LR is
       return List.Next;
    end Next;
 
-   function Compare_Minimal_Action (Left, Right : in Minimal_Action) return 
SAL.Compare_Result
-   is begin
-      if Left.Verb > Right.Verb then
-         return SAL.Greater;
-      elsif Left.Verb < Right.Verb then
-         return SAL.Less;
-      else
-         case Left.Verb is
-         when Shift =>
-            if Left.ID > Right.ID then
-               return SAL.Greater;
-            elsif Left.ID < Right.ID then
-               return SAL.Less;
-            else
-               return SAL.Equal;
-            end if;
-         when Reduce =>
-            if Left.Nonterm > Right.Nonterm then
-               return SAL.Greater;
-            elsif Left.Nonterm < Right.Nonterm then
-               return SAL.Less;
-            else
-               return SAL.Equal;
-            end if;
-         end case;
-      end if;
-   end Compare_Minimal_Action;
-
    function Strict_Image (Item : in Minimal_Action) return String
    is begin
       case Item.Verb is
+      when Pause =>
+         return "(Verb => Shift)";
       when Shift =>
          return "(Shift," & Token_ID'Image (Item.ID) & "," & State_Index'Image 
(Item.State) & ")";
       when Reduce =>
@@ -176,13 +153,6 @@ package body WisiToken.Parse.LR is
       end case;
    end Strict_Image;
 
-   procedure Set_Minimal_Action (List : out Minimal_Action_Lists.List; Actions 
: in Minimal_Action_Array)
-   is begin
-      for Action of Actions loop
-         List.Insert (Action);
-      end loop;
-   end Set_Minimal_Action;
-
    function First (State : in Parse_State) return Action_List_Iterator
    is begin
       return Iter : Action_List_Iterator := (Node => State.Action_List, Item 
=> null) do
@@ -552,66 +522,103 @@ package body WisiToken.Parse.LR is
      return Parse_Table_Ptr
    is
       use Ada.Text_IO;
-      use Ada.Strings.Unbounded;
 
-      File  : File_Type;
-      Line  : Unbounded_String;
-      First : Integer;
-      Last  : Integer := 0;
+      File            : GNATCOLL.Mmap.Mapped_File;
+      Region          : GNATCOLL.Mmap.Mapped_Region;
+      Buffer          : GNATCOLL.Mmap.Str_Access;
+      Buffer_Abs_Last : Integer; --  Buffer'Last, except Buffer has no bounds
+      Buffer_Last     : Integer := 0; -- Last char read from Buffer
 
-      Delimiters : constant Ada.Strings.Maps.Character_Set := 
Ada.Strings.Maps.To_Set (" ;");
+      Delimiters : constant Ada.Strings.Maps.Character_Set := 
Ada.Strings.Maps.To_Set (" ;" & ASCII.LF);
 
-      function Last_Char return Character
+      function Check_Semicolon return Boolean
       is begin
-         if Last = 0 then
-            return Element (Line, Last + 1);
+         if Buffer (Buffer_Last) = ';' then
+            --  There is a space, newline, or newline and space after ';'. 
Leave
+            --  Buffer_Last on newline for Check_New_Line.
+            Buffer_Last := Buffer_Last + 1;
+            return True;
          else
-            return Element (Line, Last);
+            return False;
          end if;
-      end Last_Char;
+      end Check_Semicolon;
 
-      procedure Skip_Char
+      procedure Check_Semicolon
       is begin
-         if Last > 0 then
-            Last := Last + 1;
-            if Last > Length (Line) then
-               Last := 0;
-            end if;
-         end if;
-         if Last = 0 then
-            Line := +Get_Line (File);
-            Last := -1 + Index_Non_Blank (Line);
+         if Buffer (Buffer_Last) = ';' then
+            --  There is a space, newline, or newline and space after ';'. 
Leave
+            --  Buffer_Last on newline for Check_New_Line.
+            Buffer_Last := Buffer_Last + 1;
+         else
+            raise SAL.Programmer_Error with Error_Message
+              (File_Name, 1, Ada.Text_IO.Count (Buffer_Last),
+               "expecting semicolon, found '" & Buffer (Buffer_Last) & "'");
          end if;
-      end Skip_Char;
+      end Check_Semicolon;
 
-      function Next_Value return String
+      function Check_EOI return Boolean
       is begin
-         First := Last + 1;
-         Last  := Index (Line, Delimiters, First);
-         return Result : constant String := Slice (Line, First, (if Last = 0 
then Length (Line) else Last - 1))
-         do
-            if Last = 0 then
-               Line := +Get_Line (File);
-               Last := -1 + Index_Non_Blank (Line);
+         return Buffer_Last >= Buffer_Abs_Last;
+      end Check_EOI;
+
+      procedure Check_New_Line
+      is
+         use Ada.Strings.Maps;
+      begin
+         if Buffer (Buffer_Last) = ASCII.LF then
+            --  There is a space or semicolon after some newlines.
+            if Is_In (Buffer (Buffer_Last + 1), Delimiters) then
+               Buffer_Last := Buffer_Last + 1;
             end if;
-         end return;
+         else
+            raise SAL.Programmer_Error with Error_Message
+              (File_Name, 1, Ada.Text_IO.Count (Buffer_Last),
+               "expecting new_line, found '" & Buffer (Buffer_Last) & "'");
+         end if;
+      end Check_New_Line;
+
+      type Buffer_Region is record
+         First : Integer;
+         Last  : Integer;
+      end record;
+
+      function Next_Value return Buffer_Region;
+      pragma Inline (Next_Value);
+
+      function Next_Value return Buffer_Region
+      is
+         use Ada.Strings.Fixed;
+         First : constant Integer := Buffer_Last + 1;
+      begin
+         Buffer_Last := Index (Buffer.all, Delimiters, First);
+         return (First, Buffer_Last - 1);
       end Next_Value;
 
+      procedure Raise_Gen_Next_Value_Constraint_Error (Name : String; Region : 
Buffer_Region);
+      pragma No_Return (Raise_Gen_Next_Value_Constraint_Error);
+
+      procedure Raise_Gen_Next_Value_Constraint_Error (Name : String; Region : 
Buffer_Region)
+      is begin
+         --  Factored out from Gen_Next_Value to make Inline efficient.
+         raise SAL.Programmer_Error with Error_Message
+           (File_Name, 1, Ada.Text_IO.Count (Region.First),
+            "expecting " & Name & ", found '" & Buffer (Region.First .. 
Region.Last) & "'");
+      end Raise_Gen_Next_Value_Constraint_Error;
+
       generic
          type Value_Type is (<>);
          Name : in String;
       function Gen_Next_Value return Value_Type;
+      pragma Inline (Gen_Next_Value);
 
       function Gen_Next_Value return Value_Type
       is
-         Val : constant String := Next_Value;
+         Region : constant Buffer_Region := Next_Value;
       begin
-         return Value_Type'Value (Val);
+         return Value_Type'Value (Buffer (Region.First .. Region.Last));
       exception
       when Constraint_Error =>
-         raise SAL.Programmer_Error with Error_Message
-           (File_Name, Line_Number_Type (Ada.Text_IO.Line (File) - 1), 
Ada.Text_IO.Count (First),
-            "expecting " & Name & ", found '" & Val & "'");
+         Raise_Gen_Next_Value_Constraint_Error (Name, Region);
       end Gen_Next_Value;
 
       function Next_State_Index is new Gen_Next_Value (State_Index, 
"State_Index");
@@ -621,8 +628,10 @@ package body WisiToken.Parse.LR is
       function Next_Boolean is new Gen_Next_Value (Boolean, "Boolean");
       function Next_Count_Type is new Gen_Next_Value 
(Ada.Containers.Count_Type, "Count_Type");
    begin
-      Open (File, In_File, File_Name);
-      Line := +Get_Line (File);
+      File            := GNATCOLL.Mmap.Open_Read (File_Name);
+      Region          := GNATCOLL.Mmap.Read (File);
+      Buffer          := GNATCOLL.Mmap.Data (Region);
+      Buffer_Abs_Last := GNATCOLL.Mmap.Last (Region);
 
       declare
          --  We don't read the discriminants in the aggregate, because
@@ -637,6 +646,8 @@ package body WisiToken.Parse.LR is
          Table : constant Parse_Table_Ptr := new Parse_Table
            (State_First, State_Last, First_Terminal, Last_Terminal, 
First_Nonterminal, Last_Nonterminal);
       begin
+         Check_New_Line;
+
          Table.McKenzie_Param := McKenzie_Param;
 
          for State of Table.States loop
@@ -646,6 +657,7 @@ package body WisiToken.Parse.LR is
                State.Productions (I).LHS := Next_Token_ID;
                State.Productions (I).RHS := Next_Integer;
             end loop;
+            Check_New_Line;
 
             declare
                Node_I       : Action_Node_Ptr := new Action_Node;
@@ -691,8 +703,7 @@ package body WisiToken.Parse.LR is
                            Actions_Done := True;
                         end case;
 
-                        if Element (Line, Last) = ';' then
-                           Skip_Char;
+                        if Check_Semicolon then
                            Action_Done := True;
 
                            if not Actions_Done then
@@ -705,6 +716,8 @@ package body WisiToken.Parse.LR is
                         Node_J.Next := new Parse_Action_Node;
                         Node_J      := Node_J.Next;
                      end loop;
+
+                     Check_New_Line;
                   end;
 
                   exit when Actions_Done;
@@ -713,9 +726,9 @@ package body WisiToken.Parse.LR is
                end loop;
             end;
 
-            if Element (Line, 1) = ';' then
+            if Check_Semicolon then
                --  No Gotos
-               Skip_Char;
+               null;
             else
                declare
                   Node_I : Goto_Node_Ptr := new Goto_Node;
@@ -724,46 +737,44 @@ package body WisiToken.Parse.LR is
                   loop
                      Node_I.Symbol := Next_Token_ID;
                      Node_I.State  := Next_State_Index;
-                     exit when Element (Line, Last) = ';';
+                     exit when Check_Semicolon;
                      Node_I.Next   := new Goto_Node;
                      Node_I        := Node_I.Next;
                   end loop;
-                  Skip_Char;
                end;
             end if;
+            Check_New_Line;
 
-            declare
-               Verb         : Minimal_Verbs;
-               ID           : Token_ID;
-               Action_State : State_Index;
-               Count        : Ada.Containers.Count_Type;
-            begin
-               loop
-                  if Last_Char = ';' then
-                     Skip_Char;
-                     exit;
-                  end if;
-
-                  Verb := Next_Parse_Action_Verbs;
+            if Check_Semicolon then
+               --  No minimal action
+               null;
+            else
+               declare
+                  Verb         : constant Minimal_Verbs := 
Next_Parse_Action_Verbs;
+                  ID           : Token_ID;
+                  Action_State : State_Index;
+                  Count        : Ada.Containers.Count_Type;
+               begin
                   case Verb is
+                  when Pause =>
+                     null; --  Generate.LR.Put_Text_Rep does not output this
+
                   when Shift =>
                      ID           := Next_Token_ID;
                      Action_State := Next_State_Index;
-                     State.Minimal_Complete_Actions.Insert ((Shift, ID, 
Action_State));
+                     State.Minimal_Complete_Action := (Shift, ID, 
Action_State);
                   when Reduce =>
                      ID    := Next_Token_ID;
                      Count := Next_Count_Type;
-                     State.Minimal_Complete_Actions.Insert ((Reduce, ID, 
Count));
+                     State.Minimal_Complete_Action := (Reduce, ID, Count);
                   end case;
-               end loop;
-            end;
-            --  loop exits on End_Error
+               end;
+               Check_Semicolon;
+            end if;
+            Check_New_Line;
+
+            exit when Check_EOI;
          end loop;
-         --  real return value in End_Error handler; this satisfies the 
compiler
-         return null;
-      exception
-      when End_Error =>
-         Close (File);
          return Table;
       end;
    exception
@@ -771,16 +782,11 @@ package body WisiToken.Parse.LR is
       raise User_Error with "parser table text file '" & File_Name & "' not 
found.";
 
    when SAL.Programmer_Error =>
-      if Is_Open (File) then
-         Close (File);
-      end if;
       raise;
+
    when E : others =>
-      if Is_Open (File) then
-         Close (File);
-      end if;
       raise SAL.Programmer_Error with Error_Message
-        (File_Name, Line_Number_Type (Ada.Text_IO.Line (File) - 1), 
Ada.Text_IO.Count (First),
+        (File_Name, 1, Ada.Text_IO.Count (Buffer_Last),
          Ada.Exceptions.Exception_Name (E) & ": " & 
Ada.Exceptions.Exception_Message (E));
    end Get_Text_Rep;
 
@@ -834,6 +840,18 @@ package body WisiToken.Parse.LR is
       Item.Cost := Key;
    end Set_Key;
 
+   procedure Accumulate (Data : in McKenzie_Data; Counts : in out 
Strategy_Counts)
+   is
+      procedure Proc (Config : in Configuration)
+      is begin
+         for I in Config.Strategy_Counts'Range loop
+            Counts (I) := Counts (I) + Config.Strategy_Counts (I);
+         end loop;
+      end Proc;
+   begin
+      Data.Results.Process (Proc'Unrestricted_Access);
+   end Accumulate;
+
    function Image
      (Item       : in Parse_Error;
       Tree       : in Syntax_Trees.Tree;
diff --git a/packages/wisi/wisitoken-parse-lr.ads 
b/packages/wisi/wisitoken-parse-lr.ads
index 6c9db82..24ca512 100644
--- a/packages/wisi/wisitoken-parse-lr.ads
+++ b/packages/wisi/wisitoken-parse-lr.ads
@@ -9,7 +9,7 @@
 --
 --  See wisitoken.ads
 --
---  Copyright (C) 2002, 2003, 2009, 2010, 2013-2015, 2017 - 2018 Free Software 
Foundation, Inc.
+--  Copyright (C) 2002, 2003, 2009, 2010, 2013 - 2015, 2017 - 2019 Free 
Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -36,9 +36,9 @@ pragma License (Modified_GPL);
 
 with Ada.Containers.Indefinite_Doubly_Linked_Lists;
 with Ada.Unchecked_Deallocation;
-with SAL.Gen_Bounded_Definite_Vectors.Gen_Sorted;
+with SAL.Gen_Array_Image;
 with SAL.Gen_Bounded_Definite_Vectors.Gen_Image_Aux;
-with SAL.Gen_Definite_Doubly_Linked_Lists_Sorted.Gen_Image;
+with SAL.Gen_Bounded_Definite_Vectors.Gen_Sorted;
 with SAL.Gen_Unbounded_Definite_Min_Heaps_Fibonacci;
 with SAL.Gen_Unbounded_Definite_Queues.Gen_Image_Aux;
 with SAL.Gen_Unbounded_Definite_Stacks.Gen_Image_Aux;
@@ -48,10 +48,10 @@ with WisiToken.Semantic_Checks;
 with WisiToken.Syntax_Trees;
 package WisiToken.Parse.LR is
 
-   type All_Parse_Action_Verbs is (Pause, Shift_Recover, Shift, Reduce, 
Accept_It, Error);
+   type All_Parse_Action_Verbs is (Pause, Shift, Reduce, Accept_It, Error);
    subtype Parse_Action_Verbs is All_Parse_Action_Verbs range Shift .. Error;
-   subtype Minimal_Verbs is All_Parse_Action_Verbs range Shift .. Reduce;
-   --  Pause, Shift_Recover are only used for error recovery.
+   subtype Minimal_Verbs is All_Parse_Action_Verbs range Pause .. Reduce;
+   --  Pause is only used for error recovery.
 
    type Parse_Action_Rec (Verb : Parse_Action_Verbs := Shift) is record
       case Verb is
@@ -79,7 +79,7 @@ package WisiToken.Parse.LR is
    --  Ada aggregate syntax, leaving out Action, Check in reduce; for debug 
output
 
    procedure Put (Trace : in out WisiToken.Trace'Class; Item : in 
Parse_Action_Rec);
-   --  Put a line for Item in parse trace format.
+   --  Put a line for Item in parse trace format, with no prefix.
 
    function Equal (Left, Right : in Parse_Action_Rec) return Boolean;
    --  Ignore Action, Check.
@@ -116,8 +116,12 @@ package WisiToken.Parse.LR is
    function State (List : in Goto_Node_Ptr) return State_Index;
    function Next (List : in Goto_Node_Ptr) return Goto_Node_Ptr;
 
-   type Minimal_Action (Verb : Minimal_Verbs := Shift) is record
+   type Minimal_Action (Verb : Minimal_Verbs := Pause) is record
       case Verb is
+      when Pause =>
+         --  In this case, 'Pause' means no minimal action.
+         null;
+
       when Shift =>
          ID    : Token_ID;
          State : State_Index;
@@ -128,29 +132,18 @@ package WisiToken.Parse.LR is
       end case;
    end record;
 
-   function Compare_Minimal_Action (Left, Right : in Minimal_Action) return 
SAL.Compare_Result;
-
-   type Minimal_Action_Array is array (Positive range <>) of Minimal_Action;
-
-   package Minimal_Action_Lists is new 
SAL.Gen_Definite_Doubly_Linked_Lists_Sorted
-     (Minimal_Action, Compare_Minimal_Action);
-
    function Strict_Image (Item : in Minimal_Action) return String;
    --  Strict Ada aggregate syntax, for generated code.
 
-   function Image is new Minimal_Action_Lists.Gen_Image (Strict_Image);
-
-   procedure Set_Minimal_Action (List : out Minimal_Action_Lists.List; Actions 
: in Minimal_Action_Array);
-
    type Parse_State is record
       Productions : Production_ID_Arrays.Vector;
-      --  Used in error recovery.
+      --  Used in some language-specfic error recovery.
       Action_List : Action_Node_Ptr;
       Goto_List   : Goto_Node_Ptr;
 
-      Minimal_Complete_Actions : Minimal_Action_Lists.List;
-      --  Set of parse actions that will most quickly complete the
-      --  productions in this state; used in error recovery
+      Minimal_Complete_Action : Minimal_Action;
+      --  Parse action that will most quickly complete a
+      --  production in this state; used in error recovery
    end record;
 
    type Parse_State_Array is array (State_Index range <>) of Parse_State;
@@ -331,8 +324,9 @@ package WisiToken.Parse.LR is
       McKenzie_Param : in McKenzie_Param_Type;
       Productions    : in WisiToken.Productions.Prod_Arrays.Vector)
      return Parse_Table_Ptr;
-   --  Read machine-readable text format of states from a file File_Name.
-   --  Result has actions, checks from Productions.
+   --  Read machine-readable text format of states (as output by
+   --  WisiToken.Generate.LR.Put_Text_Rep) from file File_Name. Result
+   --  has actions, checks from Productions.
 
    ----------
    --  For McKenzie_Recover. Declared here because Parser_Lists needs
@@ -496,6 +490,11 @@ package WisiToken.Parse.LR is
    --  which is true if they were copied from the parser stack, and not
    --  pushed by recover.
 
+   type Strategies is (Language_Fix, Minimal_Complete, Matching_Begin, 
Explore_Table, String_Quote);
+
+   type Strategy_Counts is array (Strategies) of Natural;
+   function Image is new SAL.Gen_Array_Image (Strategies, Natural, 
Strategy_Counts, Trimmed_Image);
+
    type Configuration is record
       Stack : Recover_Stacks.Stack;
       --  Initially built from the parser stack, then the stack after the
@@ -548,6 +547,9 @@ package WisiToken.Parse.LR is
       --  remaining ops at Current_Shared_Token.
 
       Cost : Natural := 0;
+
+      Strategy_Counts : LR.Strategy_Counts := (others => 0);
+      --  Count of strategies that produced Ops.
    end record;
    type Configuration_Access is access all Configuration;
    for Configuration_Access'Storage_Size use 0;
@@ -573,9 +575,11 @@ package WisiToken.Parse.LR is
       Results       : Config_Heaps.Heap_Type;
       Success       : Boolean := False;
    end record;
-
    type McKenzie_Access is access all McKenzie_Data;
 
+   procedure Accumulate (Data : in McKenzie_Data; Counts : in out 
Strategy_Counts);
+   --  Sum Results.Strategy_Counts.
+
    type Parse_Error_Label is (Action, Check, Message);
 
    type Parse_Error
diff --git a/packages/wisi/wisitoken-parse-packrat-generated.adb 
b/packages/wisi/wisitoken-parse-packrat-generated.adb
index 0e1adb0..0c909e5 100644
--- a/packages/wisi/wisitoken-parse-packrat-generated.adb
+++ b/packages/wisi/wisitoken-parse-packrat-generated.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -21,7 +21,7 @@ package body WisiToken.Parse.Packrat.Generated is
 
    overriding procedure Parse (Parser : aliased in out Generated.Parser)
    is
-      --  'aliased required for Base_Tree'Access. WORKAROUND: that was
+      --  'aliased' required for Base_Tree'Access. WORKAROUND: that was
       --  enough when Parser type was declared in generated Main; now that
       --  it's a derived type, it doesn't work. So we use Unchecked_Access.
 
@@ -63,6 +63,11 @@ package body WisiToken.Parse.Packrat.Generated is
 
    end Parse;
 
+   overriding function Tree (Parser : in Generated.Parser) return 
Syntax_Trees.Tree
+   is begin
+      return Parser.Tree;
+   end Tree;
+
    overriding function Any_Errors (Parser : in Generated.Parser) return Boolean
    is
       use all type Ada.Containers.Count_Type;
diff --git a/packages/wisi/wisitoken-parse-packrat-generated.ads 
b/packages/wisi/wisitoken-parse-packrat-generated.ads
index 80d6cee..2eddd56 100644
--- a/packages/wisi/wisitoken-parse-packrat-generated.ads
+++ b/packages/wisi/wisitoken-parse-packrat-generated.ads
@@ -7,7 +7,7 @@
 --
 --  see parent.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -46,12 +46,14 @@ package WisiToken.Parse.Packrat.Generated is
       end case;
    end record;
 
-   package Memos is new SAL.Gen_Unbounded_Definite_Vectors (Token_Index, 
Memo_Entry);
+   package Memos is new SAL.Gen_Unbounded_Definite_Vectors
+     (Token_Index, Memo_Entry, Default_Element => (others => <>));
 
    subtype Result_Type is Memo_Entry
    with Dynamic_Predicate => Result_Type.State in Result_States;
 
-   package Derivs is new SAL.Gen_Unbounded_Definite_Vectors (Token_ID, 
Memos.Vector);
+   package Derivs is new SAL.Gen_Unbounded_Definite_Vectors
+     (Token_ID, Memos.Vector, Default_Element => Memos.Empty_Vector);
 
    type Parse_WisiToken_Accept is access
      --  WORKAROUND: using Packrat.Parser'Class here hits a GNAT Bug box in 
GPL 2018.
@@ -64,6 +66,7 @@ package WisiToken.Parse.Packrat.Generated is
    end record;
 
    overriding procedure Parse (Parser : aliased in out Generated.Parser);
+   overriding function Tree (Parser : in Generated.Parser) return 
Syntax_Trees.Tree;
    overriding function Any_Errors (Parser : in Generated.Parser) return 
Boolean;
    overriding procedure Put_Errors (Parser : in Generated.Parser);
 
diff --git a/packages/wisi/wisitoken-parse-packrat-procedural.adb 
b/packages/wisi/wisitoken-parse-packrat-procedural.adb
index 1e5024c..5dc4ef1 100644
--- a/packages/wisi/wisitoken-parse-packrat-procedural.adb
+++ b/packages/wisi/wisitoken-parse-packrat-procedural.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -248,4 +248,9 @@ package body WisiToken.Parse.Packrat.Procedural is
       end if;
    end Parse;
 
+   overriding function Tree (Parser : in Procedural.Parser) return 
Syntax_Trees.Tree
+   is begin
+      return Parser.Tree;
+   end Tree;
+
 end WisiToken.Parse.Packrat.Procedural;
diff --git a/packages/wisi/wisitoken-parse-packrat-procedural.ads 
b/packages/wisi/wisitoken-parse-packrat-procedural.ads
index ecd14de..76c1aee 100644
--- a/packages/wisi/wisitoken-parse-packrat-procedural.ads
+++ b/packages/wisi/wisitoken-parse-packrat-procedural.ads
@@ -9,7 +9,7 @@
 --
 --  See parent.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -49,7 +49,8 @@ package WisiToken.Parse.Packrat.Procedural is
       end case;
    end record;
 
-   package Memos is new SAL.Gen_Unbounded_Definite_Vectors (Token_Index, 
Memo_Entry);
+   package Memos is new SAL.Gen_Unbounded_Definite_Vectors
+     (Token_Index, Memo_Entry, Default_Element => (others => <>));
    type Derivs is array (Token_ID range <>) of Memos.Vector;
 
    type Parser (First_Nonterminal, Last_Nonterminal : Token_ID) is new 
Packrat.Parser with
@@ -70,6 +71,8 @@ package WisiToken.Parse.Packrat.Procedural is
      return Procedural.Parser;
 
    overriding procedure Parse (Parser : aliased in out Procedural.Parser);
+   overriding function Tree (Parser : in Procedural.Parser) return 
Syntax_Trees.Tree;
+
    overriding function Any_Errors (Parser : in Procedural.Parser) return 
Boolean
      is (False);
    --  All errors are reported by Parse raising Syntax_Error.
diff --git a/packages/wisi/wisitoken-parse.adb 
b/packages/wisi/wisitoken-parse.adb
index 52870e0..09280d9 100644
--- a/packages/wisi/wisitoken-parse.adb
+++ b/packages/wisi/wisitoken-parse.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -42,7 +42,7 @@ package body WisiToken.Parse is
                Parser.Line_Begin_Token (Token.Line) := 
Parser.Terminals.Last_Index +
                  (if Token.ID >= Parser.Trace.Descriptor.First_Terminal then 1 
else 0);
 
-            elsif Token.ID = Parser.Trace.Descriptor.EOF_ID then
+            elsif Token.ID = Parser.Trace.Descriptor.EOI_ID then
                Parser.Line_Begin_Token.Set_Length (Ada.Containers.Count_Type 
(Token.Line + 1));
                Parser.Line_Begin_Token (Token.Line + 1) := 
Parser.Terminals.Last_Index + 1;
             end if;
@@ -71,7 +71,7 @@ package body WisiToken.Parse is
 
    procedure Lex_All (Parser : in out Base_Parser)
    is
-      EOF_ID : constant Token_ID := Parser.Trace.Descriptor.EOF_ID;
+      EOF_ID : constant Token_ID := Parser.Trace.Descriptor.EOI_ID;
    begin
       Parser.Lexer.Errors.Clear;
       Parser.Terminals.Clear;
diff --git a/packages/wisi/wisitoken-parse.ads 
b/packages/wisi/wisitoken-parse.ads
index 38574ed..c2fb500 100644
--- a/packages/wisi/wisitoken-parse.ads
+++ b/packages/wisi/wisitoken-parse.ads
@@ -2,7 +2,7 @@
 --
 --  Subprograms common to more than one parser, higher-level than in 
wisitoken.ads
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -44,7 +44,7 @@ package WisiToken.Parse is
    --
    --  The user must first call Lexer.Reset_* to set the input text.
 
-   procedure Parse (Shared_Parser : aliased in out Base_Parser) is abstract;
+   procedure Parse (Parser : aliased in out Base_Parser) is abstract;
    --  Call Lex_All, then execute parse algorithm to parse the tokens,
    --  storing the result in Parser for Execute_Actions.
    --
@@ -55,6 +55,9 @@ package WisiToken.Parse is
    --  For other errors, raises Parse_Error with an appropriate error
    --  message.
 
+   function Tree (Parser : in Base_Parser) return Syntax_Trees.Tree is 
abstract;
+   --  Return the syntax tree resulting from the parse.
+
    function Any_Errors (Parser : in Base_Parser) return Boolean is abstract;
 
    procedure Put_Errors (Parser : in Base_Parser) is abstract;
diff --git a/packages/wisi/wisitoken-parse_table-mode.el 
b/packages/wisi/wisitoken-parse_table-mode.el
new file mode 100644
index 0000000..5cce27a
--- /dev/null
+++ b/packages/wisi/wisitoken-parse_table-mode.el
@@ -0,0 +1,96 @@
+;; wisitoken-parse_table-mode.el --- For navigating in a parse table as output 
by wisitoken-bnf-generate. -*- lexical-binding:t -*-
+;;
+;; Copyright (C) 2017 - 2019  Free Software Foundation, Inc.
+;;
+;; Author: Stephen Leake <address@hidden>
+;; Maintainer: Stephen Leake <address@hidden>
+;; Keywords: parser
+;; Version: 1.0
+;; package-requires: ((emacs "25.1"))
+;; URL: http://www.nongnu.org/ada-mode/wisi/wisi.html
+;;
+;; This file is part of GNU Emacs.
+;;
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+(require 'xref)
+
+(defun wisitoken-parse_table--xref-backend () 'wisitoken-parse_table)
+
+(cl-defgeneric xref-backend-identifier-completion-table ((_backend (eql 
wisitoken-parse_table)))
+  ;; could complete on nonterms, find productions
+  nil)
+
+(cl-defmethod xref-backend-identifier-at-point ((_backend (eql 
wisitoken-parse_table)))
+  ;; if we are on one of:
+  ;; - ’goto state nnn’ in a state action
+  ;; => return nnn state
+  ;;
+  ;; or
+  ;; - foo <= bar baz
+  ;; => return nonterminal name at point
+  ;;
+  ;; - 'reduce n tokens to <nonterminal> <prod_id>'
+  ;; => return 'prod_id: name'
+  (save-excursion
+    (cond
+     ((save-excursion
+       (end-of-line)
+       (or (looking-back "goto state \\([0-9]+\\),?" (line-beginning-position))
+           (looking-back "( \\([0-9]+\\))" (line-beginning-position))))
+      (match-string 1))
+
+     ((save-excursion
+       (back-to-indentation)
+       (looking-at "[a-zA-Z_]+ + => reduce [0-9]+ tokens to \\([a-z0-9_]+\\) 
\\([0-9.]+\\)"))
+      (concat (match-string 2) ": " (match-string 1)))
+
+     (t
+      (thing-at-point 'symbol)))))
+
+(cl-defgeneric xref-backend-definitions ((_backend (eql 
wisitoken-parse_table)) identifier)
+  ;; IDENTIFIER is from xref-back-identifier-at-point; a state number or a 
nonterminal
+  (let ((state-p (string-match "\\`[0-9]+\\'" identifier))
+       (prod_id-p (string-match "\\`[0-9.]+: " identifier)))
+    (save-excursion
+      (goto-char (point-min))
+      (cond
+       (state-p
+       (search-forward-regexp (concat "^State " identifier ":$")))
+
+       (prod_id-p
+       (search-forward-regexp (concat identifier " <=")))
+
+       (t
+       (search-forward-regexp (concat "^[0-9.]+: " identifier " <=")))
+       )
+      (list (xref-make identifier (xref-make-buffer-location (current-buffer) 
(match-beginning 0))))
+      )))
+
+;;;###autoload
+(define-minor-mode wisitoken-parse_table-mode
+  "Provides navigation in wisi-generate parse table output."
+  nil ":parse_table" nil
+  (add-hook 'xref-backend-functions #'wisitoken-parse_table--xref-backend nil 
t)
+
+  (if wisitoken-parse_table-mode
+      (read-only-mode 0)
+    (read-only-mode 1)
+  ))
+
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.parse_table.*\\'" . 
wisitoken-parse_table-mode))
+
+(provide 'wisitoken-parse_table-mode)
+;; end of file
diff --git a/packages/wisi/wisitoken-productions.ads 
b/packages/wisi/wisitoken-productions.ads
index 0ae651e..854b302 100644
--- a/packages/wisi/wisitoken-productions.ads
+++ b/packages/wisi/wisitoken-productions.ads
@@ -2,7 +2,7 @@
 --
 --  Type and operations for building grammar productions.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -31,14 +31,16 @@ package WisiToken.Productions is
       Check  : WisiToken.Semantic_Checks.Semantic_Check;
    end record;
 
-   package RHS_Arrays is new SAL.Gen_Unbounded_Definite_Vectors (Natural, 
Right_Hand_Side);
+   package RHS_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Natural, Right_Hand_Side, Default_Element => (others => <>));
 
    type Instance is record
       LHS  : Token_ID := Invalid_Token_ID;
       RHSs : RHS_Arrays.Vector;
    end record;
 
-   package Prod_Arrays is new SAL.Gen_Unbounded_Definite_Vectors (Token_ID, 
Instance);
+   package Prod_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Token_ID, Instance, Default_Element => (others => <>));
 
    function Image
      (LHS        : in Token_ID;
@@ -51,14 +53,16 @@ package WisiToken.Productions is
    procedure Put (Grammar : Prod_Arrays.Vector; Descriptor : in 
WisiToken.Descriptor);
    --  Put Image of each production to Ada.Text_IO.Current_Output.
 
-   package Line_Number_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(Natural, WisiToken.Line_Number_Type);
+   package Line_Number_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Natural, Line_Number_Type, Default_Element => Invalid_Line_Number);
 
    type Prod_Source_Line_Map is record
-      Line    : Line_Number_Type;
+      Line    : Line_Number_Type := Invalid_Line_Number;
       RHS_Map : Line_Number_Arrays.Vector;
    end record;
 
-   package Source_Line_Maps is new SAL.Gen_Unbounded_Definite_Vectors 
(Token_ID, Prod_Source_Line_Map);
+   package Source_Line_Maps is new SAL.Gen_Unbounded_Definite_Vectors
+     (Token_ID, Prod_Source_Line_Map, Default_Element => (others => <>));
    --  For line numbers of productions in source files.
 
 end WisiToken.Productions;
diff --git a/packages/wisi/wisitoken-semantic_checks.adb 
b/packages/wisi/wisitoken-semantic_checks.adb
index e90fb59..26dcb49 100644
--- a/packages/wisi/wisitoken-semantic_checks.adb
+++ b/packages/wisi/wisitoken-semantic_checks.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -132,4 +132,21 @@ package body WisiToken.Semantic_Checks is
       return (Label => Ok);
    end Merge_Names;
 
+   function Terminate_Partial_Parse
+     (Partial_Parse_Active    : in Boolean;
+      Partial_Parse_Byte_Goal : in Buffer_Pos;
+      Recover_Active          : in Boolean;
+      Nonterm                 : in Recover_Token)
+     return Check_Status
+   is begin
+      if Partial_Parse_Active and then
+        (not Recover_Active) and then
+        Nonterm.Byte_Region.Last >= Partial_Parse_Byte_Goal
+      then
+         raise WisiToken.Partial_Parse;
+      else
+         return (Label => Ok);
+      end if;
+   end Terminate_Partial_Parse;
+
 end WisiToken.Semantic_Checks;
diff --git a/packages/wisi/wisitoken-semantic_checks.ads 
b/packages/wisi/wisitoken-semantic_checks.ads
index 5fb5807..acb0ce8 100644
--- a/packages/wisi/wisitoken-semantic_checks.ads
+++ b/packages/wisi/wisitoken-semantic_checks.ads
@@ -2,7 +2,7 @@
 --
 --  Grammar semantic check routines.
 --
---  Copyright (C) 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -45,9 +45,10 @@ package WisiToken.Semantic_Checks is
    function Image (Item : in Check_Status; Descriptor : WisiToken.Descriptor) 
return String;
 
    type Semantic_Check is access function
-     (Lexer   : access constant WisiToken.Lexer.Instance'Class;
-      Nonterm : in out Recover_Token;
-      Tokens  : in     Recover_Token_Array)
+     (Lexer          : access constant WisiToken.Lexer.Instance'Class;
+      Nonterm        : in out Recover_Token;
+      Tokens         : in     Recover_Token_Array;
+      Recover_Active : in     Boolean)
      return Check_Status;
    --  Called during parsing and error recovery to implement higher level
    --  checks, such as block name matching in Ada.
@@ -86,4 +87,13 @@ package WisiToken.Semantic_Checks is
    --  If Tokens (Last_Index).Name is Null_Buffer_Region, use Tokens
    --  (Last_Index).Byte_Region instead.
 
+   function Terminate_Partial_Parse
+     (Partial_Parse_Active    : in Boolean;
+      Partial_Parse_Byte_Goal : in Buffer_Pos;
+      Recover_Active          : in Boolean;
+      Nonterm                 : in Recover_Token)
+     return Check_Status;
+   pragma Inline (Terminate_Partial_Parse);
+   --  If Active, raise Wisitoken.Partial_Parse; otherwise return Ok.
+
 end WisiToken.Semantic_Checks;
diff --git a/packages/wisi/wisitoken-syntax_trees.adb 
b/packages/wisi/wisitoken-syntax_trees.adb
index fa6602c..ac780a3 100644
--- a/packages/wisi/wisitoken-syntax_trees.adb
+++ b/packages/wisi/wisitoken-syntax_trees.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018, 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -33,9 +33,12 @@ package body WisiToken.Syntax_Trees is
 
    procedure Move_Branch_Point (Tree : in out Syntax_Trees.Tree; Required_Node 
: in Valid_Node_Index);
 
+   type Visit_Parent_Mode is (Before, After);
+
    function Process_Tree
      (Tree         : in Syntax_Trees.Tree;
       Node         : in Valid_Node_Index;
+      Visit_Parent : in Visit_Parent_Mode;
       Process_Node : access function
         (Tree : in Syntax_Trees.Tree;
          Node : in Valid_Node_Index)
@@ -355,12 +358,78 @@ package body WisiToken.Syntax_Trees is
          end if;
       end Process;
 
-      Junk : constant Boolean := Process_Tree (Tree, Node, Process'Access);
+      Junk : constant Boolean := Process_Tree (Tree, Node, After, 
Process'Access);
       pragma Unreferenced (Junk);
    begin
       return Found;
    end Find_Descendant;
 
+   function Find_Min_Terminal_Index
+     (Tree  : in Syntax_Trees.Tree;
+      Index : in Token_Index)
+     return Node_Index
+   is
+      Found : Node_Index := Invalid_Node_Index;
+
+      function Process (Tree : in Syntax_Trees.Tree; Node : in 
Valid_Node_Index) return Boolean
+      is
+         function Compute (N : in Syntax_Trees.Node) return Boolean
+         is begin
+            if N.Label /= Nonterm then
+               return True;
+            elsif Index = N.Min_Terminal_Index then
+               Found := Node;
+               return False;
+            else
+               return True;
+            end if;
+         end Compute;
+      begin
+         return Compute
+           ((if Node <= Tree.Last_Shared_Node
+             then Tree.Shared_Tree.Nodes (Node)
+             else Tree.Branched_Nodes (Node)));
+      end Process;
+
+      Junk : constant Boolean := Process_Tree (Tree, Tree.Root, Before, 
Process'Access);
+      pragma Unreferenced (Junk);
+   begin
+      return Found;
+   end Find_Min_Terminal_Index;
+
+   function Find_Max_Terminal_Index
+     (Tree  : in Syntax_Trees.Tree;
+      Index : in Token_Index)
+     return Node_Index
+   is
+      Found : Node_Index := Invalid_Node_Index;
+
+      function Process (Tree : in Syntax_Trees.Tree; Node : in 
Valid_Node_Index) return Boolean
+      is
+         function Compute (N : in Syntax_Trees.Node) return Boolean
+         is begin
+            if N.Label /= Nonterm then
+               return True;
+            elsif Index = N.Max_Terminal_Index then
+               Found := Node;
+               return False;
+            else
+               return True;
+            end if;
+         end Compute;
+      begin
+         return Compute
+           ((if Node <= Tree.Last_Shared_Node
+             then Tree.Shared_Tree.Nodes (Node)
+             else Tree.Branched_Nodes (Node)));
+      end Process;
+
+      Junk : constant Boolean := Process_Tree (Tree, Tree.Root, Before, 
Process'Access);
+      pragma Unreferenced (Junk);
+   begin
+      return Found;
+   end Find_Max_Terminal_Index;
+
    function Find_Sibling
      (Tree : in Syntax_Trees.Tree;
       Node : in Valid_Node_Index;
@@ -791,6 +860,7 @@ package body WisiToken.Syntax_Trees is
    function Process_Tree
      (Tree         : in Syntax_Trees.Tree;
       Node         : in Valid_Node_Index;
+      Visit_Parent : in Visit_Parent_Mode;
       Process_Node : access function
         (Tree : in Syntax_Trees.Tree;
          Node : in Valid_Node_Index)
@@ -799,15 +869,25 @@ package body WisiToken.Syntax_Trees is
    is
       function Compute (N : in Syntax_Trees.Node) return Boolean
       is begin
+         if Visit_Parent = Before then
+            if not Process_Node (Tree, Node) then
+               return False;
+            end if;
+         end if;
+
          if N.Label = Nonterm then
             for Child of N.Children loop
-               if not Process_Tree (Tree, Child, Process_Node) then
+               if not Process_Tree (Tree, Child, Visit_Parent, Process_Node) 
then
                   return False;
                end if;
             end loop;
          end if;
 
-         return Process_Node (Tree, Node);
+         if Visit_Parent = After then
+            return Process_Node (Tree, Node);
+         else
+            return True;
+         end if;
       end Compute;
    begin
       if Node <= Tree.Last_Shared_Node then
@@ -915,6 +995,7 @@ package body WisiToken.Syntax_Trees is
       else
          Tree.Branched_Nodes (Node).Augmented := Value;
       end if;
+      Tree.Shared_Tree.Augmented_Present := True;
    end Set_Augmented;
 
    procedure Set_Children
diff --git a/packages/wisi/wisitoken-syntax_trees.ads 
b/packages/wisi/wisitoken-syntax_trees.ads
index b9cf380..d5cbec1 100644
--- a/packages/wisi/wisitoken-syntax_trees.ads
+++ b/packages/wisi/wisitoken-syntax_trees.ads
@@ -7,7 +7,7 @@
 --  We provide Base_Tree and Tree in one package, because only Tree
 --  needs an API; the only way Base_Tree is accessed is via Tree.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 
 --  There is one syntax tree for each parser. There is one shared
 --  Terminals array, matching the actual input text.
@@ -58,7 +58,8 @@ package WisiToken.Syntax_Trees is
    type Valid_Node_Index_Array is array (Positive_Index_Type range <>) of 
Valid_Node_Index;
    --  Index matches Base_Token_Array, Augmented_Token_Array
 
-   package Valid_Node_Index_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(Positive_Index_Type, Valid_Node_Index);
+   package Valid_Node_Index_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Positive_Index_Type, Valid_Node_Index, Default_Element => 
Valid_Node_Index'First);
    --  Index matches Valid_Node_Index_Array.
 
    type Node_Label is (Shared_Terminal, Virtual_Terminal, Nonterm);
@@ -88,12 +89,12 @@ package WisiToken.Syntax_Trees is
    --  input stream.
 
    procedure Delete_Token
-     (Data        : in out User_Data_Type;
+     (User_Data   : in out User_Data_Type;
       Token_Index : in     WisiToken.Token_Index)
    is null;
    --  Token at Token_Index was deleted in error recovery; update
-   --  remaining tokens as needed. Called from Execute_Actions for each
-   --  deleted token, before processing the syntax tree.
+   --  remaining tokens and Tree as needed. Called from Execute_Actions
+   --  for each deleted token, before processing the syntax tree.
 
    procedure Reduce
      (User_Data : in out User_Data_Type;
@@ -264,7 +265,7 @@ package WisiToken.Syntax_Trees is
       ID   : in Token_ID)
      return Node_Index
    with Pre => Tree.Is_Nonterm (Node);
-   --  Return the child of Node that contains ID, or Invalid_Node_Index if
+   --  Return the child of Node whose ID is ID, or Invalid_Node_Index if
    --  none match.
 
    function Find_Descendant
@@ -272,7 +273,25 @@ package WisiToken.Syntax_Trees is
       Node : in Valid_Node_Index;
       ID   : in Token_ID)
      return Node_Index;
-   --  Return the child of Node that contains ID (may be Node), or
+   --  Return the descendant of Node (may be Node) whose ID is ID, or
+   --  Invalid_Node_Index if none match.
+
+   function Find_Min_Terminal_Index
+     (Tree  : in Syntax_Trees.Tree;
+      Index : in Token_Index)
+     return Node_Index
+   with Post => Find_Min_Terminal_Index'Result = Invalid_Node_Index or else
+                Tree.Is_Nonterm (Find_Min_Terminal_Index'Result);
+   --  Return the first node whose Min_Terminal_Index is Index, or
+   --  Invalid_Node_Index if none match.
+
+   function Find_Max_Terminal_Index
+     (Tree  : in Syntax_Trees.Tree;
+      Index : in Token_Index)
+     return Node_Index
+   with Post => Find_Max_Terminal_Index'Result = Invalid_Node_Index or else
+                Tree.Is_Nonterm (Find_Max_Terminal_Index'Result);
+   --  Return the first node whose Max_Terminal_Index is Index, or
    --  Invalid_Node_Index if none match.
 
    procedure Set_Root (Tree : in out Syntax_Trees.Tree; Root : in 
Valid_Node_Index);
@@ -372,7 +391,8 @@ private
 
    subtype Nonterm_Node is Node (Nonterm);
 
-   package Node_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(Valid_Node_Index, Node);
+   package Node_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Valid_Node_Index, Node, Default_Element => (others => <>));
 
    type Base_Tree is new Ada.Finalization.Controlled with record
       Nodes : Node_Arrays.Vector;
diff --git a/packages/wisi/wisitoken-text_io_trace.adb 
b/packages/wisi/wisitoken-text_io_trace.adb
index daa9f4c..77fb331 100644
--- a/packages/wisi/wisitoken-text_io_trace.adb
+++ b/packages/wisi/wisitoken-text_io_trace.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2017 Free Software Foundation, Inc.
+--  Copyright (C) 2017, 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -17,30 +17,65 @@
 
 pragma License (Modified_GPL);
 
+with Ada.Calendar.Formatting;
+with Ada.Strings.Fixed;
 package body WisiToken.Text_IO_Trace is
 
+   function Insert_Prefix_At_Newlines (Trace : in Text_IO_Trace.Trace; Item : 
in String) return String
+   is
+      use Ada.Strings.Fixed;
+      use Ada.Strings.Unbounded;
+      Result : Unbounded_String;
+      First : Integer := Item'First;
+      Last : Integer;
+   begin
+      loop
+         Last := Index (Pattern => "" & ASCII.LF, Source => Item (First .. 
Item'Last));
+         exit when Last = 0;
+         Result := Result & Item (First .. Last) & Trace.Prefix;
+         First := Last + 1;
+      end loop;
+      Result := Result & Item (First .. Item'Last);
+      return -Result;
+   end Insert_Prefix_At_Newlines;
+
+   ----------
+   --  Public subprograms, declaration order
+
    overriding
-   procedure Put (Trace : in out Text_IO_Trace.Trace; Item : in String)
+   procedure Set_Prefix (Trace : in out Text_IO_Trace.Trace; Prefix : in 
String)
+   is begin
+      Trace.Prefix := +Prefix;
+   end Set_Prefix;
+
+   overriding
+   procedure Put (Trace : in out Text_IO_Trace.Trace; Item : in String; Prefix 
: in Boolean := True)
    is
       use Ada.Text_IO;
    begin
       if Trace.File /= null and then Is_Open (Trace.File.all) then
-         Ada.Text_IO.Put (Trace.File.all, Item);
+         Ada.Text_IO.Put (Trace.File.all, (if Prefix then -Trace.Prefix else 
"") & Item);
       else
-         Ada.Text_IO.Put (Item);
+         Ada.Text_IO.Put ((if Prefix then -Trace.Prefix else "") & Item);
       end if;
    end Put;
 
    overriding
    procedure Put_Line (Trace : in out Text_IO_Trace.Trace; Item : in String)
    is
+      use Ada.Strings.Fixed;
       use Ada.Text_IO;
+      Temp : constant String :=
+        (if 0 /= Index (Item, "" & ASCII.LF)
+         then Insert_Prefix_At_Newlines (Trace, Item)
+         else Item);
    begin
+
       if Trace.File /= null and then Is_Open (Trace.File.all) then
-         Ada.Text_IO.Put_Line (Trace.File.all, Item);
+         Ada.Text_IO.Put_Line (Trace.File.all, -Trace.Prefix & Temp);
          Ada.Text_IO.Flush (Trace.File.all);
       else
-         Ada.Text_IO.Put_Line (Item);
+         Ada.Text_IO.Put_Line (-Trace.Prefix & Temp);
          Ada.Text_IO.Flush;
       end if;
    end Put_Line;
@@ -57,6 +92,14 @@ package body WisiToken.Text_IO_Trace is
       end if;
    end New_Line;
 
+   overriding
+   procedure Put_Clock (Trace : in out Text_IO_Trace.Trace; Label : in String)
+   is begin
+      Trace.Put_Line
+        (Ada.Calendar.Formatting.Image
+           (Ada.Calendar.Clock, Include_Time_Fraction => True) & " " & Label);
+   end Put_Clock;
+
    procedure Set_File (Trace : in out Text_IO_Trace.Trace; File : in 
Ada.Text_IO.File_Access)
    is begin
       Trace.File := File;
diff --git a/packages/wisi/wisitoken-text_io_trace.ads 
b/packages/wisi/wisitoken-text_io_trace.ads
index ad421dd..c6892c8 100644
--- a/packages/wisi/wisitoken-text_io_trace.ads
+++ b/packages/wisi/wisitoken-text_io_trace.ads
@@ -2,7 +2,7 @@
 --
 --  Trace output to Ada.Text_IO
 --
---  Copyright (C) 2017 Free Software Foundation, Inc.
+--  Copyright (C) 2017, 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -24,7 +24,10 @@ package WisiToken.Text_IO_Trace is
    --  Defaults to Ada.Text_IO.Standard_Output
 
    overriding
-   procedure Put (Trace : in out Text_IO_Trace.Trace; Item : in String);
+   procedure Set_Prefix (Trace : in out Text_IO_Trace.Trace; Prefix : in 
String);
+
+   overriding
+   procedure Put (Trace : in out Text_IO_Trace.Trace; Item : in String; Prefix 
: in Boolean := True);
 
    overriding
    procedure Put_Line (Trace : in out Text_IO_Trace.Trace; Item : in String);
@@ -32,6 +35,9 @@ package WisiToken.Text_IO_Trace is
    overriding
    procedure New_Line (Trace : in out Text_IO_Trace.Trace);
 
+   overriding
+   procedure Put_Clock (Trace : in out Text_IO_Trace.Trace; Label : in String);
+
    procedure Set_File (Trace : in out Text_IO_Trace.Trace; File : in 
Ada.Text_IO.File_Access);
    --  Set file for trace output. Default is Text_IO.Current_Output.
 
@@ -40,6 +46,7 @@ package WisiToken.Text_IO_Trace is
 
 private
    type Trace is limited new WisiToken.Trace with record
-      File : Ada.Text_IO.File_Access;
+      File   : Ada.Text_IO.File_Access;
+      Prefix : Ada.Strings.Unbounded.Unbounded_String;
    end record;
 end WisiToken.Text_IO_Trace;
diff --git a/packages/wisi/wisitoken-user_guide.info 
b/packages/wisi/wisitoken-user_guide.info
index 4d2bb1d..6d04498 100644
--- a/packages/wisi/wisitoken-user_guide.info
+++ b/packages/wisi/wisitoken-user_guide.info
@@ -415,8 +415,8 @@ File: wisitoken-user_guide.info,  Node: Other declarations, 
 Prev: Error recover
      'wisi-face-apply' actions must be declared, so the elisp and Ada
      code aggree on what they mean.
 
-'%elisp_indent <name>'
-     Declare a name for an elisp indent variable.
+'%elisp_indent <elisp name> <Ada name>'
+     Declare elisp and Ada names for an indent variable.
 
      When generating Ada code for Emacs, the elisp indent variables used
      in 'wisi-indent' actions must be declared, so the elisp and Ada
@@ -487,11 +487,9 @@ File: wisitoken-user_guide.info,  Node: Other 
declarations,  Prev: Error recover
 '%start'
      The start token for the grammar.
 
-'regexp_name <name>'
-     Declare a named regular expression.  The name may then occur in
-     another regular expression.
-
-     The re2c lexer supports this usage; other lexers may not.
+'re2c_regexp <name> <value>'
+     Declare a named regular expression with re2c name and syntax.  The
+     name may then occur in another re2c regular expression.
 
 
 File: wisitoken-user_guide.info,  Node: Nonterminals,  Next: Conditional code, 
 Prev: Declarations,  Up: Grammar File Syntax
@@ -550,7 +548,7 @@ Node: Keywords7260
 Node: Tokens7569
 Node: Error recovery9217
 Node: Other declarations12453
-Node: Nonterminals16476
-Node: Conditional code17193
+Node: Nonterminals16475
+Node: Conditional code17192
 
 End Tag Table
diff --git a/packages/wisi/wisitoken.adb b/packages/wisi/wisitoken.adb
index ce72d3f..698c18e 100644
--- a/packages/wisi/wisitoken.adb
+++ b/packages/wisi/wisitoken.adb
@@ -2,7 +2,7 @@
 --
 --  See spec
 --
---  Copyright (C) 2009, 2014-2015, 2017, 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2009, 2014-2015, 2017 - 2019 Free Software Foundation, Inc.
 --
 --  This file is part of the WisiToken package.
 --
@@ -40,7 +40,7 @@ package body WisiToken is
 
    function Image (Item : in Token_ID; Desc : in Descriptor) return String
    is begin
-      return (if Item = Invalid_Token_ID then "" else Desc.Image (Item).all);
+      return (if Item = Invalid_Token_ID then "-" else Desc.Image (Item).all);
    end Image;
 
    procedure Put_Tokens (Descriptor : in WisiToken.Descriptor)
diff --git a/packages/wisi/wisitoken.ads b/packages/wisi/wisitoken.ads
index 81fc519..4e9d88b 100644
--- a/packages/wisi/wisitoken.ads
+++ b/packages/wisi/wisitoken.ads
@@ -1,431 +1,450 @@
---  Abstract:
---
---  Root of WisiToken lexer/parser generator and exector.
---
---  The token type is an integer subtype, not an enumeration type, to
---  avoid making this package generic, which would make all other
---  packages generic.
---
---  Additional information about a token can be stored in the
---  'augmented' field of the syntax tree; see
---  wisitoken-syntax_trees.ads.
---
---  References:
---
---  [dragon] "Compilers Principles, Techniques, and Tools" by Aho,
---  Sethi, and Ullman (aka: "The [Red] Dragon Book" due to the dragon
---  on the cover).
---
---  Copyright (C) 2009, 2010, 2013 - 2015, 2017, 2018 Free Software 
Foundation, Inc.
---
---  This file is part of the WisiToken package.
---
---  The WisiToken package is free software; you can redistribute it
---  and/or modify it under terms of the GNU General Public License as
---  published by the Free Software Foundation; either version 3, or
---  (at your option) any later version. This library is distributed in
---  the hope that it will be useful, but WITHOUT ANY WARRANTY; without
---  even the implied warranty of MERCHANTABILITY or FITNESS FOR A
---  PARTICULAR PURPOSE.
---
---  As a special exception under Section 7 of GPL version 3, you are granted
---  additional permissions described in the GCC Runtime Library Exception,
---  version 3.1, as published by the Free Software Foundation.
---
---  This software was originally developed with the name OpenToken by
---  the following company, and was released as open-source software as
---  a service to the community:
---
---           FlightSafety International Simulation Systems Division
---                    Broken Arrow, OK  USA  918-259-4000
-
-pragma License (Modified_GPL);
-
-with Ada.Containers;
-with Ada.Strings.Unbounded;
-with Ada.Text_IO;
-with Ada.Unchecked_Deallocation;
-with SAL.Gen_Trimmed_Image;
-with SAL.Gen_Unbounded_Definite_Queues;
-with SAL.Gen_Unbounded_Definite_Vectors.Gen_Image;
-with SAL.Gen_Unbounded_Definite_Vectors.Gen_Image_Aux;
-package WisiToken is
-
-   Syntax_Error : exception; -- no recovery for a syntax error was found
-
-   Parse_Error : exception; -- a non-recoverable non-fatal error was 
encountered; editing the input can fix the error.
-
-   Fatal_Error : exception; -- Error in code or grammar; editing input cannot 
fix error.
-
-   Grammar_Error : exception;
-   --  Grammar file has bad syntax, or grammar is not consistent (ie
-   --  unused tokens, missing productions, invalid actions)
-
-   User_Error : exception; -- other user error (ie command line parameter)
-
-   --  SAL.Programmer_Error : exception; -- a programming convention has been 
violated
-
-   subtype Positive_Index_Type is SAL.Peek_Type;
-   function Trimmed_Image is new SAL.Gen_Trimmed_Image (SAL.Base_Peek_Type);
-
-   type Unknown_State_Index is new Integer range -1 .. Integer'Last;
-   subtype State_Index is Unknown_State_Index range 0 .. 
Unknown_State_Index'Last;
-   Unknown_State : constant Unknown_State_Index := -1;
-
-   function Trimmed_Image is new SAL.Gen_Trimmed_Image (Unknown_State_Index);
-
-   package State_Index_Queues is new SAL.Gen_Unbounded_Definite_Queues 
(State_Index);
-   package State_Index_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(Positive, State_Index);
-   function Image is new State_Index_Arrays.Gen_Image (Trimmed_Image);
-
-   ----------
-   --  Token IDs
-
-   type Token_ID is range 0 .. Integer'Last; -- 0 origin to match elisp array
-
-   Invalid_Token_ID : constant Token_ID := Token_ID'Last;
-
-   type Token_ID_Array_String is array (Token_ID range <>) of access constant 
String;
-   type Token_ID_Array_Natural is array (Token_ID range <>) of Natural;
-
-   type Descriptor
-     (First_Terminal    : Token_ID;
-      Last_Terminal     : Token_ID;
-      First_Nonterminal : Token_ID;
-      Last_Nonterminal  : Token_ID;
-      EOF_ID            : Token_ID;
-      Accept_ID         : Token_ID)
-   is record
-      --  Tokens in the range Token_ID'First .. First_Terminal - 1 are
-      --  non-reporting (comments, whitespace), and thus are not used in
-      --  generating parse tables.
-      --
-      --  Tokens in the range Last_Terminal + 1 .. Last_Nonterminal are
-      --  the nonterminals of a grammar.
-      --
-      --  Components are discriminants if they can be specified statically.
-
-      Case_Insensitive : Boolean; -- keywords and names
-      New_Line_ID      : Token_ID;
-      Comment_ID       : Token_ID;
-      Left_Paren_ID    : Token_ID;
-      Right_Paren_ID   : Token_ID;
-      --  If the language does not define these tokens, set them to
-      --  Invalid_Token_ID.
-
-      String_1_ID  : Token_ID; -- delimited by ', error if New_Line_ID
-      String_2_ID  : Token_ID; -- delimited by ", error if New_Line_ID
-      --
-      --  Support for missing quote error recovery. If the language does not
-      --  have two kinds of string literals, set one or both of these to
-      --  Invalid_Token_ID.
-
-      Embedded_Quote_Escape_Doubled : Boolean;
-      --  True if quote characters embedded in strings are escaped by
-      --  doubling (as in Ada); false if by preceding with backslash (as in
-      --  C).
-
-      Image : Token_ID_Array_String (Token_ID'First .. Last_Nonterminal);
-      --  User names for tokens.
-
-      Terminal_Image_Width : Integer;
-      Image_Width          : Integer; --  max width of Image
-
-      --  LALR generate needs a 'Propagate_ID' lookahead that is distinct
-      --  from all terminals. Since lookaheads are Token_ID_Set, we need to
-      --  allocate First_Terminal .. Last_Terminal for LR1 generate, and
-      --  First_Terminal .. Propagate_ID for LALR generate, so we define
-      --  Last_Lookahead. After the LR table is generated, Last_Lookahead is
-      --  no longer used.
-      Last_Lookahead : Token_ID;
-   end record;
-
-   function Padded_Image (Item : in Token_ID; Desc : in Descriptor) return 
String;
-   --  Return Desc.Image (Item), padded to Terminal_Image_Width (if Item
-   --  is a terminal) or to Image_Width.
-
-   function Image (Item : in Token_ID; Desc : in Descriptor) return String;
-   --  Return Desc.Image (Item), or empty string for Invalid_Token_ID.
-
-   function Trimmed_Image is new SAL.Gen_Trimmed_Image (Token_ID);
-
-   procedure Put_Tokens (Descriptor : in WisiToken.Descriptor);
-   --  Put user readable token list (token_id'first ..
-   --  descriptor.last_nonterminal) to Ada.Text_IO.Current_Output
-
-   function Find_ID (Descriptor : in WisiToken.Descriptor; Name : in String) 
return Token_ID;
-   --  Return index of Name in Descriptor.Image. If not found, raise 
Programmer_Error.
-
-   type Token_ID_Array is array (Positive range <>) of Token_ID;
-
-   package Token_ID_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(Positive, Token_ID);
-
-   function Image is new Token_ID_Arrays.Gen_Image_Aux (WisiToken.Descriptor, 
Image);
-   function Trimmed_Image is new Token_ID_Arrays.Gen_Image (Trimmed_Image);
-
-   procedure To_Vector (Item : in Token_ID_Array; Vector : in out 
Token_ID_Arrays.Vector);
-
-   function Shared_Prefix (A, B : in Token_ID_Arrays.Vector) return Natural;
-   --  Return last index in A of a prefix shared between A, B; 0 if none.
-
-   type Token_ID_Set is array (Token_ID range <>) of Boolean;
-
-   function "&" (Left : in Token_ID_Set; Right : in Token_ID) return 
Token_ID_Set;
-   --  Include Left and Right in result.
-
-   function To_Token_ID_Set (First, Last : in Token_ID; Item : in 
Token_ID_Array) return Token_ID_Set;
-   --  First, Last determine size of result.
-   --  For each element in Item, set result (element) True.
-
-   procedure To_Set (Item : in Token_ID_Arrays.Vector; Set : out Token_ID_Set);
-   --  For each element of Item, set Set (element) True.
-
-   function To_Array (Item : in Token_ID_Set) return Token_ID_Arrays.Vector;
-
-   function Any (Item : in Token_ID_Set) return Boolean;
-
-   function Count (Item : in Token_ID_Set) return Integer;
-   --  Count of True elements.
-
-   function Image
-     (Item      : in Token_ID_Set;
-      Desc      : in Descriptor;
-      Max_Count : in Integer := Integer'Last;
-      Inverted  : in Boolean := False)
-     return String;
-   --  For diagnostics; not Ada syntax.
-
-   type Token_Array_Token_Set is array (Token_ID range <>, Token_ID range <>) 
of Boolean;
-
-   function Slice (Item : in Token_Array_Token_Set; I : in Token_ID) return 
Token_ID_Set;
-   function Any (Item : in Token_Array_Token_Set; I : in Token_ID) return 
Boolean;
-   function Any (Item : in Token_Array_Token_Set) return Boolean;
-   procedure Or_Slice (Item : in out Token_Array_Token_Set; I : in Token_ID; 
Value : in Token_ID_Set);
-
-   procedure Put (Descriptor : in WisiToken.Descriptor; Item : in 
Token_Array_Token_Set);
-   --  Put Item to Ada.Text_IO.Current_Output, using valid Ada aggregate
-   --  syntax.
-
-   type Token_Array_Token_ID is array (Token_ID range <>) of Token_ID;
-
-   package Token_Sequence_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(Token_ID, Token_ID_Arrays.Vector);
-
-   ----------
-   --  Production IDs; see wisitoken-productions.ads for more
-
-   type Production_ID is record
-      LHS : Token_ID := Invalid_Token_ID;
-      RHS : Natural  := 0;
-      --  Index into the production table.
-   end record;
-
-   Invalid_Production_ID : constant Production_ID := (others => <>);
-
-   function Image (Item : in Production_ID) return String;
-   --  Ada positional aggregate syntax, for code generation.
-
-   function Trimmed_Image (Item : in Production_ID) return String;
-   --  Nonterm.rhs_index, both integers, no leading or trailing space;
-   --  for parse table output and diagnostics.
-
-   Prod_ID_Image_Width : constant Integer := 7;
-   --  Max width of Trimmed_Image
-
-   function Padded_Image (Item : in Production_ID; Width : in Integer) return 
String;
-   --  Trimmed_Image padded with leading spaces to Width
-
-   package Production_ID_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(Positive, Production_ID);
-   function Image is new Production_ID_Arrays.Gen_Image (Image);
-   function Trimmed_Image is new Production_ID_Arrays.Gen_Image 
(Trimmed_Image);
-
-   type Production_ID_Array is array (Natural range <>) of Production_ID;
-
-   function To_Vector (Item : in Production_ID_Array) return 
Production_ID_Arrays.Vector;
-   function "+" (Item : in Production_ID_Array) return 
Production_ID_Arrays.Vector renames To_Vector;
-   function "+" (Item : in Production_ID) return Production_ID_Arrays.Vector 
is (To_Vector ((1 => Item)));
-
-   ----------
-   --  Tokens
-
-   type Base_Buffer_Pos is range 0 .. Integer'Last;
-   subtype Buffer_Pos is Base_Buffer_Pos range 1 .. Base_Buffer_Pos'Last; -- 
match Emacs buffer origin.
-   type Buffer_Region is record
-      First : Buffer_Pos;
-      Last  : Base_Buffer_Pos; --  allow representing null range.
-   end record;
-
-   Invalid_Buffer_Pos : constant Buffer_Pos    := Buffer_Pos'Last;
-   Null_Buffer_Region : constant Buffer_Region := (Buffer_Pos'Last, 
Buffer_Pos'First);
-
-   function Length (Region : in Buffer_Region) return Natural is (Natural 
(Region.Last - Region.First + 1));
-
-   function Inside (Pos : in Buffer_Pos; Region : in Buffer_Region) return 
Boolean
-     is (Region.First <= Pos and Pos <= Region.Last);
-
-   function Image (Item : in Buffer_Region) return String;
-
-   function "and" (Left, Right : in Buffer_Region) return Buffer_Region;
-   --  Return region enclosing both Left and Right.
-
-   type Line_Number_Type is range 1 .. Natural'Last; -- Match Emacs buffer 
line numbers.
-
-   Invalid_Line_Number : constant Line_Number_Type := Line_Number_Type'Last;
-
-   type Base_Token is tagged record
-      --  Base_Token is used in the core parser. The parser only needs ID;
-      --  semantic checks need Byte_Region to compare names. Line, Col, and
-      --  Char_Region are included for error messages.
-      ID : Token_ID := Invalid_Token_ID;
-
-      Byte_Region : Buffer_Region := Null_Buffer_Region;
-      --  Index into the Lexer buffer for the token text.
-
-      Line   : Line_Number_Type  := Invalid_Line_Number;
-      Column : Ada.Text_IO.Count := 0;
-      --  At start of token.
-
-      Char_Region : Buffer_Region := Null_Buffer_Region;
-      --  Character position, useful for finding the token location in Emacs
-      --  buffers.
-   end record;
-
-   type Base_Token_Class_Access is access all Base_Token'Class;
-   type Base_Token_Class_Access_Array is array (Positive_Index_Type range <>) 
of Base_Token_Class_Access;
-
-   function Image
-     (Item       : in Base_Token;
-      Descriptor : in WisiToken.Descriptor)
-     return String;
-   --  For debug/test messages.
-
-   procedure Free is new Ada.Unchecked_Deallocation (Base_Token'Class, 
Base_Token_Class_Access);
-
-   Invalid_Token : constant Base_Token := (others => <>);
-
-   type Base_Token_Index is range 0 .. Integer'Last;
-   subtype Token_Index is Base_Token_Index range 1 .. Base_Token_Index'Last;
-
-   type Token_Index_Array is array (Natural range <>) of Token_Index;
-
-   type Base_Token_Array is array (Positive_Index_Type range <>) of Base_Token;
-
-   package Base_Token_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(Token_Index, Base_Token);
-   type Base_Token_Array_Access is access all Base_Token_Arrays.Vector;
-
-   Invalid_Token_Index : constant Base_Token_Index := 
Base_Token_Arrays.No_Index;
-
-   package Line_Begin_Token_Vectors is new SAL.Gen_Unbounded_Definite_Vectors 
(Line_Number_Type, Base_Token_Index);
-
-   function Image is new Base_Token_Arrays.Gen_Image_Aux 
(WisiToken.Descriptor, Image);
-
-   function Image
-     (Token      : in Base_Token_Index;
-      Terminals  : in Base_Token_Arrays.Vector;
-      Descriptor : in WisiToken.Descriptor)
-     return String;
-
-   type Recover_Token is record
-      --  Maintaining a syntax tree during recover is too slow, so we store
-      --  enough information in the recover stack to perform semantic_checks
-      --  and to apply the solution to the main parser state. We make
-      --  thousands of copies of the parse stack during recover, so
-      --  minimizing size is critical.
-      ID : Token_ID := Invalid_Token_ID;
-
-      Byte_Region : Buffer_Region := Null_Buffer_Region;
-      --  Byte_Region is used to detect empty tokens, for cost and other 
issues.
-
-      Min_Terminal_Index : Base_Token_Index := Invalid_Token_Index;
-      --  For terminals, index of this token in Shared_Parser.Terminals. For
-      --  nonterminals, minimum of contained tokens. For virtuals,
-      --  Invalid_Token_Index. Used for push_back of nonterminals.
-
-      Name : Buffer_Region := Null_Buffer_Region;
-      --  Set and used by semantic_checks.
-
-      Virtual : Boolean := False;
-      --  For terminals, True if inserted by recover. For nonterminals, True
-      --  if any contained token has Virtual = True. Used by Semantic_Checks
-      --  and push_back.
-   end record;
-
-   function Image
-     (Item       : in Recover_Token;
-      Descriptor : in WisiToken.Descriptor)
-     return String;
-
-   type Recover_Token_Array is array (Positive_Index_Type range <>) of 
Recover_Token;
-
-   package Recover_Token_Arrays is new SAL.Gen_Unbounded_Definite_Vectors 
(Token_Index, Recover_Token);
-
-   function Image is new Recover_Token_Arrays.Gen_Image_Aux 
(WisiToken.Descriptor, Image);
-
-   ----------
-   --  Trace, debug
-
-   Trace_Parse : Integer  := 0;
-   --  If Trace_Parse > 0, Parse prints messages helpful for debugging
-   --  the grammar and/or the parser; higher value prints more.
-   --
-   --  Trace_Parse levels; output info if Trace_Parse > than:
-   --
-   Outline     : constant := 0; -- spawn/terminate parallel parsers, error 
recovery enter/exit
-   Detail      : constant := 1; -- add each parser cycle
-   Extra       : constant := 2; -- add pending semantic state operations
-   Lexer_Debug : constant := 3; -- add lexer debug
-
-   Trace_McKenzie : Integer  := 0;
-   --  If Trace_McKenzie > 0, Parse prints messages helpful for debugging 
error recovery.
-   --
-   --  Outline - error recovery enter/exit
-   --  Detail  - add each error recovery configuration
-   --  Extra   - add error recovery parse actions
-
-   Trace_Action : Integer := 0;
-   --  Output during Execute_Action, and unit tests.
-
-   Trace_Generate : Integer := 0;
-   --  Output during grammar generation.
-
-   Debug_Mode : Boolean := False;
-   --  If True, Output stack traces, propagate exceptions to top level.
-   --  Otherwise, be robust to errors, so user does not notice them.
-
-   type Trace (Descriptor : not null access constant WisiToken.Descriptor) is 
abstract tagged limited null record;
-   --  Output for tests/debugging. Descriptor included here because many
-   --  uses of Trace will use Image (Item, Descriptor);
-
-   procedure Put (Trace : in out WisiToken.Trace; Item : in String) is 
abstract;
-   --  Put Item to the Trace display.
-
-   procedure Put_Line (Trace : in out WisiToken.Trace; Item : in String) is 
abstract;
-   --  Put Item to the Trace display, followed by a newline.
-
-   procedure New_Line (Trace : in out WisiToken.Trace) is abstract;
-   --  Put a newline to the Trace display.
-
-   ----------
-   --  Misc
-
-   function "+" (Item : in String) return 
Ada.Strings.Unbounded.Unbounded_String
-     renames Ada.Strings.Unbounded.To_Unbounded_String;
-
-   function "-" (Item : in Ada.Strings.Unbounded.Unbounded_String) return 
String
-     renames Ada.Strings.Unbounded.To_String;
-
-   function Trimmed_Image is new SAL.Gen_Trimmed_Image (Integer);
-   function Trimmed_Image is new SAL.Gen_Trimmed_Image 
(Ada.Containers.Count_Type);
-
-   function Error_Message
-     (File_Name : in String;
-      Line      : in Line_Number_Type;
-      Column    : in Ada.Text_IO.Count;
-      Message   : in String)
-     return String;
-   --  Return Gnu-formatted error message.
-
-   type Names_Array is array (Integer range <>) of access constant String;
-   type Names_Array_Access is access Names_Array;
-   type Names_Array_Array is array (WisiToken.Token_ID range <>) of 
Names_Array_Access;
-
-end WisiToken;
+--  Abstract:
+--
+--  Root of WisiToken lexer/parser generator and exector.
+--
+--  The token type is an integer subtype, not an enumeration type, to
+--  avoid making this package generic, which would make all other
+--  packages generic.
+--
+--  Additional information about a token can be stored in the
+--  'augmented' field of the syntax tree; see
+--  wisitoken-syntax_trees.ads.
+--
+--  References:
+--
+--  [dragon] "Compilers Principles, Techniques, and Tools" by Aho,
+--  Sethi, and Ullman (aka: "The [Red] Dragon Book" due to the dragon
+--  on the cover).
+--
+--  Copyright (C) 2009, 2010, 2013 - 2015, 2017 - 2019 Free Software 
Foundation, Inc.
+--
+--  This file is part of the WisiToken package.
+--
+--  The WisiToken package is free software; you can redistribute it
+--  and/or modify it under terms of the GNU General Public License as
+--  published by the Free Software Foundation; either version 3, or
+--  (at your option) any later version. This library is distributed in
+--  the hope that it will be useful, but WITHOUT ANY WARRANTY; without
+--  even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+--  PARTICULAR PURPOSE.
+--
+--  As a special exception under Section 7 of GPL version 3, you are granted
+--  additional permissions described in the GCC Runtime Library Exception,
+--  version 3.1, as published by the Free Software Foundation.
+--
+--  This software was originally developed with the name OpenToken by
+--  the following company, and was released as open-source software as
+--  a service to the community:
+--
+--           FlightSafety International Simulation Systems Division
+--                    Broken Arrow, OK  USA  918-259-4000
+
+pragma License (Modified_GPL);
+
+with Ada.Containers;
+with Ada.Strings.Unbounded;
+with Ada.Text_IO;
+with Ada.Unchecked_Deallocation;
+with SAL.Gen_Trimmed_Image;
+with SAL.Gen_Unbounded_Definite_Queues;
+with SAL.Gen_Unbounded_Definite_Vectors.Gen_Image;
+with SAL.Gen_Unbounded_Definite_Vectors.Gen_Image_Aux;
+package WisiToken is
+
+   Partial_Parse : exception; -- a partial parse terminated.
+
+   Syntax_Error : exception; -- no recovery for a syntax error was found
+
+   Parse_Error : exception; -- a non-recoverable non-fatal error was 
encountered; editing the input can fix the error.
+
+   Fatal_Error : exception; -- Error in code or grammar; editing input cannot 
fix error.
+
+   Grammar_Error : exception;
+   --  Grammar file has bad syntax, or grammar is not consistent (ie
+   --  unused tokens, missing productions, invalid actions)
+
+   User_Error : exception; -- other user error (ie command line parameter)
+
+   --  SAL.Programmer_Error : exception; -- a programming convention has been 
violated
+
+   subtype Positive_Index_Type is SAL.Peek_Type;
+   function Trimmed_Image is new SAL.Gen_Trimmed_Image (SAL.Base_Peek_Type);
+
+   type Unknown_State_Index is new Integer range -1 .. Integer'Last;
+   subtype State_Index is Unknown_State_Index range 0 .. 
Unknown_State_Index'Last;
+   Unknown_State : constant Unknown_State_Index := -1;
+
+   function Trimmed_Image is new SAL.Gen_Trimmed_Image (Unknown_State_Index);
+
+   package State_Index_Queues is new SAL.Gen_Unbounded_Definite_Queues 
(State_Index);
+   package State_Index_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Positive, State_Index, Default_Element => State_Index'Last);
+   function Image is new State_Index_Arrays.Gen_Image (Trimmed_Image);
+
+   ----------
+   --  Token IDs
+
+   type Token_ID is range 0 .. Integer'Last; -- 0 origin to match elisp array
+
+   Invalid_Token_ID : constant Token_ID := Token_ID'Last;
+
+   type Token_ID_Array_String is array (Token_ID range <>) of access constant 
String;
+   type Token_ID_Array_Natural is array (Token_ID range <>) of Natural;
+
+   type Descriptor
+     (First_Terminal    : Token_ID;
+      Last_Terminal     : Token_ID;
+      First_Nonterminal : Token_ID;
+      Last_Nonterminal  : Token_ID;
+      EOI_ID            : Token_ID;
+      Accept_ID         : Token_ID)
+   is record
+      --  Tokens in the range Token_ID'First .. First_Terminal - 1 are
+      --  non-reporting (comments, whitespace), and thus are not used in
+      --  generating parse tables.
+      --
+      --  Tokens in the range Last_Terminal + 1 .. Last_Nonterminal are
+      --  the nonterminals of a grammar.
+      --
+      --  Components are discriminants if they can be specified statically.
+
+      Case_Insensitive : Boolean; -- keywords and names
+      New_Line_ID      : Token_ID;
+      Comment_ID       : Token_ID;
+      Left_Paren_ID    : Token_ID;
+      Right_Paren_ID   : Token_ID;
+      --  If the language does not define these tokens, set them to
+      --  Invalid_Token_ID.
+
+      String_1_ID  : Token_ID; -- delimited by ', error if New_Line_ID
+      String_2_ID  : Token_ID; -- delimited by ", error if New_Line_ID
+      --
+      --  Support for missing quote error recovery. If the language does not
+      --  have two kinds of string literals, set one or both of these to
+      --  Invalid_Token_ID.
+
+      Embedded_Quote_Escape_Doubled : Boolean;
+      --  True if quote characters embedded in strings are escaped by
+      --  doubling (as in Ada); false if by preceding with backslash (as in
+      --  C).
+
+      Image : Token_ID_Array_String (Token_ID'First .. Last_Nonterminal);
+      --  User names for tokens.
+
+      Terminal_Image_Width : Integer;
+      Image_Width          : Integer; --  max width of Image
+
+      --  LALR generate needs a 'Propagate_ID' lookahead that is distinct
+      --  from all terminals. Since lookaheads are Token_ID_Set, we need to
+      --  allocate First_Terminal .. Last_Terminal for LR1 generate, and
+      --  First_Terminal .. Propagate_ID for LALR generate, so we define
+      --  Last_Lookahead. After the LR table is generated, Last_Lookahead is
+      --  no longer used.
+      Last_Lookahead : Token_ID;
+   end record;
+
+   function Padded_Image (Item : in Token_ID; Desc : in Descriptor) return 
String;
+   --  Return Desc.Image (Item), padded to Terminal_Image_Width (if Item
+   --  is a terminal) or to Image_Width.
+
+   function Image (Item : in Token_ID; Desc : in Descriptor) return String;
+   --  Return Desc.Image (Item), or empty string for Invalid_Token_ID.
+
+   function Trimmed_Image is new SAL.Gen_Trimmed_Image (Token_ID);
+
+   procedure Put_Tokens (Descriptor : in WisiToken.Descriptor);
+   --  Put user readable token list (token_id'first ..
+   --  descriptor.last_nonterminal) to Ada.Text_IO.Current_Output
+
+   function Find_ID (Descriptor : in WisiToken.Descriptor; Name : in String) 
return Token_ID;
+   --  Return index of Name in Descriptor.Image. If not found, raise 
Programmer_Error.
+
+   type Token_ID_Array is array (Positive range <>) of Token_ID;
+
+   package Token_ID_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Positive, Token_ID, Default_Element => Invalid_Token_ID);
+
+   function Image is new Token_ID_Arrays.Gen_Image_Aux (Descriptor, Image);
+   function Trimmed_Image is new Token_ID_Arrays.Gen_Image (Trimmed_Image);
+
+   procedure To_Vector (Item : in Token_ID_Array; Vector : in out 
Token_ID_Arrays.Vector);
+
+   function Shared_Prefix (A, B : in Token_ID_Arrays.Vector) return Natural;
+   --  Return last index in A of a prefix shared between A, B; 0 if none.
+
+   type Token_ID_Set is array (Token_ID range <>) of Boolean;
+
+   function "&" (Left : in Token_ID_Set; Right : in Token_ID) return 
Token_ID_Set;
+   --  Include Left and Right in result.
+
+   function To_Token_ID_Set (First, Last : in Token_ID; Item : in 
Token_ID_Array) return Token_ID_Set;
+   --  First, Last determine size of result.
+   --  For each element in Item, set result (element) True.
+
+   procedure To_Set (Item : in Token_ID_Arrays.Vector; Set : out Token_ID_Set);
+   --  For each element of Item, set Set (element) True.
+
+   function To_Array (Item : in Token_ID_Set) return Token_ID_Arrays.Vector;
+
+   function Any (Item : in Token_ID_Set) return Boolean;
+
+   function Count (Item : in Token_ID_Set) return Integer;
+   --  Count of True elements.
+
+   function Image
+     (Item      : in Token_ID_Set;
+      Desc      : in Descriptor;
+      Max_Count : in Integer := Integer'Last;
+      Inverted  : in Boolean := False)
+     return String;
+   --  For diagnostics; not Ada syntax.
+
+   type Token_Array_Token_Set is array (Token_ID range <>, Token_ID range <>) 
of Boolean;
+
+   function Slice (Item : in Token_Array_Token_Set; I : in Token_ID) return 
Token_ID_Set;
+   function Any (Item : in Token_Array_Token_Set; I : in Token_ID) return 
Boolean;
+   function Any (Item : in Token_Array_Token_Set) return Boolean;
+   procedure Or_Slice (Item : in out Token_Array_Token_Set; I : in Token_ID; 
Value : in Token_ID_Set);
+
+   procedure Put (Descriptor : in WisiToken.Descriptor; Item : in 
Token_Array_Token_Set);
+   --  Put Item to Ada.Text_IO.Current_Output, using valid Ada aggregate
+   --  syntax.
+
+   type Token_Array_Token_ID is array (Token_ID range <>) of Token_ID;
+
+   package Token_Sequence_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Token_ID, Token_ID_Arrays.Vector, Default_Element => 
Token_ID_Arrays.Empty_Vector);
+
+   ----------
+   --  Production IDs; see wisitoken-productions.ads for more
+
+   type Production_ID is record
+      LHS : Token_ID := Invalid_Token_ID;
+      RHS : Natural  := 0;
+      --  Index into the production table.
+   end record;
+
+   Invalid_Production_ID : constant Production_ID := (others => <>);
+
+   function Image (Item : in Production_ID) return String;
+   --  Ada positional aggregate syntax, for code generation.
+
+   function Trimmed_Image (Item : in Production_ID) return String;
+   --  Nonterm.rhs_index, both integers, no leading or trailing space;
+   --  for parse table output and diagnostics.
+
+   Prod_ID_Image_Width : constant Integer := 7;
+   --  Max width of Trimmed_Image
+
+   function Padded_Image (Item : in Production_ID; Width : in Integer) return 
String;
+   --  Trimmed_Image padded with leading spaces to Width
+
+   package Production_ID_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Positive, Production_ID, Default_Element => Invalid_Production_ID);
+   function Image is new Production_ID_Arrays.Gen_Image (Image);
+   function Trimmed_Image is new Production_ID_Arrays.Gen_Image 
(Trimmed_Image);
+
+   type Production_ID_Array is array (Natural range <>) of Production_ID;
+
+   function To_Vector (Item : in Production_ID_Array) return 
Production_ID_Arrays.Vector;
+   function "+" (Item : in Production_ID_Array) return 
Production_ID_Arrays.Vector renames To_Vector;
+   function "+" (Item : in Production_ID) return Production_ID_Arrays.Vector 
is (To_Vector ((1 => Item)));
+
+   ----------
+   --  Tokens
+
+   type Base_Buffer_Pos is range 0 .. Integer'Last;
+   subtype Buffer_Pos is Base_Buffer_Pos range 1 .. Base_Buffer_Pos'Last; -- 
match Emacs buffer origin.
+   type Buffer_Region is record
+      First : Buffer_Pos;
+      Last  : Base_Buffer_Pos; --  allow representing null range.
+   end record;
+
+   Invalid_Buffer_Pos : constant Buffer_Pos    := Buffer_Pos'Last;
+   Null_Buffer_Region : constant Buffer_Region := (Buffer_Pos'Last, 
Buffer_Pos'First);
+
+   function Length (Region : in Buffer_Region) return Natural is (Natural 
(Region.Last - Region.First + 1));
+
+   function Inside (Pos : in Buffer_Pos; Region : in Buffer_Region) return 
Boolean
+     is (Region.First <= Pos and Pos <= Region.Last);
+
+   function Image (Item : in Buffer_Region) return String;
+
+   function "and" (Left, Right : in Buffer_Region) return Buffer_Region;
+   --  Return region enclosing both Left and Right.
+
+   type Line_Number_Type is range 1 .. Natural'Last; -- Match Emacs buffer 
line numbers.
+
+   Invalid_Line_Number : constant Line_Number_Type := Line_Number_Type'Last;
+
+   type Base_Token is tagged record
+      --  Base_Token is used in the core parser. The parser only needs ID;
+      --  semantic checks need Byte_Region to compare names. Line, Col, and
+      --  Char_Region are included for error messages.
+      ID : Token_ID := Invalid_Token_ID;
+
+      Byte_Region : Buffer_Region := Null_Buffer_Region;
+      --  Index into the Lexer buffer for the token text.
+
+      Line   : Line_Number_Type  := Invalid_Line_Number;
+      Column : Ada.Text_IO.Count := 0;
+      --  At start of token.
+
+      Char_Region : Buffer_Region := Null_Buffer_Region;
+      --  Character position, useful for finding the token location in Emacs
+      --  buffers.
+   end record;
+
+   type Base_Token_Class_Access is access all Base_Token'Class;
+   type Base_Token_Class_Access_Array is array (Positive_Index_Type range <>) 
of Base_Token_Class_Access;
+
+   function Image
+     (Item       : in Base_Token;
+      Descriptor : in WisiToken.Descriptor)
+     return String;
+   --  For debug/test messages.
+
+   procedure Free is new Ada.Unchecked_Deallocation (Base_Token'Class, 
Base_Token_Class_Access);
+
+   Invalid_Token : constant Base_Token := (others => <>);
+
+   type Base_Token_Index is range 0 .. Integer'Last;
+   subtype Token_Index is Base_Token_Index range 1 .. Base_Token_Index'Last;
+
+   Invalid_Token_Index : constant Base_Token_Index := Base_Token_Index'First;
+
+   type Token_Index_Array is array (Natural range <>) of Token_Index;
+
+   package Recover_Token_Index_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Natural, Base_Token_Index, Default_Element => Invalid_Token_Index);
+
+   type Base_Token_Array is array (Positive_Index_Type range <>) of Base_Token;
+
+   package Base_Token_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Token_Index, Base_Token, Default_Element => (others => <>));
+   type Base_Token_Array_Access is access all Base_Token_Arrays.Vector;
+
+   package Line_Begin_Token_Vectors is new SAL.Gen_Unbounded_Definite_Vectors
+     (Line_Number_Type, Base_Token_Index, Default_Element => 
Invalid_Token_Index);
+
+   function Image is new Base_Token_Arrays.Gen_Image_Aux 
(WisiToken.Descriptor, Image);
+
+   function Image
+     (Token      : in Base_Token_Index;
+      Terminals  : in Base_Token_Arrays.Vector;
+      Descriptor : in WisiToken.Descriptor)
+     return String;
+
+   type Recover_Token is record
+      --  Maintaining a syntax tree during recover is too slow, so we store
+      --  enough information in the recover stack to perform semantic_checks
+      --  and to apply the solution to the main parser state. We make
+      --  thousands of copies of the parse stack during recover, so
+      --  minimizing size is critical.
+      ID : Token_ID := Invalid_Token_ID;
+
+      Byte_Region : Buffer_Region := Null_Buffer_Region;
+      --  Byte_Region is used to detect empty tokens, for cost and other 
issues.
+
+      Min_Terminal_Index : Base_Token_Index := Invalid_Token_Index;
+      --  For terminals, index of this token in Shared_Parser.Terminals. For
+      --  nonterminals, minimum of contained tokens. For virtuals,
+      --  Invalid_Token_Index. Used for push_back of nonterminals.
+
+      Name : Buffer_Region := Null_Buffer_Region;
+      --  Set and used by semantic_checks.
+
+      Virtual : Boolean := False;
+      --  For terminals, True if inserted by recover. For nonterminals, True
+      --  if any contained token has Virtual = True. Used by Semantic_Checks
+      --  and push_back.
+   end record;
+
+   function Image
+     (Item       : in Recover_Token;
+      Descriptor : in WisiToken.Descriptor)
+     return String;
+
+   type Recover_Token_Array is array (Positive_Index_Type range <>) of 
Recover_Token;
+
+   package Recover_Token_Arrays is new SAL.Gen_Unbounded_Definite_Vectors
+     (Token_Index, Recover_Token, Default_Element => (others => <>));
+
+   function Image is new Recover_Token_Arrays.Gen_Image_Aux 
(WisiToken.Descriptor, Image);
+
+   ----------
+   --  Trace, debug
+
+   Trace_Parse : Integer  := 0;
+   --  If Trace_Parse > 0, Parse prints messages helpful for debugging
+   --  the grammar and/or the parser; higher value prints more.
+   --
+   --  Trace_Parse levels; output info if Trace_Parse > than:
+   --
+   Outline     : constant := 0; -- spawn/terminate parallel parsers, error 
recovery enter/exit
+   Detail      : constant := 1; -- add each parser cycle
+   Extra       : constant := 2; -- add pending semantic state operations
+   Lexer_Debug : constant := 3; -- add lexer debug
+
+   Trace_McKenzie : Integer  := 0;
+   --  If Trace_McKenzie > 0, Parse prints messages helpful for debugging 
error recovery.
+   --
+   --  Outline - error recovery enter/exit
+   --  Detail  - add each error recovery configuration
+   --  Extra   - add error recovery parse actions
+
+   Trace_Action : Integer := 0;
+   --  Output during Execute_Action, and unit tests.
+
+   Trace_Generate : Integer := 0;
+   --  Output during grammar generation.
+
+   Debug_Mode : Boolean := False;
+   --  If True, Output stack traces, propagate exceptions to top level.
+   --  Otherwise, be robust to errors, so user does not notice them.
+
+   type Trace (Descriptor : not null access constant WisiToken.Descriptor) is 
abstract tagged limited null record;
+   --  Output for tests/debugging. Descriptor included here because many
+   --  uses of Trace will use Image (Item, Descriptor);
+
+   procedure Set_Prefix (Trace : in out WisiToken.Trace; Prefix : in String) 
is abstract;
+   --  Prepend Prefix to all subsequent messages. Usefull for adding
+   --  comment syntax.
+
+   procedure Put (Trace : in out WisiToken.Trace; Item : in String; Prefix : 
in Boolean := True) is abstract;
+   --  Put Item to the Trace display. If Prefix is True, prepend the stored 
prefix.
+
+   procedure Put_Line (Trace : in out WisiToken.Trace; Item : in String) is 
abstract;
+   --  Put Item to the Trace display, followed by a newline.
+
+   procedure New_Line (Trace : in out WisiToken.Trace) is abstract;
+   --  Put a newline to the Trace display.
+
+   procedure Put_Clock (Trace : in out WisiToken.Trace; Label : in String) is 
abstract;
+   --  Put Ada.Calendar.Clock to Trace.
+
+   ----------
+   --  Misc
+
+   function "+" (Item : in String) return 
Ada.Strings.Unbounded.Unbounded_String
+     renames Ada.Strings.Unbounded.To_Unbounded_String;
+
+   function "-" (Item : in Ada.Strings.Unbounded.Unbounded_String) return 
String
+     renames Ada.Strings.Unbounded.To_String;
+
+   function Trimmed_Image is new SAL.Gen_Trimmed_Image (Integer);
+   function Trimmed_Image is new SAL.Gen_Trimmed_Image 
(Ada.Containers.Count_Type);
+
+   function Error_Message
+     (File_Name : in String;
+      Line      : in Line_Number_Type;
+      Column    : in Ada.Text_IO.Count;
+      Message   : in String)
+     return String;
+   --  Return Gnu-formatted error message.
+
+   type Names_Array is array (Integer range <>) of access constant String;
+   type Names_Array_Access is access Names_Array;
+   type Names_Array_Array is array (WisiToken.Token_ID range <>) of 
Names_Array_Access;
+
+end WisiToken;
diff --git a/packages/wisi/wisitoken_grammar_actions.ads 
b/packages/wisi/wisitoken_grammar_actions.ads
index 25b68e8..359a73d 100644
--- a/packages/wisi/wisitoken_grammar_actions.ads
+++ b/packages/wisi/wisitoken_grammar_actions.ads
@@ -29,7 +29,7 @@ package Wisitoken_Grammar_Actions is
       Last_Terminal                 => 25,
       First_Nonterminal             => 26,
       Last_Nonterminal              => 37,
-      EOF_ID                        => 25,
+      EOI_ID                        => 25,
       Accept_ID                     => 26,
       Case_Insensitive              => False,
       New_Line_ID                   => 1,
diff --git a/packages/wisi/wisitoken_grammar_main.adb 
b/packages/wisi/wisitoken_grammar_main.adb
index 5470e30..b8cb1c5 100644
--- a/packages/wisi/wisitoken_grammar_main.adb
+++ b/packages/wisi/wisitoken_grammar_main.adb
@@ -56,7 +56,6 @@ package body Wisitoken_Grammar_Main is
             Add_Goto (Table.States (0), 32, 4);
             Add_Goto (Table.States (0), 36, 5);
             Add_Goto (Table.States (0), 37, 6);
-            Set_Minimal_Action (Table.States (0).Minimal_Complete_Actions, (1 
=> (Shift, 18, 1)));
             Add_Action (Table.States (1), 3, 7);
             Add_Action (Table.States (1), 4, 8);
             Add_Action (Table.States (1), 5, 9);
@@ -66,17 +65,11 @@ package body Wisitoken_Grammar_Main is
             Add_Action (Table.States (1), 22, 13);
             Add_Error (Table.States (1));
             Add_Goto (Table.States (1), 28, 14);
-            Set_Minimal_Action (Table.States (1).Minimal_Complete_Actions, 
((Shift, 3, 7), (Shift, 4, 8), (Shift, 5,
-            9), (Shift, 6, 10), (Shift, 22, 13)));
             Add_Action (Table.States (2), 13, 15);
             Add_Error (Table.States (2));
-            Set_Minimal_Action (Table.States (2).Minimal_Complete_Actions, (1 
=> (Shift, 13, 15)));
             Add_Action (Table.States (3), (18, 22, 25), (36, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (3).Minimal_Complete_Actions, (1 
=> (Reduce, 36, 1)));
             Add_Action (Table.States (4), (18, 22, 25), (36, 1), 1, null, 
null);
-            Set_Minimal_Action (Table.States (4).Minimal_Complete_Actions, (1 
=> (Reduce, 36, 1)));
             Add_Action (Table.States (5), (18, 22, 25), (37, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (5).Minimal_Complete_Actions, (1 
=> (Reduce, 37, 1)));
             Add_Action (Table.States (6), 18, 1);
             Add_Action (Table.States (6), 22, 2);
             Add_Action (Table.States (6), 25, Accept_It, (26, 0), 1, null, 
null);
@@ -87,21 +80,15 @@ package body Wisitoken_Grammar_Main is
             Add_Action (Table.States (7), 22, 17);
             Add_Error (Table.States (7));
             Add_Goto (Table.States (7), 29, 18);
-            Set_Minimal_Action (Table.States (7).Minimal_Complete_Actions, (1 
=> (Shift, 22, 17)));
             Add_Action (Table.States (8), 5, 19);
             Add_Error (Table.States (8));
-            Set_Minimal_Action (Table.States (8).Minimal_Complete_Actions, (1 
=> (Shift, 5, 19)));
             Add_Action (Table.States (9), 22, 20);
             Add_Error (Table.States (9));
-            Set_Minimal_Action (Table.States (9).Minimal_Complete_Actions, (1 
=> (Shift, 22, 20)));
             Add_Action (Table.States (10), (1 =>  22), (28, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (10).Minimal_Complete_Actions, (1 
=> (Reduce, 28, 1)));
             Add_Action (Table.States (11), 17, 21);
             Add_Error (Table.States (11));
-            Set_Minimal_Action (Table.States (11).Minimal_Complete_Actions, (1 
=> (Shift, 17, 21)));
             Add_Action (Table.States (12), 17, 22);
             Add_Error (Table.States (12));
-            Set_Minimal_Action (Table.States (12).Minimal_Complete_Actions, (1 
=> (Shift, 17, 22)));
             Add_Action (Table.States (13), 8, 23);
             Add_Action (Table.States (13), 10, 24);
             Add_Action (Table.States (13), 14, 25);
@@ -116,10 +103,8 @@ package body Wisitoken_Grammar_Main is
             Add_Error (Table.States (13));
             Add_Goto (Table.States (13), 30, 32);
             Add_Goto (Table.States (13), 31, 33);
-            Set_Minimal_Action (Table.States (13).Minimal_Complete_Actions, (1 
=> (Reduce, 27, 2)));
             Add_Action (Table.States (14), 22, 34);
             Add_Error (Table.States (14));
-            Set_Minimal_Action (Table.States (14).Minimal_Complete_Actions, (1 
=> (Shift, 22, 34)));
             Add_Action (Table.States (15), 12, Reduce, (34, 0), 0, null, null);
             Add_Action (Table.States (15), 18, Reduce, (34, 0), 0, null, null);
             Add_Action (Table.States (15), 19, Reduce, (34, 0), 0, null, null);
@@ -128,44 +113,27 @@ package body Wisitoken_Grammar_Main is
             Add_Goto (Table.States (15), 33, 36);
             Add_Goto (Table.States (15), 34, 37);
             Add_Goto (Table.States (15), 35, 38);
-            Set_Minimal_Action (Table.States (15).Minimal_Complete_Actions, (1 
=> (Reduce, 33, 0)));
             Add_Action (Table.States (16), (18, 22, 25), (37, 1), 2, null, 
null);
-            Set_Minimal_Action (Table.States (16).Minimal_Complete_Actions, (1 
=> (Reduce, 37, 2)));
             Add_Action (Table.States (17), (9, 22), (29, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (17).Minimal_Complete_Actions, (1 
=> (Reduce, 29, 1)));
             Add_Action (Table.States (18), 9, 39);
             Add_Action (Table.States (18), 22, 40);
             Add_Error (Table.States (18));
-            Set_Minimal_Action (Table.States (18).Minimal_Complete_Actions, (1 
=> (Shift, 9, 39)));
             Add_Action (Table.States (19), (18, 22, 25), (27, 5), 3, 
declaration_5'Access, null);
-            Set_Minimal_Action (Table.States (19).Minimal_Complete_Actions, (1 
=> (Reduce, 27, 3)));
             Add_Action (Table.States (20), 15, 41);
             Add_Error (Table.States (20));
-            Set_Minimal_Action (Table.States (20).Minimal_Complete_Actions, (1 
=> (Shift, 15, 41)));
             Add_Action (Table.States (21), 22, 42);
             Add_Error (Table.States (21));
-            Set_Minimal_Action (Table.States (21).Minimal_Complete_Actions, (1 
=> (Shift, 22, 42)));
             Add_Action (Table.States (22), 22, 43);
             Add_Error (Table.States (22));
-            Set_Minimal_Action (Table.States (22).Minimal_Complete_Actions, (1 
=> (Shift, 22, 43)));
             Add_Action (Table.States (23), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (31, 8), 1, null, null);
-            Set_Minimal_Action (Table.States (23).Minimal_Complete_Actions, (1 
=> (Reduce, 31, 1)));
             Add_Action (Table.States (24), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (31, 4), 1, null, null);
-            Set_Minimal_Action (Table.States (24).Minimal_Complete_Actions, (1 
=> (Reduce, 31, 1)));
             Add_Action (Table.States (25), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (31, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (25).Minimal_Complete_Actions, (1 
=> (Reduce, 31, 1)));
             Add_Action (Table.States (26), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (31, 2), 1, null, null);
-            Set_Minimal_Action (Table.States (26).Minimal_Complete_Actions, (1 
=> (Reduce, 31, 1)));
             Add_Action (Table.States (27), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (31, 5), 1, null, null);
-            Set_Minimal_Action (Table.States (27).Minimal_Complete_Actions, (1 
=> (Reduce, 31, 1)));
             Add_Action (Table.States (28), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (31, 3), 1, null, null);
-            Set_Minimal_Action (Table.States (28).Minimal_Complete_Actions, (1 
=> (Reduce, 31, 1)));
             Add_Action (Table.States (29), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (31, 1), 1, null, null);
-            Set_Minimal_Action (Table.States (29).Minimal_Complete_Actions, (1 
=> (Reduce, 31, 1)));
             Add_Action (Table.States (30), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (31, 6), 1, null, null);
-            Set_Minimal_Action (Table.States (30).Minimal_Complete_Actions, (1 
=> (Reduce, 31, 1)));
             Add_Action (Table.States (31), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (31, 7), 1, null, null);
-            Set_Minimal_Action (Table.States (31).Minimal_Complete_Actions, (1 
=> (Reduce, 31, 1)));
             Add_Action (Table.States (32), 8, 23);
             Add_Action (Table.States (32), 10, 24);
             Add_Action (Table.States (32), 14, 25);
@@ -179,9 +147,7 @@ package body Wisitoken_Grammar_Main is
             Add_Action (Table.States (32), 25, Reduce, (27, 2), 3, 
declaration_2'Access, null);
             Add_Error (Table.States (32));
             Add_Goto (Table.States (32), 31, 44);
-            Set_Minimal_Action (Table.States (32).Minimal_Complete_Actions, (1 
=> (Reduce, 27, 3)));
             Add_Action (Table.States (33), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (30, 0), 1, null, null);
-            Set_Minimal_Action (Table.States (33).Minimal_Complete_Actions, (1 
=> (Reduce, 30, 1)));
             Add_Action (Table.States (34), 8, 23);
             Add_Action (Table.States (34), 10, 24);
             Add_Action (Table.States (34), 14, 25);
@@ -194,38 +160,27 @@ package body Wisitoken_Grammar_Main is
             Add_Error (Table.States (34));
             Add_Goto (Table.States (34), 30, 45);
             Add_Goto (Table.States (34), 31, 33);
-            Set_Minimal_Action (Table.States (34).Minimal_Complete_Actions, (1 
=> (Shift, 8, 23)));
             Add_Action (Table.States (35), (11, 12, 18, 19, 22), (35, 0), 1, 
null, null);
-            Set_Minimal_Action (Table.States (35).Minimal_Complete_Actions, (1 
=> (Reduce, 35, 1)));
             Add_Action (Table.States (36), 12, 46);
             Add_Action (Table.States (36), 18, 47);
             Add_Action (Table.States (36), 19, 48);
             Add_Error (Table.States (36));
-            Set_Minimal_Action (Table.States (36).Minimal_Complete_Actions, (1 
=> (Shift, 19, 48)));
             Add_Action (Table.States (37), (12, 18, 19), (33, 0), 1, null, 
null);
-            Set_Minimal_Action (Table.States (37).Minimal_Complete_Actions, (1 
=> (Reduce, 33, 1)));
             Add_Action (Table.States (38), 11, 49);
             Add_Action (Table.States (38), 12, Reduce, (34, 1), 1, null, null);
             Add_Action (Table.States (38), 18, Reduce, (34, 1), 1, null, null);
             Add_Action (Table.States (38), 19, Reduce, (34, 1), 1, null, null);
             Add_Action (Table.States (38), 22, 50);
             Add_Error (Table.States (38));
-            Set_Minimal_Action (Table.States (38).Minimal_Complete_Actions, (1 
=> (Reduce, 34, 1)));
             Add_Action (Table.States (39), (18, 22, 25), (27, 1), 4, 
declaration_1'Access, null);
-            Set_Minimal_Action (Table.States (39).Minimal_Complete_Actions, (1 
=> (Reduce, 27, 4)));
             Add_Action (Table.States (40), (9, 22), (29, 1), 2, null, null);
-            Set_Minimal_Action (Table.States (40).Minimal_Complete_Actions, (1 
=> (Reduce, 29, 2)));
             Add_Action (Table.States (41), 22, 51);
             Add_Error (Table.States (41));
-            Set_Minimal_Action (Table.States (41).Minimal_Complete_Actions, (1 
=> (Shift, 22, 51)));
             Add_Action (Table.States (42), 16, 52);
             Add_Error (Table.States (42));
-            Set_Minimal_Action (Table.States (42).Minimal_Complete_Actions, (1 
=> (Shift, 16, 52)));
             Add_Action (Table.States (43), 16, 53);
             Add_Error (Table.States (43));
-            Set_Minimal_Action (Table.States (43).Minimal_Complete_Actions, (1 
=> (Shift, 16, 53)));
             Add_Action (Table.States (44), (8, 10, 14, 15, 18, 20, 21, 22, 23, 
24, 25), (30, 1), 2, null, null);
-            Set_Minimal_Action (Table.States (44).Minimal_Complete_Actions, (1 
=> (Reduce, 30, 2)));
             Add_Action (Table.States (45), 8, 23);
             Add_Action (Table.States (45), 10, 24);
             Add_Action (Table.States (45), 14, 25);
@@ -239,7 +194,6 @@ package body Wisitoken_Grammar_Main is
             Add_Action (Table.States (45), 25, Reduce, (27, 0), 4, 
declaration_0'Access, null);
             Add_Error (Table.States (45));
             Add_Goto (Table.States (45), 31, 44);
-            Set_Minimal_Action (Table.States (45).Minimal_Complete_Actions, (1 
=> (Reduce, 27, 4)));
             Add_Action (Table.States (46), 12, Reduce, (34, 0), 0, null, null);
             Add_Action (Table.States (46), 18, Reduce, (34, 0), 0, null, null);
             Add_Action (Table.States (46), 19, Reduce, (34, 0), 0, null, null);
@@ -247,47 +201,31 @@ package body Wisitoken_Grammar_Main is
             Add_Error (Table.States (46));
             Add_Goto (Table.States (46), 34, 54);
             Add_Goto (Table.States (46), 35, 38);
-            Set_Minimal_Action (Table.States (46).Minimal_Complete_Actions, (1 
=> (Reduce, 34, 0)));
             Add_Action (Table.States (47), 4, 55);
             Add_Action (Table.States (47), 5, 56);
             Add_Error (Table.States (47));
-            Set_Minimal_Action (Table.States (47).Minimal_Complete_Actions, 
((Shift, 4, 55), (Shift, 5, 56)));
             Add_Action (Table.States (48), (18, 22, 25), (32, 0), 4, 
nonterminal_0'Access, null);
-            Set_Minimal_Action (Table.States (48).Minimal_Complete_Actions, (1 
=> (Reduce, 32, 4)));
             Add_Action (Table.States (49), 11, 57);
             Add_Action (Table.States (49), 12, Reduce, (34, 2), 2, null, null);
             Add_Action (Table.States (49), 18, Reduce, (34, 2), 2, null, null);
             Add_Action (Table.States (49), 19, Reduce, (34, 2), 2, null, null);
             Add_Error (Table.States (49));
-            Set_Minimal_Action (Table.States (49).Minimal_Complete_Actions, (1 
=> (Reduce, 34, 2)));
             Add_Action (Table.States (50), (11, 12, 18, 19, 22), (35, 1), 2, 
null, null);
-            Set_Minimal_Action (Table.States (50).Minimal_Complete_Actions, (1 
=> (Reduce, 35, 2)));
             Add_Action (Table.States (51), (18, 22, 25), (27, 4), 5, 
declaration_4'Access, null);
-            Set_Minimal_Action (Table.States (51).Minimal_Complete_Actions, (1 
=> (Reduce, 27, 5)));
             Add_Action (Table.States (52), (1 =>  22), (28, 1), 4, null, null);
-            Set_Minimal_Action (Table.States (52).Minimal_Complete_Actions, (1 
=> (Reduce, 28, 4)));
             Add_Action (Table.States (53), (1 =>  22), (28, 2), 4, null, null);
-            Set_Minimal_Action (Table.States (53).Minimal_Complete_Actions, (1 
=> (Reduce, 28, 4)));
             Add_Action (Table.States (54), (12, 18, 19), (33, 1), 3, null, 
null);
-            Set_Minimal_Action (Table.States (54).Minimal_Complete_Actions, (1 
=> (Reduce, 33, 3)));
             Add_Action (Table.States (55), 5, 58);
             Add_Error (Table.States (55));
-            Set_Minimal_Action (Table.States (55).Minimal_Complete_Actions, (1 
=> (Shift, 5, 58)));
             Add_Action (Table.States (56), 22, 59);
             Add_Error (Table.States (56));
-            Set_Minimal_Action (Table.States (56).Minimal_Complete_Actions, (1 
=> (Shift, 22, 59)));
             Add_Action (Table.States (57), (12, 18, 19), (34, 3), 3, null, 
null);
-            Set_Minimal_Action (Table.States (57).Minimal_Complete_Actions, (1 
=> (Reduce, 34, 3)));
             Add_Action (Table.States (58), (12, 18, 19), (33, 3), 4, null, 
null);
-            Set_Minimal_Action (Table.States (58).Minimal_Complete_Actions, (1 
=> (Reduce, 33, 4)));
             Add_Action (Table.States (59), 15, 60);
             Add_Error (Table.States (59));
-            Set_Minimal_Action (Table.States (59).Minimal_Complete_Actions, (1 
=> (Shift, 15, 60)));
             Add_Action (Table.States (60), 22, 61);
             Add_Error (Table.States (60));
-            Set_Minimal_Action (Table.States (60).Minimal_Complete_Actions, (1 
=> (Shift, 22, 61)));
             Add_Action (Table.States (61), (12, 18, 19), (33, 2), 6, null, 
null);
-            Set_Minimal_Action (Table.States (61).Minimal_Complete_Actions, (1 
=> (Reduce, 33, 6)));
          end Subr_1;
       begin
          Subr_1;
@@ -296,7 +234,7 @@ package body Wisitoken_Grammar_Main is
       WisiToken.Parse.LR.Parser_No_Recover.New_Parser
         (Parser,
          Trace,
-         Lexer.New_Lexer (Trace),
+         Lexer.New_Lexer (Trace.Descriptor),
          Table,
          User_Data,
          Max_Parallel         => 15,
diff --git a/packages/wisi/wisitoken_grammar_re2c.c 
b/packages/wisi/wisitoken_grammar_re2c.c
index b45ab3a..6ad6b86 100644
--- a/packages/wisi/wisitoken_grammar_re2c.c
+++ b/packages/wisi/wisitoken_grammar_re2c.c
@@ -39,7 +39,7 @@ typedef struct wisi_lexer
    int            line_token_start; // line at start of current token
    unsigned char* marker;           // saved cursor
    size_t         marker_pos;       // saved character position
-   size_t         marker_line;      // saved line 
+   size_t         marker_line;      // saved line
    unsigned char* context;          // saved cursor
    size_t         context_pos;      // saved character position
    int            context_line;     // saved line
@@ -54,13 +54,16 @@ typedef struct wisi_lexer
 wisi_lexer* wisitoken_grammar_new_lexer
    (unsigned char* input, size_t length, int verbosity)
 {
-   wisi_lexer* result  = malloc (sizeof (wisi_lexer));
-   result->buffer      = input;
-   result->buffer_last = input + length - 1;
-   result->cursor      = input;
-   result->char_pos    = 1;
-   result->line        = (*result->cursor == 0x0A) ? 2 : 1;
-   result->verbosity   = verbosity;
+   wisi_lexer* result        = malloc (sizeof (wisi_lexer));
+   result->buffer            = input;
+   result->buffer_last       = input + length - 1;
+   result->cursor            = input;
+   result->byte_token_start  = input;
+   result->char_pos          = 1;
+   result->char_token_start  = 1;
+   result->line              = (*result->cursor == 0x0A) ? 2 : 1;
+   result->line_token_start  = result->line;
+   result->verbosity         = verbosity;
    return result;
 }
 
@@ -98,10 +101,13 @@ static void debug(wisi_lexer* lexer, int state, unsigned 
char ch)
 
 static void skip(wisi_lexer* lexer)
 {
-   if (lexer->cursor <= lexer->buffer_last) ++lexer->cursor;
    if (lexer->cursor <= lexer->buffer_last)
+   {
+      ++lexer->cursor;
       if (DO_COUNT) ++lexer->char_pos;
-   if (*lexer->cursor == 0x0A) ++lexer->line;
+      if (lexer->cursor <= lexer->buffer_last)
+         if (*lexer->cursor == 0x0A) ++lexer->line;
+   }
 }
 #define YYSKIP() skip(lexer)
 #define YYBACKUP() lexer->marker = lexer->cursor; lexer->marker_pos = 
lexer->char_pos;lexer->marker_line = lexer->line
@@ -158,10 +164,7 @@ int wisitoken_grammar_next_token
    }
 
    lexer->byte_token_start = lexer->cursor;
-   if (DO_COUNT)
-      lexer->char_token_start = lexer->char_pos;
-   else
-      lexer->char_token_start = lexer->char_pos + 1;
+   lexer->char_token_start = lexer->char_pos;
    if (*lexer->cursor == 0x0A)
       lexer->line_token_start = lexer->line-1;
    else
@@ -170,7 +173,7 @@ int wisitoken_grammar_next_token
    while (*id == -1 && status == 0)
    {
 
-#line 174 "../wisitoken_grammar_re2c.c"
+#line 177 "../wisitoken_grammar_re2c.c"
 {
        YYCTYPE yych;
        unsigned int yyaccept = 0;
@@ -262,21 +265,21 @@ yy2:
        YYSKIP ();
 yy3:
        YYDEBUG(3, YYPEEK ());
-#line 230 "../wisitoken_grammar.re2c"
+#line 233 "../wisitoken_grammar.re2c"
        {status = ERROR_unrecognized_character; continue;}
-#line 268 "../wisitoken_grammar_re2c.c"
+#line 271 "../wisitoken_grammar_re2c.c"
 yy4:
        YYDEBUG(4, YYPEEK ());
        YYSKIP ();
        YYDEBUG(5, YYPEEK ());
-#line 228 "../wisitoken_grammar.re2c"
+#line 231 "../wisitoken_grammar.re2c"
        {*id =  25; continue;}
-#line 275 "../wisitoken_grammar_re2c.c"
+#line 278 "../wisitoken_grammar_re2c.c"
 yy6:
        YYDEBUG(6, YYPEEK ());
        YYSKIP ();
        YYDEBUG(7, YYPEEK ());
-#line 197 "../wisitoken_grammar.re2c"
+#line 200 "../wisitoken_grammar.re2c"
        { lexer->byte_token_start = lexer->cursor;
           lexer->char_token_start = lexer->char_pos;
           if (*lexer->cursor == 0x0A)
@@ -284,14 +287,14 @@ yy6:
           else
              lexer->line_token_start = lexer->line;
           continue; }
-#line 288 "../wisitoken_grammar_re2c.c"
+#line 291 "../wisitoken_grammar_re2c.c"
 yy8:
        YYDEBUG(8, YYPEEK ());
        YYSKIP ();
        YYDEBUG(9, YYPEEK ());
-#line 204 "../wisitoken_grammar.re2c"
+#line 207 "../wisitoken_grammar.re2c"
        {*id =  1; continue;}
-#line 295 "../wisitoken_grammar_re2c.c"
+#line 298 "../wisitoken_grammar_re2c.c"
 yy10:
        YYDEBUG(10, YYPEEK ());
        YYSKIP ();
@@ -468,9 +471,9 @@ yy12:
        }
 yy13:
        YYDEBUG(13, YYPEEK ());
-#line 221 "../wisitoken_grammar.re2c"
+#line 224 "../wisitoken_grammar.re2c"
        {*id =  18; continue;}
-#line 474 "../wisitoken_grammar_re2c.c"
+#line 477 "../wisitoken_grammar_re2c.c"
 yy14:
        YYDEBUG(14, YYPEEK ());
        yyaccept = 0;
@@ -631,16 +634,16 @@ yy15:
        YYDEBUG(15, YYPEEK ());
        YYSKIP ();
        YYDEBUG(16, YYPEEK ());
-#line 217 "../wisitoken_grammar.re2c"
+#line 220 "../wisitoken_grammar.re2c"
        {*id =  14; continue;}
-#line 637 "../wisitoken_grammar_re2c.c"
+#line 640 "../wisitoken_grammar_re2c.c"
 yy17:
        YYDEBUG(17, YYPEEK ());
        YYSKIP ();
        YYDEBUG(18, YYPEEK ());
-#line 223 "../wisitoken_grammar.re2c"
+#line 226 "../wisitoken_grammar.re2c"
        {*id =  20; continue;}
-#line 644 "../wisitoken_grammar_re2c.c"
+#line 647 "../wisitoken_grammar_re2c.c"
 yy19:
        YYDEBUG(19, YYPEEK ());
        YYSKIP ();
@@ -662,16 +665,16 @@ yy19:
        }
 yy21:
        YYDEBUG(21, YYPEEK ());
-#line 224 "../wisitoken_grammar.re2c"
+#line 227 "../wisitoken_grammar.re2c"
        {*id =  21; continue;}
-#line 668 "../wisitoken_grammar_re2c.c"
+#line 671 "../wisitoken_grammar_re2c.c"
 yy22:
        YYDEBUG(22, YYPEEK ());
        YYSKIP ();
        YYDEBUG(23, YYPEEK ());
-#line 216 "../wisitoken_grammar.re2c"
+#line 219 "../wisitoken_grammar.re2c"
        {*id =  13; continue;}
-#line 675 "../wisitoken_grammar_re2c.c"
+#line 678 "../wisitoken_grammar_re2c.c"
 yy24:
        YYDEBUG(24, YYPEEK ());
        YYSKIP ();
@@ -682,30 +685,30 @@ yy24:
        }
 yy25:
        YYDEBUG(25, YYPEEK ());
-#line 222 "../wisitoken_grammar.re2c"
+#line 225 "../wisitoken_grammar.re2c"
        {*id =  19; continue;}
-#line 688 "../wisitoken_grammar_re2c.c"
+#line 691 "../wisitoken_grammar_re2c.c"
 yy26:
        YYDEBUG(26, YYPEEK ());
        YYSKIP ();
        YYDEBUG(27, YYPEEK ());
-#line 220 "../wisitoken_grammar.re2c"
+#line 223 "../wisitoken_grammar.re2c"
        {*id =  17; continue;}
-#line 695 "../wisitoken_grammar_re2c.c"
+#line 698 "../wisitoken_grammar_re2c.c"
 yy28:
        YYDEBUG(28, YYPEEK ());
        YYSKIP ();
        YYDEBUG(29, YYPEEK ());
-#line 218 "../wisitoken_grammar.re2c"
+#line 221 "../wisitoken_grammar.re2c"
        {*id =  15; continue;}
-#line 702 "../wisitoken_grammar_re2c.c"
+#line 705 "../wisitoken_grammar_re2c.c"
 yy30:
        YYDEBUG(30, YYPEEK ());
        YYSKIP ();
        YYDEBUG(31, YYPEEK ());
-#line 219 "../wisitoken_grammar.re2c"
+#line 222 "../wisitoken_grammar.re2c"
        {*id =  16; continue;}
-#line 709 "../wisitoken_grammar_re2c.c"
+#line 712 "../wisitoken_grammar_re2c.c"
 yy32:
        YYDEBUG(32, YYPEEK ());
        YYSKIP ();
@@ -781,9 +784,9 @@ yy33:
        }
 yy34:
        YYDEBUG(34, YYPEEK ());
-#line 225 "../wisitoken_grammar.re2c"
+#line 228 "../wisitoken_grammar.re2c"
        {*id =  22; continue;}
-#line 787 "../wisitoken_grammar_re2c.c"
+#line 790 "../wisitoken_grammar_re2c.c"
 yy35:
        YYDEBUG(35, YYPEEK ());
        YYSKIP ();
@@ -836,9 +839,9 @@ yy41:
        YYDEBUG(41, YYPEEK ());
        YYSKIP ();
        YYDEBUG(42, YYPEEK ());
-#line 215 "../wisitoken_grammar.re2c"
+#line 218 "../wisitoken_grammar.re2c"
        {*id =  12; continue;}
-#line 842 "../wisitoken_grammar_re2c.c"
+#line 845 "../wisitoken_grammar_re2c.c"
 yy43:
        YYDEBUG(43, YYPEEK ());
        YYSKIP ();
@@ -1016,9 +1019,9 @@ yy46:
        }
 yy47:
        YYDEBUG(47, YYPEEK ());
-#line 226 "../wisitoken_grammar.re2c"
+#line 229 "../wisitoken_grammar.re2c"
        {*id =  23; continue;}
-#line 1022 "../wisitoken_grammar_re2c.c"
+#line 1025 "../wisitoken_grammar_re2c.c"
 yy48:
        YYDEBUG(48, YYPEEK ());
        YYSKIP ();
@@ -1353,23 +1356,23 @@ yy54:
        YYDEBUG(54, YYPEEK ());
        YYSKIP ();
        YYDEBUG(55, YYPEEK ());
-#line 214 "../wisitoken_grammar.re2c"
+#line 217 "../wisitoken_grammar.re2c"
        {*id =  11; skip_to(lexer, ")%"); continue;}
-#line 1359 "../wisitoken_grammar_re2c.c"
+#line 1362 "../wisitoken_grammar_re2c.c"
 yy56:
        YYDEBUG(56, YYPEEK ());
        YYSKIP ();
        YYDEBUG(57, YYPEEK ());
-#line 213 "../wisitoken_grammar.re2c"
+#line 216 "../wisitoken_grammar.re2c"
        {*id =  10; skip_to(lexer, "]%"); continue;}
-#line 1366 "../wisitoken_grammar_re2c.c"
+#line 1369 "../wisitoken_grammar_re2c.c"
 yy58:
        YYDEBUG(58, YYPEEK ());
        YYSKIP ();
        YYDEBUG(59, YYPEEK ());
-#line 212 "../wisitoken_grammar.re2c"
+#line 215 "../wisitoken_grammar.re2c"
        {*id =  9; skip_to(lexer, "}%"); continue;}
-#line 1373 "../wisitoken_grammar_re2c.c"
+#line 1376 "../wisitoken_grammar_re2c.c"
 yy60:
        YYDEBUG(60, YYPEEK ());
        YYSKIP ();
@@ -1538,9 +1541,9 @@ yy62:
        }
 yy63:
        YYDEBUG(63, YYPEEK ());
-#line 227 "../wisitoken_grammar.re2c"
+#line 230 "../wisitoken_grammar.re2c"
        {*id =  24; continue;}
-#line 1544 "../wisitoken_grammar_re2c.c"
+#line 1547 "../wisitoken_grammar_re2c.c"
 yy64:
        YYDEBUG(64, YYPEEK ());
        YYSKIP ();
@@ -2060,9 +2063,9 @@ yy70:
        }
 yy72:
        YYDEBUG(72, YYPEEK ());
-#line 205 "../wisitoken_grammar.re2c"
+#line 208 "../wisitoken_grammar.re2c"
        {*id =  2; continue;}
-#line 2066 "../wisitoken_grammar_re2c.c"
+#line 2069 "../wisitoken_grammar_re2c.c"
 yy73:
        YYDEBUG(73, YYPEEK ());
        YYSKIP ();
@@ -2152,9 +2155,9 @@ yy75:
        }
 yy76:
        YYDEBUG(76, YYPEEK ());
-#line 208 "../wisitoken_grammar.re2c"
+#line 211 "../wisitoken_grammar.re2c"
        {*id =  5; continue;}
-#line 2158 "../wisitoken_grammar_re2c.c"
+#line 2161 "../wisitoken_grammar_re2c.c"
 yy77:
        YYDEBUG(77, YYPEEK ());
        YYSKIP ();
@@ -2590,9 +2593,9 @@ yy87:
        }
 yy88:
        YYDEBUG(88, YYPEEK ());
-#line 207 "../wisitoken_grammar.re2c"
+#line 210 "../wisitoken_grammar.re2c"
        {*id =  4; continue;}
-#line 2596 "../wisitoken_grammar_re2c.c"
+#line 2599 "../wisitoken_grammar_re2c.c"
 yy89:
        YYDEBUG(89, YYPEEK ());
        YYSKIP ();
@@ -2690,9 +2693,9 @@ yy92:
        }
 yy93:
        YYDEBUG(93, YYPEEK ());
-#line 206 "../wisitoken_grammar.re2c"
+#line 209 "../wisitoken_grammar.re2c"
        {*id =  3; continue;}
-#line 2696 "../wisitoken_grammar_re2c.c"
+#line 2699 "../wisitoken_grammar_re2c.c"
 yy94:
        YYDEBUG(94, YYPEEK ());
        YYSKIP ();
@@ -2806,9 +2809,9 @@ yy99:
        }
 yy100:
        YYDEBUG(100, YYPEEK ());
-#line 211 "../wisitoken_grammar.re2c"
+#line 214 "../wisitoken_grammar.re2c"
        {*id =  8; continue;}
-#line 2812 "../wisitoken_grammar_re2c.c"
+#line 2815 "../wisitoken_grammar_re2c.c"
 yy101:
        YYDEBUG(101, YYPEEK ());
        YYSKIP ();
@@ -2898,9 +2901,9 @@ yy103:
        }
 yy104:
        YYDEBUG(104, YYPEEK ());
-#line 209 "../wisitoken_grammar.re2c"
+#line 212 "../wisitoken_grammar.re2c"
        {*id =  6; continue;}
-#line 2904 "../wisitoken_grammar_re2c.c"
+#line 2907 "../wisitoken_grammar_re2c.c"
 yy105:
        YYDEBUG(105, YYPEEK ());
        YYSKIP ();
@@ -3006,11 +3009,11 @@ yy109:
        }
 yy110:
        YYDEBUG(110, YYPEEK ());
-#line 210 "../wisitoken_grammar.re2c"
+#line 213 "../wisitoken_grammar.re2c"
        {*id =  7; continue;}
-#line 3012 "../wisitoken_grammar_re2c.c"
+#line 3015 "../wisitoken_grammar_re2c.c"
 }
-#line 231 "../wisitoken_grammar.re2c"
+#line 234 "../wisitoken_grammar.re2c"
 
       }
    *byte_position = lexer->byte_token_start - lexer->buffer + 1;
diff --git a/packages/wisi/wisitoken_grammar_runtime.adb 
b/packages/wisi/wisitoken_grammar_runtime.adb
index 412ffef..3795b1a 100644
--- a/packages/wisi/wisitoken_grammar_runtime.adb
+++ b/packages/wisi/wisitoken_grammar_runtime.adb
@@ -2,7 +2,7 @@
 --
 --  See spec.
 --
---  Copyright (C) 2018 Free Software Foundation, Inc.
+--  Copyright (C) 2018 - 2019 Free Software Foundation, Inc.
 --
 --  This library is free software;  you can redistribute it and/or modify it
 --  under terms of the  GNU General Public License  as published by the Free
@@ -39,7 +39,7 @@ package body WisiToken_Grammar_Runtime is
          Region : Buffer_Region renames Data.Terminals.all (Tree.Terminal 
(Tree_Index)).Byte_Region;
       begin
          if -Tree.ID (Tree_Index) in RAW_CODE_ID | REGEXP_ID | ACTION_ID then
-            --  strip delimiters.
+            --  Strip delimiters. We don't strip leading/trailing spaces to 
preserve indent.
             return Data.Grammar_Lexer.Buffer_Text ((Region.First + 2, 
Region.Last - 2));
 
          elsif -Tree.ID (Tree_Index) in STRING_LITERAL_ID | 
STRING_LITERAL_CASE_INS_ID and Strip_Quotes then
@@ -140,7 +140,7 @@ package body WisiToken_Grammar_Runtime is
                declare
                   Text : constant String := Get_Text (Data, Tree, Tokens (2));
                begin
-                  if Text'Length > 0 then
+                  if Text'Length > 0 and (for some C of Text => C /= ' ') then
                      RHS.Action := +Text;
                      Data.Action_Count := Data.Action_Count + 1;
                   end if;
@@ -220,7 +220,6 @@ package body WisiToken_Grammar_Runtime is
       Data.Language_Params   := (others => <>);
       WisiToken.BNF.Free (Data.Generate_Set);
       Data.Tokens            := (others => <>);
-      Data.User_Names        := (others => <>);
       Data.Conflicts.Clear;
       Data.McKenzie_Recover  := (others => <>);
       Data.Rule_Count        := 0;
@@ -437,10 +436,10 @@ package body WisiToken_Grammar_Runtime is
                   null;
 
                elsif Kind = "elisp_face" then
-                  Data.User_Names.Faces.Append (Get_Text (Data, Tree, Tokens 
(3), Strip_Quotes => True));
+                  Data.Tokens.Faces.Append (Get_Text (Data, Tree, Tokens (3), 
Strip_Quotes => True));
 
                elsif Kind = "elisp_indent" then
-                  Data.User_Names.Indents.Append
+                  Data.Tokens.Indents.Append
                     ((Name  => +Get_Child_Text (Data, Tree, Tokens (3), 1, 
Strip_Quotes => True),
                       Value => +Get_Child_Text (Data, Tree, Tokens (3), 2)));
 
diff --git a/packages/wisi/wisitoken_grammar_runtime.ads 
b/packages/wisi/wisitoken_grammar_runtime.ads
index 62aaf9a..9c9d0ac 100644
--- a/packages/wisi/wisitoken_grammar_runtime.ads
+++ b/packages/wisi/wisitoken_grammar_runtime.ads
@@ -41,7 +41,6 @@ package WisiToken_Grammar_Runtime is
       Raw_Code         : WisiToken.BNF.Raw_Code;
       Language_Params  : WisiToken.BNF.Language_Param_Type;
       Tokens           : aliased WisiToken.BNF.Tokens;
-      User_Names       : WisiToken.BNF.User_Names;
       Conflicts        : WisiToken.BNF.Conflict_Lists.List;
       McKenzie_Recover : WisiToken.BNF.McKenzie_Recover_Param_Type;
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]